我想通過使用上下文查找在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)