私が継承したコードベースには、その でファクトリ参照を取得するためにMDB
呼び出している があり、このファクトリから特定の Bean を取得してインスタンス変数として格納しています。(ファクトリのタイプは ' ' です)。SingletonBeanFactoryLocator().getIntance().useBean()
ejbCreate()
MDB
ClassPathXmlApplicationContext
紛らわしい部分はrelease()
、その Bean が取得された後、同じ のこのファクトリ参照で' ' を呼び出していることejbCreate()
です。
現在、これMDB
はプールサイズ ' x
' でプールされており、私が観察したところ、 で定義された Beancontext xml
が ' ' 回作成されていx
ます。私の推測では、「 」が実行されるたびにejbCreate()
、コンテキストとその Bean が新たに作成されます。
release()
上記の ' について Spring doc を確認しました。
In an EJB usage scenario this would normally be called from `ejbRemove()` and `ejbPassivate()`.
だからここに私の質問があります:
1) 本当に新しいコンテキストを作成し、新しい Beaneverytime ejbCreate()
が呼び出されますか?
2) はいの場合、前の呼び出しで作成されたコンテキスト/Bean はどうなりますか (たとえば、Bean 自体がシングルトンの場合、それらは破棄されますか)?
SingletonBeanFactoryLocator
3)これは、上記のコンテキストで(おそらくスレッドセーフの問題のために)使用する正しい方法ですか?
4) そうでない場合、それを使用する正しい方法は何ですか?
編集:私が考えることができる1つの可能性は、関連するBeanprototype
を作成して各MDBインスタンスをスレッドセーフにすることです。そのため、コンテキストを解放して再作成する必要はありません。他のコメント/提案を待っています。