在我继承的代码库中,有一个MDB
which 正在调用SingletonBeanFactoryLocator().getIntance().useBean()
以在其 中获取工厂引用ejbCreate()
,然后从该工厂获取特定的 bean 并将其存储为MDB
实例变量。(工厂类型为“ ClassPathXmlApplicationContext
”)。
令人困惑的部分是:release()
在获得该 bean 之后,它在同一个工厂引用上调用“ ” ejbCreate()
。
现在,这MDB
是与 poolsize ' x
' 合并的,我观察到的是,其中定义的 beancontext xml
被创建了 ' x
' 次数。所以我的猜测是,每次 ' ejbCreate()
' 执行时,它都会重新创建一个上下文及其 bean。
我检查了 Spring 文档的 'release()
上面说:
In an EJB usage scenario this would normally be called from `ejbRemove()` and `ejbPassivate()`.
所以这是我的问题:
1)是否真的创建了一个新的上下文并everytime ejbCreate()
调用了新的bean?
2) 如果是,那么在上一次调用中创建的上下文/bean 会发生什么情况(例如,如果 bean 本身是单例的,它们会被销毁吗)?
3)这是在上面的上下文中使用SingletonBeanFactoryLocator
(可能是线程安全问题)的正确方法吗?
4)如果没有,正确的使用方法是什么?
编辑:我能想到的一种可能性是使相关的 beanprototype
使每个 MDB 实例线程安全,因此无需释放和重新创建上下文。等待其他意见/建议。