【问题标题】:Using http session in Stateless Session Bean via @Context通过@Context 在无状态会话 Bean 中使用 http 会话
【发布时间】:2015-05-26 04:00:30
【问题描述】:

我创建了一个向用户显示文档的 Web 应用程序。 该应用程序使用 RESTFUL Webservices 从后端获取此文档。

负责创建/加载文档的 EJB 需要一些存储在 http 会话中的信息。 (需要确定一个文档打开了多长时间,加载花了多长时间等,会话中存储了数据来确定哪个文档在哪个浏览器窗口中关闭或更新)

我获取此信息的解决方案如下所示(在 SSB 和另一个 SSB 的拦截器中):

@Context
private HttpServletRequest request;

...

this.request.getSession().getAttribute(WINDOW_SET);

此解决方案有效。 我不确定这是不是“正确的方法”,因为就我到目前为止的研究而言,@Context 并不是真正用于 EJB。

我不能只将所需的信息作为参数传递给 EJB,因为这不适用于所使用的拦截器。

问题是: 这是构建此功能的有效方法吗? 如果不是,这种解决方案有什么缺点,如何做得更好?

【问题讨论】:

    标签: java jakarta-ee ejb


    【解决方案1】:

    没有。 bean 被注释为无状态:它必须是无状态的。您不能指望注入请求或会话甚至可以工作。

    “无状态会话 bean”的真正含义是另一个问题,我从 1998 年左右开始一直在思考这个问题。

    【讨论】:

    • 我想在 EJB 模块中生成一个日志条目,其中包括启动事务的 userid。我可以将userid 作为参数值从服务 bean(可以访问 HttpSession)传递给 EJB 模块,但问题是方法的数量太大而且 EJB 模块中有很多层,所以我不想用userid 字段污染应用程序。如果在 EJB 模块中不应访问 HttpSession,那么存储 userid 的最佳做法是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 2011-01-02
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多