【问题标题】:Determine WAR context root from MDB从 MDB 确定 WAR 上下文根
【发布时间】:2014-08-06 09:09:07
【问题描述】:

我有一个包含 ejb 和 war 的 JavaEE ear 被部署到 GlassFish v3.1.2.2。战争包含使用 CDI 的 Jersey/Atmosphere 应用程序。在战争中,我有一个 MDB,它异步接收将使用 Atmosphere 广播的事件。我需要使用 Atmosphere 广播的消息需要包含一些指向 Web 应用程序中其他资源的链接。

为了建立这些链接,就像在代码中的其他地方一样,我想使用UriBuilder。为此,我需要访问应用程序的已部署上下文根,因此我可以调用 UriBuilder.fromPath(contextRoot)

Java EE 7 article 暗示我可以通过这种方式将 ContextServlet 注入 CDI bean:

@Inject ServletContext context;

但这不适用于我的 MDB。我也只使用带有 Glassfish v3 的 JavaEE6。

如何从我的战争中托管的 MDB 访问 ServletContext

【问题讨论】:

  • 您可以从应用程序中的上下文侦听器中获取 URL,并将其粘贴在 MDB 也可以到达的位置,例如 EHCache 中。但如果是我,我会尽可能地让它变得愚蠢,并将 URL 粘贴到属性数据库表中传输。我不想让我的 MDB 依赖于 Web 层,它们是两个完全独立的东西。
  • 对于我的 EJB 层中的 MDB,我完全同意。这个 MDB 存在于 web 层,并且正在处理“域事件”以在 web 层上发布,所以我认为对 servlet 上下文的依赖是合理的。
  • 我们必须同意不同意。我希望我的建议是您可以接受的。

标签: java jakarta-ee glassfish war glassfish-3


【解决方案1】:

我最终用以下方法解决了这个问题。

  1. 安装了 deltaspike servlet module,因为我使用的是 GlassFish v3.1.2.2,它没有 CDI 1.1,其中包括开箱即用的 ServletContext 提供程序。
  2. 按照this article 的MDB 片段将我的JMS 消息转换为CDI 事件,然后观察来自注入ServletContext 的纯CDI bean 的CDI 事件以构建Atmosphere 消息所需的 URL。

【讨论】:

    猜你喜欢
    • 2012-03-03
    • 2015-08-24
    • 2011-02-05
    • 2011-08-08
    • 2013-07-30
    • 2012-11-25
    • 1970-01-01
    • 2014-10-29
    • 2016-10-29
    相关资源
    最近更新 更多