[Seasar-user:11379] Re: [S2Struts]HOT Deploy時にPojoFormを親クラスにキャストしようとした場合にClassCastExceptionが発生

Toshihiro Nakamura [E-MAIL ADDRESS DELETED]
2007年 11月 1日 (木) 14:40:33 JST


中村(taedium)です。

> 「FilterではなくS2のインターセプタ内で処理するようにしてもいいかもしれ
> ません。」
> 
> というのはどのような方法でしょうか?ドキュメントを見ているのですが、具体
> 的な設定方法がわかりません。
> 
> よろしければ設定例か、参考ドキュメントを教えて下さい。

次のドキュメントが参考になると思います。
http://s2container.seasar.org/2.4/ja/aop.html#OriginalInterceptor
http://s2container.seasar.org/2.4/ja/DIContainer.html#SMARTdeploy


設定例は以下に示します。

まず、SMART deployで認識される
interceptorパッケージにインターセプタのクラスを作成します。
名前はFooInterceptorのように「Interceptor」で終わるようにしてください。
任意の処理をこのインタセプター内で行ってください。

  public class FooInterceptor extends AbstractInterceptor {
    public Object invoke(final MethodInvocation invocation) throws Throwable {
      System.out.println("FOO");
      return invocation.proceed();
    }
  }

インターセプタを作成したら、
インターセプタを特定のコンポーネントに適用するために、
customizer.diconを修正します。
例えば、Pageクラスに適用する場合は次のように記述します。
interceptorNameプロパティには上記で定義したクラスの単純名の
先頭を小文字にしたものを指定します。

  <component name="pageCustomizer" 
    class="org.seasar.framework.container.customizer.CustomizerChain">
    <initMethod name="addCustomizer">
      <arg>
        <component class="org.seasar.framework.container.customizer.AspectCustomizer">
          <property name="interceptorName">"fooInterceptor"</property>
          <property name="pointcut">"do.*, initialize, prerender"</property>
        </component>
      </arg>
    </initMethod>
  </component>

> また、この現象の回避策は、現時点では「部分的にHot Deployを使用しない」
> という結論になるということでよろしいでしょうか?

Filterで扱うようなコンポーネントをHot deploy対象から外すか、
上記のようにインターセプタで扱うかの2つの方法があるということに
なると思います。
-- 
Nakamura Toshihiro <[E-MAIL ADDRESS DELETED]>




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