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