[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 メーリングリストの案内