コンテキスト ルックアップを使用して POJO に EJB を挿入しようとしています。私が期待しているのは、EJB のステートレスな動作です。
@EJB annotation
EJB には、EJB のコンストラクターの EntityManagerFactory から取得した entityManager があります。
@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 を 2 回検索します。
最初の取得時に、entitymanager を閉じます
次に、2 回目のルックアップで、Stateless EJB のような動作を期待しているため、EntityManager が開いていることがわかります。
しかし、私はこれを観察していません。2 回目にルックアップを実行して を実行するとem.isOpen()
、false が返されます。
問題は、状態のない EJB のような動作を取得するために context.lookup を使用できるかということです。そうでない場合、何が使用できますか?
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)