2

私は@LocalBeans と JAX-RS リソースを 1 つの耳の異なるパッケージに持っています。

また、これらのリソースの前に ServletFilter フィルタリングも行います。

@EJBServletFilter では機能しますが、これらのリソースでは機能しないことがわかりました。

@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 が単一の耳に組み込まれていることに興味があります。

そして、web-war は Web コンポーネントですね。

UPDATE2 -------------------------------------------------- -----

あっ、すみません。MyApplicationMyResource を 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 を注入しようとしています。EJB インジェクションは、クライアントが Web コンポーネントまたは別のエンタープライズ Bean である場合にのみ機能することが保証されています。

作ってみてくださいMyResource @Stateless

インジェクションに関するJava EE 6チュートリアルをご覧ください。EJBNetBeans を使用している場合は、組み込みのウ​​ィザードを使用して RESTFul Web サービスを作成することも役に立ちます。場合によっては、このリンクを参照してください。

于 2012-06-08T07:37:11.877 に答える