Mon*_*ide 1 jsf tomcat jpa cdi jboss-weld
我在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();
}
}
Run Code Online (Sandbox Code Playgroud)
我的DAO课程:
public class DAO<T> implements Serializable{
private final Class<T> classe;
@Inject
protected EntityManager em;
public DAO(Class<T> classe) {
this.classe = classe;
}
}
Run Code Online (Sandbox Code Playgroud)
和一个儿童班:
public class UserDao extends DAO<User> implements Serializable{
public UserDao() {
super(User.class);
}
}
Run Code Online (Sandbox Code Playgroud)
由于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);
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中:
public class Test {
@Inject UserDAO userDAO;
@Inject DAO<User> dao;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用UserDAO类时,一切正常,但是当我使用DAO时,EntityManager仍为null.任何人都有任何想法?
在DAOFactory使用new运算符实例化DAO时,如果这样做,CDI将无法在DAO实例中注入依赖项.而在UserDAOCDI中管理实体管理器注入.因此,DAOFactory您应该在新创建的DAO实例中手动设置实体管理器.
| 归档时间: |
|
| 查看次数: |
1994 次 |
| 最近记录: |