[Seasar-user:20399] Re: データソースの動的追加について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2010年 12月 7日 (火) 13:30:53 JST


小林 (koichik) です.

Date: Tue, 07 Dec 2010 13:06:56 +0900
From: Yasuo Higa <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:20398] Re: データソースの動的追加について

> ただ、S2Containerに稼動中にコンポーネントを登録するということなら
> 排他制御は自前でやる必要があります。
> 
> パフォーマンス上の理由からS2Containerからコンポーネントの登録・取得
> にかんする排他制御(synchronized)のコードははずされているので。

重要なことを忘れてました。

s2container.dicon に以下を記述すると、
スレッドセーフなコンテナの実装が使われます。

  <component name="defaultBuilder" class="org.seasar.framework.container.factory.XmlS2ContainerBuilder">
    <property name="rule">
      <component class="org.seasar.framework.container.factory.S2ContainerTagHandlerRule">
        <initMethod name="addTagHandler">
          <arg>"/components"</arg>
          <arg>
            <component class="org.seasar.framework.container.factory.ComponentsTagHandler">
              <property name="containerImplClass">
                @[E-MAIL ADDRESS DELETED]
              </property>
            </component>
          </arg>
        </initMethod>
      </component>
    </property>
  </component>

ただし、全てのコンテナが排他制御を行うので、
Web アプリだと問題があるかもしれません。

上記 s2container.dicon の中で使用している
ComponentsTagHandler を継承して、jdbc.dicon
(DataSource を動的に登録する dicon) を読み込む
コンテナだけ ThreadSafeS2ContainerImpl を作成して
返すようにするといいかも。

あるいは、s2container.dicon は使わず、データソースを
動的に登録するコンテナだけ ThreadSafeS2ContainerImpl を
作成して、Web アプリの初期化時に jdbc.dicon な
コンテナの子コンテナとして登録しておくとか。


-- 
<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>
    <property name="twitter">"http://twitter.com/koichik"</property>
</component>



Seasar-user メーリングリストの案内