2

@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 资源的原因。

当我部署earGF 时,将其检测为“企业应用程序”。

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>
4

1 回答 1

3

MyResource类既不是 Web 组件也不是企业 bean,但您正试图将 EJB 注入其中。只有当客户端是 Web 组件或另一个企业 bean 时,才能保证 EJB 注入有效。

尝试制作MyResource @Stateless.

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

于 2012-06-08T07:37:11.877 回答