[Seasar-user:17631] Re: DBFluteのHotDeploy(複数DB)について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 6月 5日 (金) 17:00:28 JST


小林 (koichik) です.

Date:    Fri, 5 Jun 2009 16:11:39 +0900
From:    kubo <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:17629] Re: DBFluteのHotDeploy(複数DB)について

> 要は、一つのcreatorで自動登録された
> FooBhvとBarBhvがいたとして、
> FooBhvにはdbflute-foo.diconのコンポーネントを、
> BarBhvにはdbflute-bar.diconのコンポーネントをDIする
> 方法という話になると思いますので、
> まずはそのやり方を探るのが良いと思います。
> (S2Container-2.4としてどのようにやるのか)

dbflute-foo.dicon と dbflute-bar.dicon の
名前空間が異なるという前提で,例えば

public class MultipleDatabaseBehaviorCustomizer extends AbstractCustomizer {

  public String namespace;

  protected void doCustomize(ComponentDef componentDef) {
    // XxxBhv のプロパティの中で個別の dicon から
    // DI しなくてはならないプロパティを列挙
    addPropertyDef(componentDef, "xxx");
    addPropertyDef(componentDef, "yyy");
    ...
  }

  protected void addPropertyDef(ComponentDef componentDef, String propertyName) {
    PropertyDef pd = new PropertyDef(propertyName);
    pd.setExpression(new OgnlExpression(namespace + "." + propertyName));
    componentDef.addPropertyDef(pd);
  }
}

customizer.dicon で,

<component name="behaviorCustomizer" 
    class="org.seasar.framework.container.customizer.CustomizerChain">
  <initMethod name="addCustomizer">
    <arg>
      <component class="MultipleDatabaseBehaviorCustomizer">
        <property name="namespace">"foo"</property>
        <initMethod name="addClassPattern">
          <arg>"xxx.foo"</arg>
          </arg>".*Bhv"</arg>
        </initMethod>
      </component>
    </arg>
  </initMethod>
  <initMethod name="addCustomizer">
    <arg>
      <component class="MultipleDatabaseBehaviorCustomizer">
        <property name="namespace">"bar"</property>
        <initMethod name="addClassPattern">
          <arg>"xxx.bar"</arg>
          </arg>".*Bhv"</arg>
        </initMethod>
      </component>
    </arg>
  </initMethod>
</component>

みたいな.
いろいろ間違ってるかもしれませんが
イメージはこんな感じで.

Bhv のパッケージ名から dicon の名前空間を
求められるなら,MultipleDatabaseBhvCustomizer は
一つ定義すればいいだけになり, classPattern の
指定も不要になります.


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