[Seasar-user:22113] Re: 複数DBで、2個目のs2jdbc.diconが弾かれる。

DMM.comラボ 太田浩一 [E-MAIL ADDRESS DELETED]
2015年 12月 24日 (木) 14:10:22 JST


太田といいます。

// こちらで 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 メーリングリストの案内