|
||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||
| 宣言トランザクション管理 | ||||||||||||
|
さらに、EmployeeManagerImplを見ていくと第1回目に提示したEmployeeManagerImplと異なり、commitやrollbackなどのトランザクションを管理している部分が消えていることもわかると思います。ソースコードに明示的にコーディングしていたトランザクション管理をSpringに移して宣言的なトランザクション管理を行っています。 |
||||||||||||
| トランザクションマネージャの設定 | ||||||||||||
|
リスト4はサンプルのBean定義から抜粋した、トランザクション管理機能をもつTransactionManagerの設定部分です。 リスト4:トランザクションマネージャの設定 リスト4は以下の3つの設定で構成されています。
表3:リスト4の設定
リスト5:JDBCの設定 |
||||||||||||
jdbc.driverClassName=org.hsqldb.jdbcDriver
|
||||||||||||
| トランザクション管理の設定 | ||||||||||||
|
トランザクション管理を行うために、サンプルではSpringが提供するTransactionProxyクラスを使用しています。リスト6はサンプルの定義ファイルから抜粋したトランザクション管理の設定部分です。 リスト6:宣言的なトランザクションの設定 リスト6は以下の設定を行っています。
|
||||||||||||
|
表4:宣言的なトランザクションの設定 |
||||||||||||
|
リスト6の(2)のTransactionProxyの設定で、名前がemployeeManagerとなっていることに注目してください。EmployeeManagerを利用しているクライアント(リスト7)は、実はEmployeeImplをSpring(DIxAOPコンテナ)から取得しているのではなく、TransactionProxyを取得して利用しているのです。 |
||||||||||||
|
リスト7:EmployeeManagerの呼出し |
||||||||||||
employeeManager.addEmployee(emp);
|
||||||||||||
|
クライアントからEmployeeManagerとして呼び出されたTransactionProxyは、クライアントがEmployeeManagerのメソッドを利用するごとに定義ファイルを参照し、リスト6の(4)でトランザクションの対象メソッドか否かを判定した後、リストの6の(2)で設定されたTransactionManagerを使用してトランザクションを開始し、リスト6の(3)で設定されたEmployeeManagerImplの該当メソッドを呼び出します。 メソッドの終了後、TransactionProxyはTransactionManagerを使用してトランザクションをコミットします(図1)。 |
||||||||||||
| 現在のAADL | ||||||||||||
|
さて、ここまででSpringを利用したインターフェースベース設計と宣言トランザクションを導入したサンプルのEmployeeManagerImplと第1回目のEmployeeManagerImplと比較してみましょう。 サンプルのEmployeeManagerImplがEmployeeDaoインターフェースの実装をまったく意識しないことがわかります。Springを利用することでオブジェクトの管理(生成など)、構成(関連の設定など)処理をコンポーネントから排除することができています。つまりレイヤー間のコンポーネントの疎結合が実現でき、コンポーネント間が疎結合になったときの利点が享受できます(第1回目:時代は今DIxAOPコンテナを参照)。 また、トランザクション管理をDIコンテナに移すことでEmployeeManagerImplは完全なPOJOとなり、各種コンテナやJDBCなどのDBアクセス関連のオブジェクトにさえ依存していないことがわかります、これによりメンテナンスや再利用性の向上が可能になり、新機能の追加が容易になっています。 AADLの表5と見比べてみるとAADL2以上となりAADL3にほぼ合致することが確認できると思います。 |
||||||||||||
![]() 表5:AADL (本連載では従来のものに少し手を加えたものになっています) (画像をクリックすると別ウィンドウに拡大表示します) |
||||||||||||
|
前のページ 1 2 3 4 次のページ |
||||||||||||
|
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||






