Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从MDB确定WAR上下文根_Java_Jakarta Ee_Glassfish_War_Glassfish 3 - Fatal编程技术网

Java 从MDB确定WAR上下文根

Java 从MDB确定WAR上下文根,java,jakarta-ee,glassfish,war,glassfish-3,Java,Jakarta Ee,Glassfish,War,Glassfish 3,我有一个包含ejb和war的JavaEE ear,它被部署到GlassFish v3.1.2.2中。war包含一个使用CDI的Jersey/Atmosphere应用程序。在战争中,我有一个MDB,它异步接收它将使用大气广播的事件。我需要使用Atmosphere广播的消息需要包含指向web应用程序中其他资源的一些链接 为了构建这些链接,就像代码中的其他地方一样,我想使用UriBuilder。为此,我需要访问应用程序部署的上下文根,以便调用UriBuilder.fromPathcontextRoot

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

为了构建这些链接,就像代码中的其他地方一样,我想使用UriBuilder。为此,我需要访问应用程序部署的上下文根,以便调用UriBuilder.fromPathcontextRoot

这意味着我可以通过以下方式将ContextServlet注入CDIBean:

@Inject ServletContext context;
但这对我的MDB不起作用。我也只使用JavaEE6和Glassfish v3


如何从war中托管的MDB访问ServletContext?

我最终通过以下方法解决了这个问题

安装了,因为我在GlassFish v3.1.2.2上,该版本没有包含ServletContext现成提供程序的CDI 1.1。 遵循的MDB片段将我的JMS消息转换为CDI事件,然后观察到来自纯CDIBean的CDI事件,该CDIBean注入了ServletContext,以构建消息所需的URL。
您可以从应用程序中的上下文侦听器获取URL,并将其粘贴到MDB也可以访问的位置,例如EHCache中。但如果是我,我会尽可能让它变得愚蠢,并将URL粘贴到属性数据库表中进行传输。我不想让我的MDB依赖于web层,它们是两个完全孤立的东西。这个MDB位于web层,正在处理要在web层上发布的“域事件”,因此我认为对servlet上下文的依赖是合理的。我们必须同意不同意。我希望我的建议是你能接受的。