@EJB没有注入JAX-RS

时间:2012-06-08 07:18:34

标签: ejb jax-rs

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

1 个答案:

答案 0 :(得分:3)

MyResource类既不是Web组件,也不是企业bean,但您尝试将EJB注入其中。只有当客户端是Web组件或其他企业bean时,才能保证EJB注入工作。

尝试制作MyResource @Stateless

关于EJB注入,请查看此Java EE 6 tutorial。如果您使用的是NetBeans,我发现使用内置向导创建RESTFul Web服务也很有用。请查看此link以防万一。