|
||||||||||||||||
| 前のページ 1 2 3 4 | ||||||||||||||||
| トランザクションの設定 | ||||||||||||||||
|
Springの宣言的なトランザクション対象となるメソッドの設定方法は、リスト6の4のように"<prop>"要素のkey属性にメソッド名を指定することによりおこないます。例えばaddEmployeeメソッドをトランザクション境界に指定する場合は、"<prop key=" addEmployee">"と記述します。 メソッド名には「*」によるワイルドカードも使用できます。「add*」と指定することでメソッド名がaddではじまるものをすべてトランザクション対象とすることができます。 またトランザクション対象となるメソッドには、トランザクション属性(表8)、トランザクションの独立性レベル(表9)、ロールバック対象の例外、非ロールバック対象の例外、トランザクションのタイムアウト秒、読込み専用トランザクションを設定することができます。 |
||||||||||||||||
表8:トランザクション属性 |
||||||||||||||||
表9:トランザクションの独立性レベル |
||||||||||||||||
|
例えば以下のようなトランザクション管理を実現する場合、定義ファイルにはリスト11のように記述されます。 リスト11:トランザクションの設定例 |
||||||||||||||||
<props>
|
||||||||||||||||
表10:トランザクションの設定例
|
||||||||||||||||
| DIにおけるSeasar2とSpringの違い | ||||||||||||||||
|
SpringのDIは定義ファイルにインジェクションするコンポーネントを明記しています。またSpringもSeasar2でいう自動バインディングと似た機能(Auto Wirringといいます)があります。 しかしSpringのAuto Wiring機能はデフォルトでオフになっていることから、Springは定義ファイルにコンポーネント間の依存関係を明示したほうが、開発を進めやすくするという考えをもっていると思われます。つまり、コンポーネント間の依存関係をなるべく記述しないことで開発を進めやすくするSeasar2とは違う考えを持っているものと、筆者は理解しています。 そのため、SpringのAuto Wiringの解説は本連載では省略しています。しかし、Auto Wiringやコンストラクションインジェクションも決して使ってはいけない訳ではありません。使うことによって開発が上手くいくならおおいに使うべきです。 あの機能は使ってはいけないとかこっちの方が優れているとか、そのような考え方は本質を見失わせてしまいます。開発が上手くいくこと、保守がうまくいくこと、そういったことが本質なのです。 |
||||||||||||||||
| AOPの導入 | ||||||||||||||||
|
Springを導入し、インターフェースベース設計と宣言的トランザクション管理を導入したことにより、サンプルはAADL2以上となりAADL3にほぼ合致します。しかし、AOPを活用すればサンプルにはまだ改善できる点があります。例えばロギングや例外処理もできればEmployeeManagerImplのようなクラスから分離して、他のクラスと共通に利用したい部分です。 次回の連載から、ロギング/例外処理をオブジェクトから分離する技術であるAOPについての概要、そして、Seasar2やSpringのAOP概要と開発現場でどのようにAOPを利用すべきかについて解説していきます。 |
||||||||||||||||
|
前のページ 1 2 3 4 |
||||||||||||||||
|
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||


