我有一个具有以下结构的JavaEE6应用程序:
app.ear
META-INF
application.xml
lib
commmon-server-lib.jar
webapp1.war
webapp2.war
services-ejb.jar
两个webapps在MANIFEST.MF(瘦战争)的Class-Path条目中都有common-server-lib.jar。
application.xml中:
<application>
<module>
<ejb>services-ejb.jar</ejb>
</module>
<module>
<web>
<web-uri>webapp1.war</web-uri>
<context-root>/webapp1</context-root>
</web>
</module>
<module>
<web>
<web-uri>webapp2.war</web-uri>
<context-root>/webapp2</context-root>
</web>
</module>
<library-directory>lib</library-directory>
</application>
在common-server-lib.jar
中,有一个Web过滤器,应该注入少量EJB和其他CDI托管bean。此过滤器在两个webapps的web.xml
中定义。
common-server-lib.jar
并且战争在适当的地方有beans.xml
。
现在问题是,当我尝试将此应用程序部署到Glassfish时,我得到这样的错误:
Class [ Lcom/acme/UserService; ] not found. Error while loading
[ class com.acme.filter.MyFilter ]
UserService
服务位于services-ejb.jar
所以我的问题是:我做错了什么......?在共享库中定义Web组件(使用注入它的依赖项)是否有问题?
修改
在JSR-315(Servlets 3.0最终规范)的第15.5节中,我们可以找到:
In a web application, classes using resource injection will have their annotations processed only if they are located in the WEB-INF/classes directory, or if they are packaged in a jar file located in WEB-INF/lib.
我已将common-server-lib.jar移动到两个webapps的WEB-INF / lib目录中,但我仍然遇到同样的问题; / ...
答案 0 :(得分:0)
经过几个小时的挣扎,我找到了解决方案:
web-fragment.xml
添加到commmon-server-lib.jar
web.xml
的WEB-INF/lib
删除所有jar
除commmon-server-lib.jar
commmon-server-lib.jar
目录/lib
醇>