[Seasar-user:17737] Re: 複数データソース時のEntityManagerの挙動について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 6月 12日 (金) 16:30:40 JST


小林 (koichik) です.

Date:    Fri, 12 Jun 2009 16:05:30 +0900
From:    duran <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:17736] Re: 複数データソース時のEntityManagerの挙動について

> 現状は以下の方法を用いています。
> http://www.seasar.org/wiki/index.php?FAQ%2FS2DAO#w7da6e0e
> 
> AbstractDaoを継承する場合は、
> これとは違うCustomizerの実装が必要という認識で合っていますでしょうか?

違う実装というわけではなく,追加の実装が必要と
いうことです.

FAQ に記載されている内容は,DaoInterceptor を
Dao ごとに切り替えるための設定です.

AbstractDao は DaoInterceptor が適用される
だけでは不十分で,コンストラクタで渡す
DaoMetaDataFactory も Dao ごとに切り替えて
あげる必要があります.
それが追加で必要になるということです.

public class AbstractDaoCustomizer extends AbstractCustomizer {
  public String namespace;
  protected void doCustomize(ComponentDef cd) {
    ArgDef ad = new ArgDefImpl();
    ad.setExpression(new OgnlExpression(namespace + ".daoMetaDataFactory"));
    cd.addArgDef(ad);
  }
}

のようなクラスを作って,FAQ の customizer.dicon に
以下を追加して,

<component name="dao1AbstractDaoCustomizer" class="AbstractDaoCustomizer">
  <property name="namespace">"foo"</property>
  <initMethod name="addClassPattern">
    <arg>"hogehoge.dao.dao1"</arg>
    <arg>".*Dao"</arg>
  </initMethod>
</component>
<component name="dao2AbstractDaoCustomizer" class="AbstractDaoCustomizer">
  <property name="namespace">"bar"</property>
  <initMethod name="addClassPattern">
    <arg>"hogehoge.dao.dao2"</arg>
    <arg>".*Dao"</arg>
  </initMethod>
</component>

daoCustomizer を以下のように変更.

<component name="daoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
  <initMethod name="addCustomizer">
    <arg>dao1SupportAspectCustomizer</arg>
  </initMethod>
  <initMethod name="addCustomizer">
    <arg>dao2SupportAspectCustomizer</arg>
  </initMethod>
  <!-- 以下を追加 -->
  <initMethod name="addCustomizer">
    <arg>dao1AbstractDaoCustomizer</arg>
  </initMethod>
  <initMethod name="addCustomizer">
    <arg>dao2AbstractDaoCustomizer</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 メーリングリストの案内