有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java有状态EJB与会话属性

使用有状态EJB时,如果客户端没有活动会话,服务器如何知道EJB与谁关联?我以前使用过无状态EJB,但现在正在尝试学习如何使用有状态EJB。我正在考虑将我的购物车实现为有状态EJB,而不是将POJO购物车作为属性添加到用户会话中。但是,由于有状态EJB没有在HttpSession中显式添加为属性,服务器如何将客户机与有状态EJB关联


共 (1) 个答案

  1. # 1 楼答案

    从技术上讲,EJB不需要访问客户机的JSESSION_ID,因为与任何基本pojo一样,只要调用的客户机处于活动状态,EJB就处于活动状态且可用。一旦调用客户机被销毁或以其他方式放弃对SFSB的控制,bean就可能被钝化或销毁(从而“忘记”会话)

    the Oracle JavaEE-6 tutorial

    The state is retained for the duration of the client/bean session. If the client removes the bean, the session ends and the state disappears. This transient nature of the state is not a problem, however, because when the conversation between the client and the bean ends, there is no need to retain the state

    与在has-a关系中获得常规java对象的方式相同:一旦将组合对象设置为null,就基本上结束了与该对象的对话。同样的情况也适用于这里(某种程度上)。客户端不需要向EJB传递特定的会话信息。EJB的正常生命周期和注释(特别是@Remove)负责处理其他一切

    关于SFSB的一点警告:它们是重量级的,比SLSB耐用。不要使用它们,除非你真的需要一个全面的EJB的陷阱。在许多情况下,一个普通的HttpSession和一个SLSB就足够了

    进一步阅读