我有一个具有以下结构的 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。
应用程序.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。这个过滤器是在web.xml
两个 webapps 中定义的。
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 目录,但我仍然遇到同样的问题;/...