[Seasar-user:17977] Re: コンテナの生成

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 7月 13日 (月) 18:00:33 JST


小林 (koichik) です.

Date:    Mon, 13 Jul 2009 06:48:21 +0900
From:    渡辺茂昭 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:17975] コンテナの生成

>  アプリケーションの仕様上、サーブレットコンテキストが生成された時点
> (Servlet#init)で、新たにスレッドを立てて、そこでもコンテナを使用したいと
> 思っています。
>  生成したスレッド内でSingletonContainerを使用して処理を行ったところ、特
> 定の何箇所かで頻繁にLinkageErrorが発生します(もちろん、スレッドを立てな
> い時は発生しません)。

Servlet#init() で,作成したスレッドのコンテキスト
クラスローダに Web コンテナのコンテキストクラス
ローダを設定してみてください.
それが Web コンテナ的に合法かどうかは微妙ですが.

> 1.一般的にこのような使い方で問題がないのでしょうか?

個人的にはオススメしません.
S2 関連プロダクトでもそういうことをやってたり
するものがあるようなので,そうも言ってられない
気はしますが,個人的にはオススメしません.
EJB でスレッドの生成が禁止されているように,
Servlet でも禁止しておけばよかったのにと思ってます.

それよりは RMI や JMS などを使って外部の JVM に
処理をゆだねる方がいいと思います.

> 2.上記を回避するために、スレッド内で独自にコンテナを作成した場合、
> S2ContainerFactory#createのパス指定は、どのように与えたらいいのでしょう
> か?app.diconがコンテキスト内にあるため、単純にクラスパスからの絶対パス
> というわけには行かないと思うのですが...

独自スレッドで別途コンテナを作成することは
もっとオススメしません.
SingletonS2ContainerFactory に依存する部分が
動かなくなるためです.


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