[Seasar-user:22169] インジェクションしたインスタンスが参照できなくなる事象について
Isao SASAKI
[E-MAIL ADDRESS DELETED]
2021年 11月 8日 (月) 17:16:15 JST
佐々木ともうします
以下事象について経験がある方がいましたらなにかアドバイスを頂ければと思います。
レスポンス頂けるかわかりませんが一読いただければと思います。
よろしくお願いいたします。
【事象】
セッター・インジェクションで取得したインスタンスがnullになってしまいます。
必ずnullになる訳ではなく、システム起動からずっと取得出来ていたものが突然nullしか取得できなくなり事があります。
一度nullになると、以降はアプリケーションサーバー(Tomcat)の再起動するまでnullになってしまいます。
何がトリガーとなってnullになってしまうのかが分からない状態です。
インジェクションが外れてしまうのはDao(S2Dao)のインスタンスです。
コード、diconの内容を抜粋添付します。
【ご教授頂きたい内容】
インジェクションでnullが発生しないようにする方法
または
nullになった場合に再度インジェクションするための対応方法
Seasarバージョン 2.3.23
S2Daoバージョン 1.0.51
javaバージョン jdk1.7.0_79
Tomcatバージョン Apache Tomcat/7.0.75
稼働OS CentOS7
※インジェクションがNULLになってしまうsetTmUserDaoでのtmUserDaoというインスタンス
・実装の抜粋
javaファイル(tmUserDaoをインジェクションしている)
1: public void setTmUserDao(TmUserDao tmUserDao) {
2: this.tmUserDao = tmUserDao;
3: }
4:
5: @Aspect("j2ee.requiredTx")
6: public BcmLoginServiceDto doLogin(String userId, String password,
7: String ipAddress, Long storecd) {
8:
9: BcmLoginServiceDto bcmLoginServiceDto = new BcmLoginServiceDto();
10: List<TmUserEntity> list = null;
11: //障害のためのログ入れ start
12: if (this.tmUserDao!=null) {
13: System.out.println("BcmLoginService doLogin : TmUserDao is
not null");
14: } else {
15: System.out.println("BcmLoginService doLogin : TmUserDao is
null");
16: }
17: //障害のためのログ入れ end
18: if(storecd != null && Constants.MORU_STORE_CD == storecd) {
19: list =
this.tmUserDao.selectByUserIdPasswordPermission(userId,password);
10: } else {
21: list =
this.tmUserDao.selectByUserIdPassword(userId,password);
22: }
※11~17行目は確認のためのログ
※19,21行目で、NullPointerExceptionが発生
※NullPointerException発生時には15行目のログが出力されている(TmUserDaoがnullになっている)
diconファイル
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
<property name="instanceDef">
@org.seasar.framework.container.deployer.InstanceDefFactory @ SINGLETON
</property>
<property name="autoNaming">
<component
class="org.seasar.framework.container.autoregister.DefaultAutoNaming"/>
</property>
<initMethod name="addClassPattern">
<arg>"jp.co.itfor.itforec"</arg>
<arg>".*ServiceImpl,.*Dao,.*DAO,.*DxoImpl"</arg>
</initMethod>
<initMethod name="addIgnoreClassPattern">
<arg>"jp.co.itfor.itforec.service.settlement.gmo"</arg><arg>"GmoServiceImpl"</arg>
</initMethod>
<initMethod name="addIgnoreClassPattern">
<arg>"jp.co.itfor.itforec.service.settlement.wellnet"</arg><arg>"WellnetServiceImpl"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
<property name="instanceDef">
@org.seasar.framework.container.deployer.InstanceDefFactory @ PROTOTYPE
</property>
<property name="autoNaming">
<component
class="org.seasar.framework.container.autoregister.DefaultAutoNaming"/>
</property>
<initMethod name="addClassPattern">
<arg>"jp.co.itfor.itforec"</arg>
<arg>".*LogicImpl"</arg>
</initMethod>
</component>
<!-- アスペクトの自動登録 -->
<!-- Dao -->
<component
class="org.seasar.framework.container.autoregister.AspectAutoRegister">
<property name="interceptor">
dao.interceptor
</property>
<initMethod name="addClassPattern">
<arg>"jp.co.itfor.itforec.dao"</arg>
<arg>".*Dao,.*DAO"</arg>
</initMethod>
</component>
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20211108/83e40118/attachment.htm>
Seasar-user メーリングリストの案内