私が継承したコードベースには、その でファクトリ参照を取得するためにMDB呼び出している があり、このファクトリから特定の Bean を取得してインスタンス変数として格納しています。(ファクトリのタイプは ' ' です)。SingletonBeanFactoryLocator().getIntance().useBean()ejbCreate()MDBClassPathXmlApplicationContext
紛らわしい部分は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 自体がシングルトンの場合、それらは破棄されますか)?
SingletonBeanFactoryLocator3)これは、上記のコンテキストで(おそらくスレッドセーフの問題のために)使用する正しい方法ですか?
4) そうでない場合、それを使用する正しい方法は何ですか?
編集:私が考えることができる1つの可能性は、関連するBeanprototypeを作成して各MDBインスタンスをスレッドセーフにすることです。そのため、コンテキストを解放して再作成する必要はありません。他のコメント/提案を待っています。