読者です 読者をやめる 読者になる 読者になる

SpringにS2Javelinを適用する

http://d.hatena.ne.jp/KenichiroMurata/20051209#p1にて、どのようにSpringにS2Javelinを適用したかを纏めます。

事前準備

s2javelin.jarの配置

  • ThinkITSpring\WEB-INF\libに以下のjarをコピーする
    • s2javelin.jar(S2Javelin-V0.1.0.zip)
    • s2-framework-2.3.4.jar(S2.3.4.zip)
    • cglib-nodep-2.1_3.jar(springframework)
      • ProxyFactoryBeanを利用するために必要になる

xmlファイルの設定

  • ThinkITSpring\WEB-INF\applicationContext.xmlを以下のように変更する。
  <!-- 変更 -->
  <!-- DAO -->
  <bean id="employeeDaoTarget" 
class="jp.co.thinkit.employee.dataaccess.springjdbc.EmployeeDaoImpl">
    <property name="dataSource"><ref local="dataSource" /></property>
  </bean>

  <!-- 追加 -->
  <bean id="employeeDao" 
class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="target"><ref bean="employeeDaoTarget"/></property>
    <property name="interceptorNames">
      <value>javelinTraceInterceptor</value>
    </property>
  </bean>


  <!--  Transaction  -->
  <bean id="employeeManager" class="org.springframework.transaction.interceptor
.TransactionProxyFactoryBean">
    <property name="transactionManager">
      <ref local="transactionManager" />
    </property>
    <property name="target">
      <ref local="employeeManagerTarget" />
    </property>
    <property name="transactionAttributes">
      <props>
        <prop key="find*">
          PROPAGATION_REQUIRED, -java.lang.Exception, readOnly
        </prop>
        <prop key="update*">
          PROPAGATION_REQUIRED, -java.lang.Exception
        </prop>
      </props>
    </property>
    <!--  追加  -->
    <property name="postInterceptors">
      <ref bean="javelinTraceInterceptor"/>
    </property>
  </bean>


  <!--  追加  -->
  <bean id="javelinTraceInterceptor" 
class="org.seasar.javelin.JavelinTraceInterceptor">
    <property name="args"><value>true</value></property>
    <property name="return"><value>true</value></property>
    <property name="logStackTrace"><value>false</value></property>
  </bean>

log4j.xmlの設定

  • ThinkITSpring\WEB-INF\src\log4j.xmlを以下のように変更する
  <!-- 追加 -->
  <appender name="DaoSql" class="org.apache.log4j.FileAppender">
   <param name="File" value="c:\\temp\\s2javelin.jvn" />
   <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern"
    value="Write ,%d{yyyy/MM/dd HH:mm:ss.SSS},,DaoSQL,0,%M,%C,0,public,%t%n
&lt;&lt;javelin.FieldValue_START&gt;&gt;%n%m%n
&lt;&lt;javelin.FieldValue_END&gt;&gt;%n%n"/>
   </layout>
  </appender>

  <!-- 追加 -->
  <appender name="Javelin" class="org.apache.log4j.FileAppender">
   <param name="File" value="c:\\temp\\s2javelin.jvn" />
   <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%m%n"/>
   </layout>
  </appender>


  <!-- 追加 -->
  <logger name="org.seasar.javelin">
    <level value="debug"/>
    <appender-ref ref="Javelin" />
  </logger>
  
  <!-- 追加 -->
  <logger name="org.springframework.jdbc.core.JdbcTemplate">
    <level value="debug"/>
    <appender-ref ref="DaoSql" />
  </logger>

 以上で設定は完了です。
 以降はhttp://d.hatena.ne.jp/KenichiroMurata/20051212#p3と同様です。

補足

 本設定は[ThinkIT] 第2回:Seasar2とSpringのインストール (1/4)(の4ページ)の従業員管理システム(Spring)にS2Javelinを適用するための例です。Spring Frameworkによる他のアプリケーションにS2Javelinを適用するには、本設定を参考にしてorg.seasar.javelin.JavelinTraceInterceptorを適用する設定を行ってください。またjdbc周りもアプリケーションによっては追加でlog4jの設定を行う必要があるかもしれません。