[Seasar-user:22114] 出来ました。(RE: Re: 複数DBで、2個目のs2jdbc.diconが弾かれる。)

Hideki Sato [E-MAIL ADDRESS DELETED]
2015年 12月 24日 (木) 14:51:02 JST


佐藤です。

荒木様、太田様、お返事ありがとうございました。

>getComponent 時の取得をコンポーネント名("jdbcManagersp")で行ってみてはどうでしょう。

こちらに変更することで、無事、取得できました。
ありがとうございました。

先の本のP296の「...コンポーネント名を指定してJdbcManagerを取得することで...」の
『     @Binding("jdbcManager1")
      private static JdbcManager JdbcManager;』
に、執着しすぎました。
@Bindingでの切替は、今の小生の希望する記述では無かった様です。

===== 変更したコード =====
public class dbs_test {
    
    /**
     * @param args
     */
    public static void main(String[] args) {

        SingletonS2ContainerFactory.init();
        
        JdbcManager mJdbcManager = SingletonS2Container.getComponent("jdbcManagerm");
        
        List<MMsezo> resultsm = mJdbcManager.from(MMsezo.class)
                .where("kban = 'ABCD-1234'")
                .getResultList();
    
        int j = 0;
        for(MMsezo mmsezo: resultsm) {
            System.out.println(
                    + j++
                    + ":" + mmsezo.kban
                    );
        
        }
        
        JdbcManager spJdbcManager = SingletonS2Container.getComponent("jdbcManagersp");
        
        List<SpRepair> resultssp = spJdbcManager.from(SpRepair.class)
                .where("goki = 'ABCD-5678'")
                .getResultList();
        
        int i = 0;
        for(SpRepair sprepair: resultssp) {
            System.out.println(
                    + i++
                    + ":" + sprepair.goki
                    );
        }
        
        SingletonS2ContainerFactory.destroy();

    } 

--

-----Original Message-----
From: seasar-user-bounces @ ml.seasar.org [mailto:seasar-user-bounces @ ml.seasar.org] On Behalf Of DMM.comラボ 太田浩一
Sent: Thursday, December 24, 2015 2:10 PM
To: Discussion list for seasar users
Subject: [Seasar-user:22113] Re: 複数DBで、2個目のs2jdbc.diconが弾かれる。

太田といいます。

// こちらで Binding した  spJdbcManager を
     @Binding("jdbcManagersp")
     private static JdbcManager spJdbcManager;

// 使用前に取得したものに置き換えているため、期待するJDBCManagerで実行されていないのではないでしょうか
         spJdbcManager = SingletonS2Container.getComponent(JdbcManager.class);

実行時の getComponent をしないようにするか、
getComponent 時の取得をコンポーネント名("jdbcManagersp")で行ってみてはどうでしょう。

参考になりましたら幸いです。

2015年12月24日 13:16 Hideki Sato <hideki_a_sato @ jtekt.co.jp>:
> 佐藤と言います。
>
> ‘13年8月ころよりApach clickで、Webアプリを作って来た者です。
> 当時、seaser2を使いたかったのですが、習得に手間取り、
> clickで、お茶を濁してきましたが、新規案件も無くなり、
> やっと、腰を据えてseaser2を紐解き始めて、3日目です。
> 「Seasear2徹底入門... 2010年4月19日」は手元にあります。
>
> 担当案件が、複数DBということで、当本とGoogleで
> 「seasar2 複数DB」で調べ、
> s2jdbc.dicon
> app.dicon
> を設定し、
>
> public class dbs_test {
>
>     @Binding("jdbcManagerm")
>      private static JdbcManager mJdbcManager;
>
>     @Binding("jdbcManagersp")
>      private static JdbcManager spJdbcManager;
>
>     /**
>      * @param args
>      */
>     public static void main(String[] args) {
>
>         SingletonS2ContainerFactory.init();
>
>         mJdbcManager = SingletonS2Container.getComponent(JdbcManager.class);
>
>         List<MMsezo> resultsm = mJdbcManager.from(MMsezo.class)
>                 .where("kban = 'ABC-1234'")
>                 .getResultList();
>
>         int j = 0;
>         for(MMsezo mmsezo: resultsm) {
>             System.out.println(
>                     + j++
>                     + ":" + mmsezo.kban
>                     );
>
>         }
>
>         spJdbcManager = SingletonS2Container.getComponent(JdbcManager.class);
>
>         List<SpRepair> resultssp = spJdbcManager.from(SpRepair.class)
>                 .where("goki = 'ABC-5678'")
>                 .getResultList();
>
>         int i = 0;
>         for(SpRepair sprepair: resultssp) {
>             System.out.println(
>                     + i++
>                     + ":" + sprepair.goki
>                     );
>         }
>
>         SingletonS2ContainerFactory.destroy();
>
>     }
>
> とすると、MMsezoは「0:ABC-1234」と表示しますが、
> SpRepairは「Exception in thread "main" org.seasar.framework.exception.SQLRuntimeException: [ESSR0072]SQLで例外(SQL=[select T1_.GOKI as C1_, T1_.REPAIR_NAIYO_KBN as C2_, T1_.REPAIR_NAIYO_ETC as C3_, T1_.SEIZO_BNGO as C4_, T1_.ERROR_DISPLY as C5_, T1_.SHOSAI as C6_ from SP_REPAIR T1_ where (T1_.GOKI = 'ABCD-5678')], Message=[[ESSR0072]SQLで例外(SQL=[select T1_.GOKI as C1_, T1_.REPAIR_NAIYO_KBN as C2_, T1_.REPAIR_NAIYO_ETC as C3_, T1_.SEIZO_BNGO as C4_, T1_.ERROR_DISPLY as C5_, T1_.SHOSAI as C6_ from SP_REPAIR T1_ where (T1_.GOKI = 'C9ER3980')], Message=[0], ErrorCode=42P01, SQLState={3})が発生しました : [SQLで例外(Message=[ERROR: relation "sp_repair" does not exist
> となり、『"sp_repair" does not exist』、つまりは、s2jdbcsp.diconが弾かれます。
>
> 何分、日が浅いので、手詰まりとなっております。
> どなたか、糸口を頂けると幸いです。
>
> ===== 以下、現在のdiconの設定 =====
> s2jdbc.dicon
> <components>
>     <include path="s2jdbcm.dicon"/>
>     <include path="s2jdbcsp.dicon"/>
> </components>
>
> s2jdbcm.dicon
> <components>
>     <include path="jdbcm.dicon"/>
>     <include path="s2jdbc-internal.dicon"/>
>     <component name="jdbcManagerm" class="org.seasar.extension.jdbc.manager.JdbcManagerImpl">
>         <property name="maxRows">0</property>
>         <property name="fetchSize">0</property>
>         <property name="queryTimeout">0</property>
>         <property name="dialect">postgre81Dialect</property>
>     </component>
> </components>
>
> s2jdbcsp.dicon
> <components>
>     <include path="jdbcsp.dicon"/>
>     <include path="s2jdbc-internal.dicon"/>
>     <component name="jdbcManagersp" class="org.seasar.extension.jdbc.manager.JdbcManagerImpl">
>         <property name="maxRows">0</property>
>         <property name="fetchSize">0</property>
>         <property name="queryTimeout">0</property>
>         <property name="dialect">postgre81Dialect</property>
>     </component>
> </components>
>
> jdbcm.dicon
> <components namespace="jdbc">
>     <include path="jta.dicon"/>
>     <!-- for PostgreSQL -->
>     <!-- -->
>     <component name="mDataSource"
>         class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
>         <property name="driverClassName">
>             "org.postgresql.Driver"
>         </property>
>         <property name="URL">
>           "jdbc:postgresql://localhost/bb_m"
>         </property>
>         <property name="user">"user"</property>
>         <property name="password">"password"</property>
>     </component>
>     <!-- -->
> </components>
>
> jdbcsp.dicon
> <components namespace="jdbc">
>     <include path="jta.dicon"/>
>     <!-- for PostgreSQL -->
>     <!-- -->
>     <component name="spDataSource"
>         class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
>         <property name="driverClassName">
>             "org.postgresql.Driver"
>         </property>
>         <property name="URL">
>           "jdbc:postgresql://localhost/bb_sp"
>         </property>
>         <property name="user">"user"</property>
>         <property name="password">"password"</property>
>     </component>
>     <!-- -->
> </components>
>
> app.dicon
> <components>
>     <include path="convention.dicon"/>
>     <include path="aop.dicon"/>
>     <include path="s2jdbc.dicon"/>
>  </components>
>
> ===== 以下、postgreSQL =====
> DB:bb_m
>  Table: m_msezo
>      m_msmei
> DB:bb_sp
>  Table: sp_msezo
>      sp_msmei
>      sp_repair
>
> --
>
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user



-- 
株式会社DMM.comラボ
システム本部 事業サービス開発部

太田 浩一
E-mail:ota-koichi @ dmm.com

〒150-6021 東京都渋谷区恵比寿4-20-3
恵比寿ガーデンプレイスタワー21F
TEL: 03-5789-7037  / FAX:03-5789-7066
http://labo.dmm.com/
_______________________________________________
Seasar-user mailing list
Seasar-user @ ml.seasar.org
https://ml.seasar.org/mailman/listinfo/seasar-user


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