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