[seasar-s2dao-dev:581] Re: 複数DBスキーマへの動的切り替えについて
Nobutaka Yamada
[E-MAIL ADDRESS DELETED]
2008年 1月 31日 (木) 20:09:00 JST
お世話になります
やまだと申します。
以前質問させて頂いた、
複数DBスキーマへの動的切り替えについてですが、
SelectableDataSourceProxyを用いて
2つのDBスキーマ(DB01とDB02)をプログラムから切替えてアクセスしました。
(S2JDBCで行いました)
すると実行時、以下の警告が出力されます。
しかしテーブルからのデータ取得(Select)は出来ています。
-----------------------------------------------------------------
2008/01/28 16:10:29 org.seasar.framework.log.Logger log
警告: org.seasar.extension.dbcp.impl.ConnectionPoolImplのプロパ
ティ(XADataSource)が見つからないので設定をスキップします
2008/01/28 16:10:29 org.seasar.framework.log.Logger log
警告: org.seasar.extension.dbcp.impl.ConnectionPoolImplのプロパ
ティ(XADataSource)が見つからないので設定をスキップします
-----------------------------------------------------------------
この警告の原因はなぜだか教えて頂けないでしょうか。
実行したプログラムとjdbc.diconは以下の通りです。
よろしくお願い致します。
・プログラムの内容
-----------------------------------------------------------------
public static void main(String[] args) {
try {
S2Container container =
S2ContainerFactory.create("app.dicon");//create(args[0]);
container.init();
// ひとつめのDB(DB01)のテーブルSelect
JdbcManager manager
= (JdbcManager)container.getComponent("jdbcManager");
DataSourceFactory factory
= (DataSourceFactory)container.getComponent("dataSourceFactory");
factory.setSelectableDataSourceName("DB01");
List<Tbldto> list = manager.from(Tbldto.class).getResultList();
for (Tbldto tbldto : list) {
System.out.println(new StringBuilder()
.append("コード[")
.append(tbldto.code.toString())
.toString());
}
// ふたつめのDB(DB02)のテーブルSelect
JdbcManager manager
= (JdbcManager)container.getComponent("jdbcManager");
DataSourceFactory factory
= (DataSourceFactory)container.getComponent("dataSourceFactory");
factory.setSelectableDataSourceName("DB02");
List<Tbldto> list = manager.from(Tbldto.class).getResultList();
for (Tbldto tbldto2 : list) {
System.out.println(new StringBuilder()
.append("コード[")
.append(tbldto2.code.toString())
.toString());
}
} catch (Throwable t) {
t.printStackTrace(System.err);
}
}
-----------------------------------------------------------------
・jdbc.diconの内容
--------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components namespace="jdbc">
<include path="jta.dicon"/>
<include path="jdbc-extension.dicon"/>
<component
class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
<component
class="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory">
<arg>
<component
class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
</arg>
<property name="fetchSize">100</property>
</component>
<component name="DB01DataSource"
class="org.seasar.extension.dbcp.impl.DataSourceImpl">
<arg>
<component
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<property name="xaDataSource">
<component
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<property
name="driverClassName">"oracle.jdbc.driver.OracleDriver"</property>
<property
name="URL">"jdbc:oracle:oci:@DB01"</property>
<property name="user">"DB01_user"</property>
<property
name="password">"DB01_pass"</property>
<initMethod name="addProperty">
<arg>"includeSynonyms"</arg>
<arg>"true"</arg>
</initMethod>
</component>
</property>
<property name="timeout">600</property>
<property name="maxPoolSize">10</property>
<property name="allowLocalTx">true</property>
<destroyMethod name="close"/>
</component>
</arg>
</component>
<component name="DB02DataSource"
class="org.seasar.extension.dbcp.impl.DataSourceImpl">
<arg>
<component
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<property name="xaDataSource">
<component
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<property
name="driverClassName">"oracle.jdbc.driver.OracleDriver"</property>
<property
name="URL">"jdbc:oracle:oci:@DB02"</property>
<property name="user">"DB02_user"</property>
<property
name="password">"DB02_pass"</property>
<initMethod name="addProperty">
<arg>"includeSynonyms"</arg>
<arg>"true"</arg>
</initMethod>
</component>
</property>
<property name="timeout">600</property>
<property name="maxPoolSize">10</property>
<property name="allowLocalTx">true</property>
<destroyMethod name="close"/>
</component>
</arg>
</component>
<!-- from JNDI -->
<component name="dataSourceFactory"
class="org.seasar.extension.datasource.impl.DataSourceFactoryImpl" />
<component name="dataSource"
class="org.seasar.extension.datasource.impl.SelectableDataSourceProxy"/>
</components>
--------------------------------------------------------------
> JUNDUです。
>
> >
> > さて、S2DAOまたはS2JDBCを使用して
> > ビジネスロジック側クラスから渡された値により、
> > 動的にDataSourceを切り替えて
> > 接続するDBスキーマを変更したいのですが、
> > どのような方法があるでしょうか?
>
> SelectableDataSourceProxyというクラスがSeasar2に含まれています。2.3と2.
> 4
> でパッケージが違うのですがクラス名は同じなので検索すると出てくると思いま
> す。
>
> このクラスのコメントか、インターネットでSelectableDataSourceProxyを検索
> す
> ると何となく使い方が分かるのではないでしょうか。分からなければ、こちらか
> Seasar-UserのMLに質問を投げて頂ければ、誰かが答えられると思います。
>
seasar-s2dao-dev メーリングリストの案内