sd_dba_LTY1OTI3最終回は、予定を変えてReactorフレームワークを詳解します。TCPServerはスレッドプールによるマルチスレッドのソケット通信ですが、クライアントの数が巨大なシステムではC10K問題を起こしてしまいます。それを解決するノンブロッキングI/Oを実現するのにPocoではReactorフレームワークを提供しています。Reactorフレームワークを使うNetライブラリのサンプルとして、EchoServerプロジェクトがPOCOに付属しています。EchoServerプロジェクトを、Reactorフレームワークが提供するすべてのイベントハンドラをサポートするように改造してみます。sd_dba_LTY1OTI3今回は、POCOでのクラスローディングの実装例を詳解します。参考情報のポインタを示します。http://pocoproject.org/slides/120-SharedLibraries.pdfさて、このクラスローディングはPOCO独自の機能で、シェアドライブラリからプログラム実行時にクラスを動的生成することができます。シェアドライブラリを追加・変更することで、プログラムの振る舞いを変更できますので、主な用途としてはプラグインが挙げられます。クラスローディングのサンプルコードは、シェアドライブラリのコードとクラスローディングするコードの2つに分かれます。sd_dba_LTY1OTI3今回は、POCOのバリデーションを詳解します。POCOで用意されているバリデーションはコマンドラインオプションの入力値のバリデーションで、intと正規表現の2種類のバリデーションが提供されています。オプションは、エラーメッセージに使われているだけなので、HTMLフォームのバリデーションに使うこともできます。実際のアプリケーションでは、エラーメッセージ体系を独自に決めるでしょうから、POCOの実装を参考にして自作することになると思います。簡単なバリデーションのサンプルコードは以下のようになります。sd_dba_LTY1OTI3今回は、POCOでのプロパティファイルの使い方を詳解します。ロギングフレームワークの使い方」でプロパティファイルは既出なのですが、ロギングフレームワーク内でプロパティファイルの読み込みが行われているため、詳解したコードにはプロパティファイルの処理が含まれていませんでした。MySQLの接続情報をプロパティファイルから読み込むサンプルコードは以下のようになります。sd_dba_LTY1OTI3今回は、POCOでのデータベース利用の実装例を詳解します。参考情報のポインタを示します。http://pocoproject.org/docs/00200-DataUserManual.html英語サイトですが、データベースフレームワークの使い方を丁寧に説明しています。英語を苦にしない人は、上記サイトを見てもらえればOKです。これだけだとこの記事が寂しすぎるので、MySQLでのCRUDのサンプルプログラムを紹介しておきます。sd_dba_LTY1OTI3今回は、iPhoneアプリ開発にPOCOを使う方法を詳解します。Worldプロジェクトができていることをスタート地点とします。http://knol.google.com/k/iphone-sdk-helloworld#POCOをXcodeで使うには、以下の3点が必要です。・POCOをiPhone用にビルド&デプロイする。・Xcodeプロジェクト設定をPOCO用に変更する。・Object-C++で、POCOを使う。sd_dba_LTY1OTI3ロギングフレームワークの使い方を詳解します。参考情報のCodeZineの記事でロギングフレームワークそのものは詳しく説明されています。残念なことに実際にはどのように使うのがベストなのか説明がありません。Log4Jと同じように、ソース内で記述するログ出力処理はできるだけ少なく、でもプロパティファイルの設定によってコンソールやファイルにログ出力する方法を説明します。その方法はとても簡単で、SplitterChannelを使う設定をプロパティファイルに記述するだけです。プロパティファイルは指定しない場合は、実行ファイルと同じディレクトリの{実行ファイル名}.propertiesが読み込まれます。プロパティファイルの記述例は以下のようになります。sd_dba_LTY1OTI3PUSH技術をPOCOを使ってどのように実装できるか詳解します。その前に、PUSH技術とは何かおさらいしておきます。PUSH技術とは、テレビのようにサーバから複数のクライアントへコンテンツを送信する技術で、実現方法は以下の3つです。クライアントが定期的にリクエストを発行する。ポーリングと同じくクライアントがリクエストを発行するが、新しいコンテンツが発生するまでレスポンスを返さない。コネクションを張りっぱなしにする。(ストリーミング)・・・例:金融取引リッチクライアントポーリングとロングポーリングについては、ググればサンプルソースがたくさん見つかりますが、ストリーミングについてはまったく見つかりませんでした。ここでは、POCOを使ってストリーミングを実装していきます。sd_dba_LTY1OTI3C++はオブジェクト指向言語の黎明期から存在し、Javaが登場するまでは人気のある開発言語でした。言語仕様がとても複雑で標準クラスライブラリがコンテナくらいしかなくしょぼいので、最近のプロジェクトではほとんど使われていないと思います。今は、Java、C#、Rubyで開発するのが普通ですが、今回、C++のオープンソースライブラリであるPOCOを詳解するのは、時間の無駄のように思うかもしれません。私の予想は60%以上の確率で外れる気がしますが、POCOを前提としたC++開発の人気が将来でてくると思っているからです。理由は以下の3点です。POCOを使うとC++開発が、Java開発と同程度に容易になる。C++は、リアルタイム処理、パフォーマンスの高さで他言語に対してアドバンテージがある。iPhoneの開発に使える。sd_dba_LTY1OTI3当社は最先端の金融市場ソフトウェアを開発する会社ですが、その開発の中で蓄積した技術情報をブログとして発信していくこととしました。微力ながら日本のIT技術発展に貢献していければ幸いです。