[Seasar-user:5896] Re: [Teeda]ThrowsInterceptorでthrowした例外が初回はcatchできない(hotdeploy)

Asarima [E-MAIL ADDRESS DELETED]
2007年 1月 25日 (木) 19:10:31 JST


 Asarimaです。

>HOT deploy は HotClassLoader というクラスローダーを
>リクエストごとに作り,そのたびに新たにクラスを
>ロードし直すという方法で実現しています.
>(後略)

 小林さん、いつもお世話になっております。
 クラスローダの状態がイメージできて、概ね理解できたと思います。
 どうもありがとうございます。

 今、以下のように記述しているのですが、ルートパッケージをhogeとして
hoge.interceptorに置いていますので、定義しなくても動作するか確認して
報告します。

[OracleSQLExceptionThrowsInterceptor]

public void handleThrowable(SQLRuntimeException ex,
 MethodInvocation invocation) throws Throwable {
  SQLException cause = (SQLException)ex.getCause();
  SQLUniqueConstraintException.handle(cause);
}

[SQLUniqueConstraintException]

public static void handle(SQLException cause) {
 if ("23000".equals(cause.getSQLState())) {
  if (1 == cause.getErrorCode()) {
   throw new SQLUniqueConstraintException(cause);
  }
}

[app_aop.dicon]

<component name="oracleSQLExceptionThrowsInterceptor"
 class="hoge.interceptor.OracleSQLExceptionThrowsInterceptor"/>

[customizer.dicon]

<component name="oracleCustomizer"
 class="org.seasar.framework.container.customizer.AspectCustomizer">
 <property name="interceptorName">
  "app_aop.oracleSQLExceptionThrowsInterceptor"
 </property>
</component>
<component name="daoCustomizer"
 class="org.seasar.framework.container.customizer.CustomizerChain">
 <initMethod name="addCustomizer">
  <arg>oracleCustomizer</arg>
 </initMethod>
 <initMethod name="addCustomizer">
  <arg>defaultCustomizer</arg>
 </initMethod>
 <initMethod name="addCustomizer">
  <arg>daoSupportAspectCustomizer</arg>
 </initMethod>
</component>



Seasar-user メーリングリストの案内