我正在用雅加达EE和雅加达Faces(JSF)进行实验。我刚刚制作了一个名为session-scoped bean的CDI(因为JSF managedBean现在已被弃用),我想知道,当作用域bean(在CDI容器中运行)可用时,为什么要使用有状态EJB,在我看来,任何事务都可以使用注入到CDI管理bean中的无状态bean来完成。
:),任何现实世界的用例都会非常有用。
对于那些想知道的人,我的托管/命名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
}
为什么当作用域 bean(在 CDI 容器中运行)可用时会使用有状态的 EJB
实际上几乎从不。无论如何,有状态企业 Bean 从未打算作为(作用域的)支持 Bean,即使仍然建议使用 EJB,有状态变体在 Web 应用程序中也很少使用。
最初,有状态企业 Bean 在使用 CORBA/RMI 作为远程组件(例如,作为一种二进制 Servlet)时具有更多的效用。
当利用Jakarta Persistence (JPA)中的扩展持久性上下文时,现在有一个高度专业化且有点模糊的用例。不知何故,十多年来,除了有状态会话bean之外,我们从未能为其他bean指定它的行为。
问题内容: 有状态会话Bean定义如下: 有状态会话Bean对象的状态由其实例变量的值组成。在有状态会话Bean中,实例变量代表唯一的客户端Bean会话的状态。因为客户端与其bean进行交互(“交谈”),所以这种状态通常称为对话状态。 无状态会话Bean定义如下: 无状态会话Bean无状态会话Bean不会与客户端保持对话状态。当客户端调用无状态Bean的方法时,该Bean的实例变量可能包含特定于该
我正在使用Glassfish服务器(一个简单的购物车)尝试我的第一个EJB。我打算为每个Http会话使用CartBean。如果我的车豆跟着-
在用户登录时续订HTTP会话是常见的最佳做法。这将强制使用新的会话ID,从而避免会话固定漏洞。 当涉及@SessionScoped bean时,是否有使用CDI实现此功能的首选模式?困难在于,通过使当前HTTP会话无效,您将在下一个请求中获得不同的会话范围bean,但直到下一个请求。 例如,假设一个用于存储用户登录信息的会话bean: 和另一个用于管理登录的bean: 对于托管Bean,这将检索一
对于有状态会话bean(SFSB)和无状态会话bean(SLSB)的用法,我有点困惑。 我知道SFSB与客户保持状态。这很有帮助:什么时候使用有状态会话bean而不是无状态会话bean? 这里和许多其他地方提供的示例是SFSB的购物车。 “如果一个任务需要一系列方法调用(不止一次),并且您需要保留以前的结果以在下一次调用中使用它们,那么就可以使用SFSB”--Source。这将更像是签出(页面之间
有状态会话bean定义如下: 无状态会话bean无状态会话bean不维护与客户端的会话状态。当客户机调用无状态bean的方法时,该bean的实例变量可能包含特定于该客户机的状态,但仅限于调用期间。当方法完成时,客户端特定状态不应保留。然而,客户端可能会更改池化无状态bean中实例变量的状态,并且此状态将保留到下一次调用池化无状态bean时。除了在方法调用期间,无状态bean的所有实例都是等效的,允
问题内容: 有状态会话bean和HTTP会话之间有什么关系吗?我们将需要有状态会话Bean的用例是什么,而HTTP会话需要哪些用例。我可以将有状态会话Bean公开为静态Web服务吗? 问题答案: HTTP是一种无状态协议, 这意味着 它是服务器和客户端之间的实际传输协议- 是“无状态的, 因为它在调用之间不记得任何东西。 现在,首先阅读一下什么是HTTPSession和什么是Session Bea