从MDB确定WAR上下文根

时间:2014-06-16 13:55:55

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

我有一个包含ejb和war的JavaEE耳朵部署到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不起作用。我也只在JavaEE6上使用Glassfish v3。

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

1 个答案:

答案 0 :(得分:0)

我最终解决了以下问题。

  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。