我@LocalBean
在一个耳朵的不同包中拥有 s 和 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>