[Seasar-user:22172] Re: インジェクションしたインスタンスが参照できなくなる事象について

Isao SASAKI [E-MAIL ADDRESS DELETED]
2021年 11月 9日 (火) 13:29:45 JST


佐々木です

中村様 ひが様 有益な状況ありがとうございます。

OGNLの利用バージョンは、ognl-2.6.9-patch-20070624.jar でしたのでsetterの実行調査から
調べたたいと思います。
ありがとうございました。


2021年11月9日(火) 10:56 Yasuo Higa <higa @ isid.co.jp>:

> 佐々木さん
>
>
>
> Singletonのコンポーネントは、システムの起動時にしかセットされないので、
>
> 途中でnullになってしまうのは、誰かがnullを設定しているのだと思います。
>
>
>
> Setterでnullが渡ってきたら、例外をthrowするようにすれば、
>
> StackTraceを見て、誰がnullを設定しているのか、
>
> ヒントがわかるかもしれません。
>
>
>
> ひが
>
>
>
> *差出人**: *Seasar-user <seasar-user-bounces @ ml.seasar.org> が代理で送信: Isao
> SASAKI <sasaki.isao @ gmail.com>
> *日付**: *月曜日, 2021年11月8日 17:16
> *宛先**: *seasar-user @ ml.seasar.org <seasar-user @ ml.seasar.org>
> *件名**: *[Seasar-user:22169] インジェクションしたインスタンスが参照できなくなる事象について
>
> 佐々木ともうします
>
>
>
> 以下事象について経験がある方がいましたらなにかアドバイスを頂ければと思います。
>
> レスポンス頂けるかわかりませんが一読いただければと思います。
>
> よろしくお願いいたします。
>
>
> 【事象】
> セッター・インジェクションで取得したインスタンスが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>
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


-- 
------------
<Isao SASAKI/佐々木功 />
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20211109/d729d8c7/attachment.htm>


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