[Seasar-user:21578] AOPで作成されたClassに関して

suzuki_su [E-MAIL ADDRESS DELETED]
2013年 4月 2日 (火) 13:48:33 JST


お世話になっております。鈴木と申します。

添付は、WAS7のクラスローダービューアーの検索結果になります。

SMART DEPLOY(COOL DEPLOYです)で自動登録され、
    <component name="serviceCustomizer"
        class="org.seasar.framework.container.customizer.CustomizerChain">
        <initMethod name="addAspectCustomizer">
            <arg>"aop.traceInterceptor"</arg>
        </initMethod>
        <initMethod name="addCustomizer">
            <arg><component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/></arg>
        </initMethod>
    </component>
と言う定義でカスタマイズされるAuthenticationServiceが、
添付のようにクラスローダーに複数個登録されており、
実際にはauthenticate5で終わるクラスが使われ、
NoSucheMethodErrorで落ちます。

複雑な継承階層のあるclassで、
最上位のインタフェイスでは、
int authenticate(I input, T operator);
とGenericで引数のClassが定義されており、
それが実際の実装クラスで
int authenticate(Hoge input, Foo operator);
のように定義されています。
実際には、
int authenticate(Hoge input, Foo operator);
が無いと言って落ちます


ちょっとAOP周りに疎いのですが、
カスタマイズされた結果のクラスはこのように複数個作られるものでしょうか?
そうなる場合の条件などはありますでしょうか?
S2の中をデバッグしてみようと思っていますが、
どの変を見れば良いでしょうか?

S2.4.44を利用しています。
WAS7をWINDOWS7(64bit)の上で動かしています。

尚、TOMCATではNoSucheMethodErrorは発生していません。

またAuthenticationServiceはjarの中に含まれてlibの下に配置されておりますが、
該当クラスのみ、WEB-INF/classesの下に置いた際にはNoSucheMethodErrorは発生しません。
クラスローダービューアーで見ると、
AuthenticationServiceがカスタマイズされたものは複数個登録されていますが、
authenticate5で終わるものはなく、authenticate0だけです。
実際にauthenticate0が使われています。
WASのjarクラスローダー絡みの問題なのでは無いかと推測しております。

環境は手元にありますので、色々試してみることなどは可能です。

以上 分かりにくい問題ですみませんが、どうぞ宜しくお願いします。
-------------- next part --------------
$B%F%-%9%H7A<00J30$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
$B%U%!%$%kL>(B: ng2.PNG
$B7?(B:         application/octet-stream
$B%5%$%:(B:     47485 $B%P%$%H(B
$B @ bL@(B:       $BL5$7(B
URL:        <http://ml.seasar.org/archives/seasar-user/attachments/20130402/fc1a532a/attachment.obj>


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