【发布时间】: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