Tips >

S2Dao Tips

トランザクションインタセプタの特性

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

ログ出力の注意点

デバッグログの出力

  • S2Dao では、S2Container_S2Logger を使用してログ出力していますが、一部のデバッグログ出力時に条件として必ず S2CONTAINER_PHP5_LOG_LEVEL 定数を評価してしまっています。*1そのため、本来 S2CONTAINER_PHP5_LOG_LEVEL 定数の設定に左右されないはずの log4php などを S2Container_S2Logger 実装として設定した場合でも、それらのデバッグログ出力のために、S2CONTAINER_PHP5_LOG_LEVEL 定数を定義する必要があります。

トランザクション管理イベントのログ

  • 各トランザクションインタセプタ(実際にはその抽象クラス)において、トランザクションの開始、コミット、ロールバックといった管理イベント発生時に、デバッグログの出力が一切ありません。開発時の確認には不便なので、PHP Commons では、それらのデバッグログ出力をするようにするパッチを当てた S2Dao PEARパッケージ(1.1.2.1以降*2)を提供します。なお、このログ出力時に、PDOインスタンスの識別のため spl_object_hash() 関数を使用しているため、パッケージのインストールには PHP 5.2.0 以上が必要となります。

*1 パフォーマンスのためでしょうか。
*2 本家には、4桁のバージョン番号を持ったリリースはありませんので、このパッケージの使用は自己責任でお願いします。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-04-30 (木) 21:04:22 (4084d)