是否有任何理由在 CDI 会话作用域 bean 中使用有状态 EJB

Is there any reason to use stateful EJB in a CDI session scoped bean

我正在试验 Jakarta EE 和 Jakarta Faces (JSF)。 我刚刚创建了一个名为会话作用域的 CDI bean(因为现在不推荐使用 JSF managedBean), 并且想知道为什么当作用域 bean(CDI 容器中的 运行)可用时人们会使用 有状态 EJB,在我看来,任何事务都可以使用无状态 EJB 来完成注入到 CDI 托管 bean 中的 bean。

任何现实世界的用例都会非常有用 :)。

对于那些想知道的人,我的 Managed/named bean 看起来像这样:

import jakarta.ejb.EJB;
import jakarta.enterprise.context.SessionScoped;
import jakarta.inject.Named;

@Named("userBean")
@SessionScoped
public class UserSessionBean implements java.io.Serializable{
    @EJB
    TransactionBean bean; //can be used to persist user data
    String username;
    String password;
    // Constructor, getters and setters
}

why one would use a stateful EJB when scoped beans (running in the CDI container) are available

实际上几乎没有。无论如何,有状态企业 Bean 从来没有打算作为(范围内的)支持 bean,即使仍然建议使用 EJB,有状态变体在 Web 应用程序中也很少使用。

最初,有状态企业 bean 在使用 CORBA/RMI(例如,作为一种二进制 Servlet)将其用作远程组件时具有更多实用性。

现在,当他们利用 Jakarta Persistence (JPA) 中的扩展持久性上下文时,有一个高度专业化且有些模糊的 use-case。不知何故,十多年来我们从未设法为有状态会话 bean 以外的其他 bean 指定其行为。