我有一个@Singleton EJB,我在其中注入(inject)另一个不是 Singleton 的EJB(它是@Stateless 或@Statefull)。例如
@Singleton
public class MySingleton {
@EJB
MyStatefulBean statefulBean;//this is stateful!
public void doSomething() {
statefulBean.something();
}
}
我的问题是:statefulBean
是否始终具有相同的引用,或者在每次调用 doSomething()
时它是否会有所不同?由于我们有一个单例,因此 statefulBean
始终具有相同的引用是有意义的。尽管如此,我还是想问一下,因为我是 EJB 的新手并且想确定一下。谢谢!
最佳答案
每次调用 doSomething
时,您都会获得与以下对象连接的 statefulBean
当前 session ,负责此单例调用。在方法执行期间,您的 Singleton ejb 被锁定,并且没有其他
可以在具有以下属性的对象旁边调用此 Singleton ejb 的方法
直接引用此 ejb 通常是 ejb 对象 self,因为其他
对象获取代理对象引用。此外,在方法执行期间
不能将其他对象注入(inject)到此 ejb 中。这是可能的,因为
singleton 是为并发访问而设计的,默认并发设置为
单例 ejb 是 ConcurrencyManagementType.CONTAINER
和 LockType.WRITE
。
您可以更改此行为,但请记住,然后您单例
ejb可以同时从多个线程调用,你可以得到
如果您注入(inject)有状态对象,则会出现特殊的意外结果。
More about concurrency control of singleton ejb's you can read there.
关于jakarta-ee - 将@Stateful或@Stateless注入(inject)@Singleton EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37784686/