[Seasar-user:14263] Re: 質問:EJB2.xとして作られたモジュールをS2へ移行して動かしたい
Applied_MATSUDA Masaaki
[E-MAIL ADDRESS DELETED]
2008年 5月 19日 (月) 15:55:44 JST
TigerCat です.
小林さんご回答ありがとうございます.
>であれば,ひとまず SessionBean を AutoRegister で
>登録して試してみてはいかがでしょうか.
>その際,インスタンス属性は prototype で,
>トランザクション制御のインターセプタを
>AspectAutoRegister で設定してください.
ひとまず試しに challenge.dicon を作成し,app.dicon から
include するように設定してみました.
後ほどそのファイル内容を貼り付けます.
>利用する側は通常の DI の作法で public
>フィールドなり setter メソッドを用意.
S2コンテナから既存の EJB のコンポーネントが取得できるように
なりましたので,早速そのメソッドをひとつ呼び出してみました
ところ,呼び出し先のメソッドからさらに呼び出されるメソッドの
中から NullPointerException が発生して終わりました.
ということで,
>SessionBean が EJB コンテナに依存するコード
>(他の SessionBean を JNDI ルックアップなど)
>を持っている場合はまた相談してください.
EJB 側のソースコードは事情により参照不可能なのですが,
Eclipse がバイナリからリバエンしたオペコードの,例の例外
発生付近を確認してみたところ,やはりコンテキストの lookup
により他の EJB を利用しているふしがあり,それが関係している
気がしました.
ひとまず報告までとなってしまいましたが・・・
なにとぞよろしくお願いいたします.
以下,追加したファイルやコードです.
S2の開発環境は,Dolteng 0.30.0 によるものです.
===== app.dicon
<components>
<include path="convention.dicon"/>
<include path="aop.dicon"/>
<include path="dxo.dicon"/>
<!-- ADDED -->
<include path="challenge.dicon"/>
</components>
===== challenge.dicon
<components namespace="challenge">
<include path="j2ee.dicon"/>
<component class="org.seasar.framework.container.autoregister.ComponentAutoRegister">
<property name="instanceDef">
@[E-MAIL ADDRESS DELETED]
</property>
<initMethod name="addReferenceClass">
<arg>@[E-MAIL ADDRESS DELETED]</arg>
</initMethod>
<initMethod name="addClassPattern">
<arg>"com.hoge"</arg>
<arg>".*Bean,.*Mediator"</arg>
</initMethod>
</component>
<component class="org.seasar.framework.container.autoregister.AspectAutoRegister">
<property name="interceptor">
j2ee.requiredTx
</property>
<initMethod name="addClassPattern">
<arg>"com.hoge"</arg>
<arg>".*Bean,.*Mediator"</arg>
</initMethod>
</component>
</components>
===== 動作確認用コード (とりあえずコードなのでひどいものですが)
SingletonS2ContainerFactory.init();
UserTransaction ut =
SingletonS2Container.getComponent(UserTransaction.class);
try{
ut.begin();
HogeBean hoge =
SingletonS2Container.getComponent(HogeBean.class);
Column[] list = hoge.getInitializer().getAllColumn();
System.out.println(list.length + "行");
ut.rollback();
}
catch(Exception e){
e.printStackTrace();
}
SingletonS2ContainerFactory.destroy();
Seasar-user メーリングリストの案内