jakarta-ee - 将@Stateful或@Stateless注入(inject)@Singleton EJB

标签 jakarta-ee dependency-injection singleton ejb stateful

我有一个@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.CONTAINERLockType.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/

相关文章:

java - 如何访问对象内部的元素

java - 没有反射的 Spring

c# - ASP.NET MVC web 项目中的单元测试类是一个很好的例子吗?

c# - Autofac automate assembly scanning with Interfaces - .net core 3.0 - 根据Lifetime注册

android - Dagger 2 : Inject object loaded from database

java - 是否可以将容器管理的身份验证与密码加盐一起使用?

java - 如何将 JSP 中的选择值获取到 servlet? JAVAEE

java - 如何从 ChatMessage 类的列表中显示 String 消息属性?

java单例与双重检查

java - 这两种单例实现有什么区别呢?