我用CDI做了一个小测试项目.我的应用程序由EJB EAR和WAR组成,全部部署在Glassfish 4上.我正在使用Hibernate 4.3.4来访问数据库.
我的目标是验证EJB(DAO)中的类是否可以接收EntityManager的注入.
SessionBean + EJB模式并不是很棒,但我必须修改已经创建的应用程序,所以我没有太多选择.
这是我的EJB代码:
@Named
public class DAOTest implements Serializable {
private static final long serialVersionUID = 1L;
@PersistenceContext(unitName="CDI-ejb")
private EntityManager em;
public void test(){
//em.getClass();
}
public EntityManager getEm() {
return em;
}
public void setEm(EntityManager em) {
this.em = em;
}
public DAOTest() {
// TODO Auto-generated constructor stub
}
}
Run Code Online (Sandbox Code Playgroud)
Service.java
@Stateless
@LocalBean
public class Service implements ServiceLocal {
@Inject DAOTest test;
/**
* Default constructor.
*/
public Service() {
// TODO …Run Code Online (Sandbox Code Playgroud) 我在使用Wildfly通过@Inject注入POJO时遇到了一些麻烦.文件明确指出:
@Dependent - 如果未指定,则为默认范围; 这意味着一个对象只存在一个客户端(bean),并且与该客户端(bean)具有相同的生命周期.
但是,当我有两个班级时:
@Singleton
@Startup
public class A{
@Inject
private B b;
}
public class B{
public B(){}
}
Run Code Online (Sandbox Code Playgroud)
我一直在:
注入点上带有限定符@Default的类型B的不满意依赖[BackedAnnotatedField] @Inject [...]
当我添加@Dependent时,一切都像魅力一样.我错过了什么吗?这种行为是野生蝇特有的吗?希望你能帮忙,谢谢.