我想通过使用上下文查找在POJO中注入一个EJB。 我所预料到的是EJB的无状态的行为,你当你做一个初始上下文查找返回相同的实例|在Pojo中注入无状态EJB
@EJB annotation
该EJB具有的EntityManager这是我从EntityManagerFactory的获得在构造函数中的苏氨酸EJB得到
@Stateless
Class ReprovProcess implements ReprovisioningProcess {
protected EntityManager em;
public ReprovProcess(){
//init em from entityManagerFactory;
}
public EntityManager getEm(){
return em;
}
}
@LocalBinding(jndiBinding = "ReprovProcess/local")
class interface ReprovisioningProcess {
}
下一页我查找EJB的两倍,使得
第一次检索时我关闭的EntityManager
然后在第二次查找时,我应该看到EntityManager处于打开状态,因为我期待着一个无状态的EJB行为。
但我没有观察到这一点。我第二次查找并做了一个em.isOpen()
,我得到一个错误。
所以问题是:context.lookup可以用来获得无状态的EJB类行为吗? 如果不是可以使用什么?
ReprovisioningProcess pro = (ReprovisioningProcess)
ic.lookup("ReprovProcess/local");
EntityManager em = pro.getEm();
System.out.println("Entity Manager State = "+em.isOpen());
em.close();
System.out.println("Entity Manager State = "+em.isOpen());
pro = (NetElementReprovisioningProcess) ic.lookup("ReprovProcess/local");
em = pro.getEm();
System.out.println("Entity Manager State = "+em.isOpen());
em.close();
System.out.println("Entity Manager State = "+em.isOpen());
输出是
Entity Manager State = true
Entity Manager State = false
Entity Manager State = false
------------- ---------------- ---------------
EntityManager is closed
java.lang.IllegalStateException: EntityManager is closed
at org.hibernate.ejb.EntityManagerImpl.close(EntityManagerImpl.java:97)
at com.cisco.cgms.factoryconfig.reprovision.ReprovisiongGroupTest.testIntialLookup(ReprovisiongGroupTest.java:135)