[[Tips]] >

* S2Dao Tips [#yf4cdb02]
#contents

** トランザクションインタセプタの特性 [#v689aaa6]
-各トランザクションインタセプタの基底クラスである ''S2Dao_AbstractTxInterceptor'' は、''コンストラクタの中でデータソースを使ってコネクションオブジェクト(たとえば、データベースならばPDOオブジェクト)を取得''してしまっています。これは、データベース接続に障害がある場合には、トランザクションインタセプタのインスタンス化が失敗し、インジェクション先のコンポーネント(通常はサービス層のオブジェクト)の取得にも失敗することを意味します。データベース接続状態が、コンポーネントの構築に影響してしまっています。
-回避策としては、この影響が伝播しないように、トランザクションインタセプタをインジェクトするサービスコンポーネントを小さく作成し、できる限り他のコンポーネントにインジェクトしないようにします。

** ログ出力の注意点 [#j44fee61]

*** デバッグログの出力 [#j27fba8e]
-S2Dao では、[[S2Container_S2Logger>http://s2container.php5.seasar.org/extension.html]] を使用してログ出力していますが、''一部のデバッグログ出力時に条件として必ず S2CONTAINER_PHP5_LOG_LEVEL 定数を評価してしまっています。''((パフォーマンスのためでしょうか。))そのため、本来 S2CONTAINER_PHP5_LOG_LEVEL 定数の設定に左右されないはずの log4php などを S2Container_S2Logger 実装として設定した場合でも、それらのデバッグログ出力のために、S2CONTAINER_PHP5_LOG_LEVEL 定数を定義する必要があります。

*** トランザクション管理イベントのログ [#kec72968]
-各トランザクションインタセプタ(実際にはその抽象クラス)において、トランザクションの開始、コミット、ロールバックといった管理イベント発生時に、デバッグログの出力が一切ありません。開発時の確認には不便なので、PHP Commons では、[[それらのデバッグログ出力をするようにするパッチ>phpcommonsSvn:/s2dao.php5/trunk/patches/]]を当てた S2Dao PEARパッケージ(1.1.2.1以降((本家には、4桁のバージョン番号を持ったリリースはありませんので、このパッケージの使用は自己責任でお願いします。)))を提供します。なお、このログ出力時に、PDOインスタンスの識別のため spl_object_hash() 関数を使用しているため、パッケージのインストールには PHP 5.2.0 以上が必要となります。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS