我在一个耳朵中有不同包中的@LocalBean
和JAX-RS资源。
我还在这些资源之前进行了ServletFilter过滤。
我发现@EJB
适用于ServletFilter,但不适用于那些资源。
@Stateless
@LocalBean
class MyBean { // in ejb jar
}
@WebFilter(urlPatterns = {"/*"})
class MyFilter implements Filter { // in the same war
@EJB MyBean myBean; // not null
}
@ApplicationPath("/")
class MyApplication extends Application { // in the same war
}
@Path("/my")
class MyResource { // in the same war
@EJB MyBean myBean; // null
}
没有特别的日志,只是MyResource方法中的NPE。 有人能帮助我吗?
更新---------------------------------------------- -
将这些资源类设为@Stateless
确实有效。
但我只是好奇那些ejb-jar和web-war被组装成一只耳朵。
然后网络战是一个网络组件,不是吗?
UPDATE2 ---------------------------------------------- --------
哦,对不起。还有MyApplication
使MyResource成为JAX-RS资源。
当我部署ear
GF时,将其检测为“企业应用程序”。
UPDATE3 ---------------------------------------------- -----------------
这是我的application.xml
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
<display-name>sngp-v0-ear</display-name>
<module> <!-- EJBs are here -->
<ejb>sngp-v0-beans-1.0-alpha-1-SNAPSHOT.jar</ejb>
</module>
<module>
<web> <!-- JAX-RS are here -->
<web-uri>sngp-v0-mobile-resources-1.0-alpha-1-SNAPSHOT.war</web-uri>
<context-root>/sngp-v0-mobile-resources</context-root>
</web>
</module>
<library-directory>lib</library-directory>
</application>