TOP比較データ> サンプルアプリケーションへのAOP適用
徹底比較!!DIxAOPコンテナ
DIxAOPコンテナ「Seasar2とSpring」

第6回:Seasar2によるAOPの導入
著者:豆蔵  長谷川 裕一、竹端 進   2006/1/11
前のページ  1  2  3   4  次のページ
サンプルアプリケーションへのAOP適用

   それでは、サンプルの従業員管理WebアプリケーションにAOPを適用していきましょう。

   先に記述したように、今回はSeasar2のAOPが提供するInterceptorを用いたトレースログの出力処理と、独自実装の例外処理を追加したものになります。
Adviceの作成と定義ファイルの修正

   まずは例外処理を独自実装したAdviceであるExceptionAdviceです(リスト8)。例外処理なのでThrowsAdviceを実装して作成します。今回は、例外の種類によって処理を振り分けないため、メソッドは1つになります。

リスト8:例外処理
public class ExceptionAdvice extends ThrowsInterceptor {
     private static final Log log = LogFactory.getLog(ExceptionAdvice.class);
     public void handleThrowable(Throwable t, MethodInvocation invocation)
          throws Throwable {
          // 例外処理
          log.error("Exception class[" +
               invocation.getThis().getClass().getName() + "]: method[" +
               invocation.getMethod().getName() + "]:" + t);
          throw t;
     }
}

   次にトレース処理ですが、これは先ほど「TraceInterceptor」の項で取り上げたorg.seasar.framework.aop.interceptors.TraceInterceptorを利用します。TraceInterceptorを適用することでメソッドの開始と終了がトレースログとして出力されます。

   以上でAdviceの実装は終了です。


コンポーネント定義ファイルの修正

   次にコンポーネント定義ファイルを修正します。サンプルの定義ファイル"employee.dicon"のAOPに関する部分を解説していきます。

   リスト9はコンポーネント定義ファイルにEmployeeManager用のAOPを設定した部分です。

リスト9:EmployeeManager用のAOP設定
<!-- EmployeeManager -->
<component
class="jp.co.thinkit.employee.business.EmployeeManagerImpl">
     <aspect>managerAop</aspect>
</component>

<!-- EmployeeManager用のAOP -->
<component name="managerAop"                           
     class="org.seasar.framework.aop.interceptors.InterceptorChain">
     <initMethod name="add"><arg>j2ee.requiredTx</arg></initMethod>
     <initMethod name="add"><arg>exceptionAdvice</arg></initMethod>
     <initMethod name="add"><arg>traceInterceptor</arg></initMethod>
</component>

<component name="exceptionAdvice"                      
     class="jp.co.thinkit.employee.aop.ExceptionAdvice"/>
<component name="traceInterceptor"
     class="org.seasar.framework.aop.interceptors.TraceInterceptor"/>

   リスト9の(3)は、例外処理用に作成したExceptionAdviceと、Seasar2が提供するTraceInterceptorのコンポーネント定義です。

   リスト9の(2)は、先ほど「InterceptorChain」の項で取り上げたInterceptorChainを使用して、ExceptionAdviceとTraceInterceptor、それに加えてトランザクション処理を制御するj2ee.requiredTxの3つのAdviceをコンポーネント"managerAop"として定義しています。なお、コンポーネント"j2ee.requiredTx"の定義は定義ファイル"j2ee.dicon"で行われています。

   最後にリスト9の(1)で、EmployeeManagerImplのコンポーネント定義を行う箇所でアスペクトとしてコンポーネント"managerAop"を定義しています。

   表5は、AOPで使用する主なタグ/属性の説明です。

タグ/属性 説明
aspectタグ アスペクトをコンポーネントに組み込む。 Interceptorの指定は、ボディでOGNL式により設定、または子タグでcomponentタグを使用して設定する
pointcut属性 カンマ区切りで対象となるメソッド名を複数指定可能。 pointcutを指定しない場合は、インターフェースのすべてのメソッドが対象となる。 すべてのメソッドを対象とする場合は".*"と指定する。 メソッド名の指定には正規表現(JDK1.4のregex)も使用可能

表5:AOPで使用するタグ/属性の説明

   以上で、EmployeeManagerImplに対するAOPを利用した例外処理とトレースログの出力処理の追加設定は終了です。

前のページ  1  2  3   4  次のページ


株式会社豆蔵 長谷川 裕一
著者プロフィール
株式会社豆蔵  長谷川 裕一
XMLの技術開発やCORBA、EJBを使用したシステム開発などを経て、現在はアジャイル開発プロセスの導入から工学的なソフトウエアプロセスの策定、オープンソースプロダクトに関するコンサルタント、アーキテクトとして常に第一線で活躍。共著として「プログラムの育てかた 現場で使えるリファクタリング(ソフトバンク)」、「Spring入門(技術評論社)」。


株式会社豆蔵 竹端 進
著者プロフィール
株式会社豆蔵  竹端 進
鉄鋼系SIerを経て現職に。現在はオープンソースプロダクトに関するコンサティング、開発支援、教育を行うチームに所属。日々、新たな技術をどのように生かしていくかを考える毎日。現在の注目対象はSeasar2とMaven。


INDEX
第6回:Seasar2によるAOPの導入
  Seasar2のAOPについて
  Throw Advice
サンプルアプリケーションへのAOP適用
  EmployeeS2DaoへのAOP適用