2

lib jar で宣言された dao Bean の注入に問題があります。したがって、永続化コンテキスト、エンティティ、およびダオスを備えたjar(私のもの)があります。これがdaoの例です:

@Stateless
public class SomeDao {

  @PersistenceContext
  private EntityManager em;

  ...

}

今度は、この dao をメイン アプリケーションで使用したいと考えています。

jax-rs ユースケース:

@Path("rs")
public class WebService{

  @Inject
  private SomeDao dao;

  @POST
  public Response doPost(){
    //dao is injected but nullpointer thrown on EntityManager
    dao.doSomething();
  }
  ...
}

両方のプロジェクトに beans.xml があります (lib の場合は META-INF/、Web アプリケーションの場合は WEB-INF/ の下)。このように :

<?xml version="1.0" encoding="UTF-8"?>
<beans 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/beans_1_0.xsd">

</beans>

- - - - - - - 編集 - - - - - -

@Stateless アノテーションとプロデューサーを削除すると、それが機能することがわかりました。したがって、問題は実際には次のとおりです。lib jarで宣言されたEJBをCDIで注入する方法。

4

1 に答える 1

0

まず、これがサードパーティではなく自分で作成した jar である場合は、jar の正しい場所に beans.xml を追加するだけで、それらのオブジェクトを注入できるようになります。それが最も簡単な方法です。

それが 3 番目の部分の jar である場合、次善の策は、移植可能な拡張機能を作成しBeforeBeanDiscovery、CDI 1.0 またはCDI 1.1 でリッスンし、jar から必要なクラスを追加するメソッドをAfterTypeDiscovery呼び出すことです。addAnnotatedTypewar / ear クラスパスでこの拡張機能を作成します。

于 2013-11-04T23:00:44.343 に答える