【发布时间】:2012-07-06 20:09:39
【问题描述】:
我正在尝试通过使用上下文查找在 POJO 中注入 EJB。 我期待的是当你做一个
@EJB annotation
EJB 有一个 entityManager,我从 EJB 的构造函数中的 EntityManagerFactory 获得
@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 已打开,因为我期待类似无状态 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)
【问题讨论】:
标签: ejb stateless initial-context