我正在开发一个电子商务应用程序。为此,我想为每个客户创建一个会话来维护他们的购物车信息。
如果它是普通的Java EE项目,我会使用HttpSession session = request.getSession();
并将所有购物车信息添加到该会话中。
我的问题是针对EJB项目,为上述目的创建会话的过程是什么?
答案 0 :(得分:2)
EJB只不过是在相同/分离的位置独立运行的业务逻辑
它不知道,谁在调用逻辑。在这种情况下,会话这个词不适合这里。
您可以使用有状态会话bean以维护EJB会话bean的状态以不同的方式调用它
它只是一个带有实例变量的会话bean。在接收实例时,您可以在bean中分配属性的值
这通常用于在线购物,其中必须跟踪和维护交易
答案 1 :(得分:2)
远程EJB与HTTP / Servlet的不同之处在于,容器不会将某种类型的地图与您继续发送的标识相关联,而是基于客户端维护会话的有状态bean。
如果使用有状态会话bean(SFSB)作为服务器的边缘,则bean是您的会话。从这个bean你可以引用一个Map或任何其他可以保持会话状态的bean。
使用CDI请求范围,您可以将请求范围bean注入调用链中的任意其他bean。这就像http请求一样。没有像这样工作的会话范围,但是从您的外观bean中,您可以将提到的Map放入请求范围的bean中。注入这个bean或使用一个生成器方法,你将有效地拥有一个http会话映射。
答案 2 :(得分:1)
如果使用“EJB项目”,则表示应用程序的条目是使用RMI通过远程客户端联系的EJB bean,那么答案是使用有状态会话bean进行条目调用。
客户端需要从服务器请求这个特定的bean(通常通过远程JNDI查找),然后只需保持引用。每次对这个完全相同的引用进行调用时,您都会在服务器端转到同一个bean实例。
答案 3 :(得分:1)
Servlet会话: Servlet中的会话由Servlet容器通过HttpSession对象维护,该对象通过请求对象获取。你不能真正实例化一个新的HttpSession对象,它不包含任何业务逻辑,但更像是一个存储对象的地方。
EJB会话: 使用SessionBeans维护EJB中的会话。您可以设计可以包含业务逻辑的bean,并且可以由客户端使用。您有两个不同的会话bean:有状态和无状态。第一个是以某种方式与单个客户端连接。它维护该客户端的状态,只能由该客户端使用,当客户端“死”时,会话bean“丢失”。
何时使用SessionBean
http://docs.oracle.com/javaee/6/tutorial/doc/gipjg.html#gipmt
如何创建SessionBean