[Seasar-user:19630] Re: [Doma]Daoのシングルトン化について
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2010年 4月 20日 (火) 20:20:10 JST
小林 (koichik) です.
Date: Tue, 20 Apr 2010 19:03:51 +0900
From: newta <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:19629] Re: [Doma]Daoのシングルトン化について
> DialectもDatasourceも設定をパッケージ名で切替で設定しようと思っています。
それなら SelectableDataSourceProxy を使う
「同じ種類のデータソースを動的に切り替える」
ケースではなく,「異なった種類のデータソースを
使い分ける」の方ではないでしょうか?
http://s2container.seasar.org/2.4/ja/jdbc.html#MultipleDataSource
その場合は上記ドキュメントの xxx-s2jdbc.dicon の
代わりに xxx-doma.dicon とか用意して,その中で
DB ごとの Config を定義し,
http://doma.seasar.org/reference/config.html#DIコンテナを利用する場合の設定例
のやり方で Dao に DI されるようにすれば
いいのではないかと.
Config は Doma JPetStore の AppConfig ではなく,
プロパティで DataSource や Dialect を保持する
単純な実装で.
そしてコンストラクタインジェクション用の
Customizer を独自に作ります.
動かしてないけどこんな感じ.
public class DaoConfigCustomizer extends AbstractCustomizer {
public String configName;
protected void doCustomize(ComponentDef cd) {
ArgDef ad = new ArgDefImpl();
ad.setExpression(new OgnlExpression(configName));
cd.addArgDef(ad);
}
}
仮に root.dao.foo パッケージ以下の Dao は
fooConfig という名前で定義された Config,
root.dao.bar パッケージ以下の Dao は
barConfig という名前で定義された Config を
使うようにしたければ,
<component name="daoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>
<component class="DaoConfigCustomizer">
<property name="configName">"fooConfig"</property>
<initMethod name="addClassPattern">
<arg>"root.dao.foo"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>
<component class="DaoConfigCustomizer">
<property name="configName">"barConfig"</property>
<initMethod name="addClassPattern">
<arg>"root.dao.bar"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
</arg>
</initMethod>
</component>
みたいな.
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-user メーリングリストの案内