Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web与Web之间的Java EE会话管理;组件层_Java_Design Patterns_Jakarta Ee - Fatal编程技术网

Web与Web之间的Java EE会话管理;组件层

Web与Web之间的Java EE会话管理;组件层,java,design-patterns,jakarta-ee,Java,Design Patterns,Jakarta Ee,我有一个JavaEE应用程序,由1个web模块和1个EJB模块组成。在EJB模块中,我有一个包含业务逻辑的有状态会话bean 我想要的是: 当用户登录到我的web应用程序并在web层中创建新会话时,我希望为该用户分配一个会话bean实例 目前正在web层中按预期创建会话,但我不确定每次如何将web层中的会话映射到新的EJB会话。目前,我正在从Servlet调用EJB,这意味着只创建了一个bean实例。我试图在web会话和EJB层中的会话之间获得1-1映射 我知道,使用应用程序客户端可以很容易地实

我有一个JavaEE应用程序,由1个web模块和1个EJB模块组成。在EJB模块中,我有一个包含业务逻辑的有状态会话bean

我想要的是:

当用户登录到我的web应用程序并在web层中创建新会话时,我希望为该用户分配一个会话bean实例

目前正在web层中按预期创建会话,但我不确定每次如何将web层中的会话映射到新的EJB会话。目前,我正在从Servlet调用EJB,这意味着只创建了一个bean实例。我试图在web会话和EJB层中的会话之间获得1-1映射


我知道,使用应用程序客户端可以很容易地实现这一点,但对于如何在web层实现这一点的任何建议/设计模式,我都将不胜感激。

有状态会话并不总是一个好的选择,有时对DB使用持久性更容易

在servlet中,当处理来自用户的请求时,获取SFSB的“句柄”。将该“句柄”放入HttpSession。现在,当该用户的下一个请求到达时,您已经准备好了句柄

使用EJB3.0,可以这样做

在类范围内用@EJB声明bean引用,这将设置稍后使用的引用

@EJB 
(name=“CounterBean", beanInterface=Counter.class)
public class MyStarterServlet …
当您处理请求时:使用JNDI和声明的bean名称访问EJB,请注意,这段代码在doGet()和/或doPost()方法中,“counter”变量必须是本地变量(在堆栈上),因为servlet对象在同一时间内可能在多个请求之间共享

Context ctx = new InitialContext(); 
Counter counter = (Counter)
ctx.lookup(“java:comp/env/CounterBean”);
counter.increment();
将接口存储在HttpSession对象中,以便根据需要进行检索

session.setAttribute(“counter”, counter);

您使用的是J2EE1.4还是JEE5,即EJB2.x还是EJB3?一个关于你正在做的事情的代码清单会有所帮助。+1。有一件事新手通常不会想到——他们将EJB引用(示例中的计数器)声明为servlet的一个成员,从而使其成为一个有效的单例。