gpt4 book ai didi

Web 和 EJB 层之间的 Java EE session 管理

转载 作者:行者123 更新时间:2023-12-04 07:03:33 24 4
gpt4 key购买 nike

我有一个由 1 个 Web 模块和 1 个 EJB 模块组成的 Java EE 应用程序。在我的 EJB 模块中,我有一个包含我的业务逻辑的有状态 session bean。

我想要的是:

当用户登录到我的 Web 应用程序并在 Web 层中创建新 session 时,我希望为该用户分配我的 session bean 的实例。

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

我知道这可以使用应用程序客户端轻松实现,但任何关于如何在 Web 层实现这一目标的建议/设计模式将不胜感激。

最佳答案

有状态 session 并不总是一个好的选择,有时对数据库使用持久性更容易。

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

使用 EJB 3.0 可以这样做。

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

@EJB 
(name=“CounterBean", beanInterface=Counter.class)
public class MyStarterServlet …

当您处理请求时:使用 JNDI 和声明的 bean 名称访问 EJB,请注意此代码在您的 doGet() 和/或 doPost() 方法中,“计数器”变量必须是本地的(在堆栈上),如servlet 对象同时在可能的多个请求之间共享。
Context ctx = new InitialContext(); 
Counter counter = (Counter)
ctx.lookup(“java:comp/env/CounterBean”);
counter.increment();

将接口(interface)存储在 HttpSession 对象中以根据需要检索
session.setAttribute(“counter”, counter);

关于Web 和 EJB 层之间的 Java EE session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1454080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com