1

Tomcat の CDI に問題があります。それは私のコードの関連部分です:

public class JPAUtil {
    private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("unit");

    @Produces @RequestScoped
    public static EntityManager getEntityManager() {
        return emf.createEntityManager();
    }


    public void close(@Disposes EntityManager em) {
        em.close();
    }

}

私のDAOクラス:

public class DAO<T> implements Serializable{

    private final Class<T> classe;

    @Inject
    protected EntityManager em;

    public DAO(Class<T> classe) {
        this.classe = classe;
    }
}

および子クラス:

public class UserDao extends DAO<User> implements Serializable{

    public UserDao() {
        super(User.class);
    }
}

Generics のため、DAO クラスのプロデューサーを使用しました。

public class DAOFactory {

    @Produces
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public DAO createDAO(InjectionPoint injectionPoint) {
        ParameterizedType type = (ParameterizedType) injectionPoint.getType();
        Class classe = (Class) type.getActualTypeArguments()[0];
        return new DAO(classe);
    }
}

この例では:

public class Test {
    @Inject UserDAO userDAO;
    @Inject DAO<User> dao;
}

UserDAO クラスを使用しようとすると、すべて正常に動作しますが、DAO を使用すると、EntityManager は null のままです。誰でも何か考えがありますか?

4

1 に答える 1

5

DAOFactory演算子を使用してDAOをインスタンス化すると、newCDIはDAOインスタンスに依存関係を注入する機会がありません。UserDAOCDI では、エンティティ マネージャーのインジェクションを管理します。そのDAOFactoryため、新しく作成された DAO インスタンスでエンティティ マネージャーを手動で設定する必要があります。

于 2012-04-19T14:20:15.490 に答える