2

我正在开发一个电子商务应用程序。为此,我想为每个客户创建一个会话来维护他们的购物车信息。

如果它是一个普通的 Java EE 项目,我会使用HttpSession session = request.getSession();并将所有购物车信息添加到该会话中。

我的问题是针对 EJB 项目,为上述目的创建会话的过程是什么?

4

4 回答 4

2

EJB 只不过是在相同/不同位置独立运行的业务逻辑

它不知道是谁在调用逻辑。在这种情况下,会话一词将不适合此处。

您可以以不同的方式调用它,如使用有状态会话 bean维护 EJB 会话 bean的状态

它只不过是一个带有实例变量的会话 bean。收到实例后,您可以在 bean 中分配属性的值

这通常用于在线购物,其中必须跟踪和维护交易

于 2013-01-21T08:31:32.160 回答
2

远程 EJB 与 HTTP/Servlet 的不同之处在于容器不会将某种映射与您不断发送的标识相关联,而是基于客户端与之保持会话的有状态 bean。

如果您使用有状态会话 bean (SFSB) 作为服务器的边缘,那么 bean 就是您的会话。从这个 bean 中,您可以引用例如 Map 或任何数量的其他可以保持会话状态的 bean。

使用 CDI 请求范围,您可以将请求范围 bean 注入调用链中的任意其他 bean。这就像 http 请求一样工作。没有像这样工作的会话范围,但是从您的外观 bean 中,您可以将提到的 Map 放入请求范围的 bean 中。注入此 bean 或使用生产者方法,您将有效地拥有一个等效的 http 会话映射。

于 2013-01-21T10:18:09.943 回答
1

如果使用“EJB 项目”您的意思是应用程序的入口是通过远程客户端使用 RMI 联系的 EJB bean,那么答案是使用有状态会话 bean 进行入口调用。

客户端需要从服务器请求这个特定的 bean(这通常通过远程 JNDI 查找发生),然后简单地保持引用。每次对这个完全相同的引用进行调用时,您都会在服务器端访问同一个 bean 实例。

于 2013-01-21T07:57:00.997 回答
1

Servlet Session : Servlet 中的一个会话,由 Servlet Container 通过 HttpSession 对象维护,通过 request 对象获取。您不能真正实例化一个新的 HttpSession 对象,它不包含任何业务逻辑,但更多的是存储对象的地方。

EJB 会话:使用 SessionBeans 维护 EJB 中的会话。您设计的 bean 可以包含业务逻辑,并且可以被客户端使用。您有两种不同的会话 bean:有状态和无状态。第一个以某种方式与单个客户端连接。它维护该客户端的状态,只能由该客户端使用,当客户端“死亡”时,会话 bean 将“丢失”。

何时使用 SessionBean

http://docs.oracle.com/javaee/6/tutorial/doc/gipjg.html#gipmt

如何创建会话Bean

http://www.roseindia.net/jboss/sessionbeanservlet.shtml

于 2013-01-21T08:23:41.777 回答