[Seasar-user:17850] Re: [SAStruts]インターセプター(Interceptor)中でのDBアクセスの実装方法について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 6月 25日 (木) 12:30:15 JST


小林 (koichik) です.

Date:    25 Jun 2009 06:51:13 +0900
From:    [E-MAIL ADDRESS DELETED]
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:17849] [SAStruts]インターセプター(Interceptor)中でのDBアクセスの実装方法について

> SAStrutsにてシステムメンテナンス中等のチェックを行うため、
> インターセプター(Interceptor)中でのDBアクセスを検討しております。
(略)
> javax.servlet.ServletException: org.seasar.framework.exception.SIllegalArgumentException: [E
> SSR0094]IllegalArgumentExceptionがクラス(sample.sastruts.aop.entity.Employee)[WebappClassLoa
> der
>   delegate: false
>   repositories:
>     /WEB-INF/classes/
> ----------> Parent Classloader:
> [E-MAIL ADDRESS DELETED]
> ]の型(java.lang.Integer)[null]のフィールド(id)に型(java.lang.Integer)[null]の値(1,010)を設定
> するときに発生しました。対象のクラスは(sample.sastruts.aop.entity.Employee)[org.seasar.frame
> [E-MAIL ADDRESS DELETED]]です。

HOT deploy 非対象クラス (Interceptor) が
HOT deploy 対象クラス (Employee) を参照すると
よく発生する現象です.

回避策としては,Interceptor が HOT deploy 対象と
なるようにするのが一つ.
現在は Interceptor を dicon に定義していると
思うのですが,プロパティになにか明示的な設定を
しなければならないなどの理由がなければ dicon に
定義するのをやめてください.
Interceptor が <root>.interceptor パッケージで
あれば,SMART deploy によって自動登録されるので,
dicon に定義する必要はありません.

Interceptor のプロパティになにか明示的な設定を
する必要がある場合は dicon に定義せざるを
得ないので,Interceptor を HOT deploy 対象に
することはできません.
その場合は,Interceptor が参照する Employee なども
HOT deploy 非対象にする必要があります.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



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