(Glassfish v2.1)の場合、セッションBeanからの2つの別々のリクエストからの2つのRuntimeExceptions:
- "org.hibernate.SessionException:セッションが閉じられました!"
org.hibernate.SessionException:セッションが閉じられました!at org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:72)at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1138)at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102 )at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)[wrapped] javax.persistence.PersistenceException:org.hibernate.SessionException:セッションが閉じられました!org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)でorg.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:76)で
- 「java.lang.IllegalStateException:EntityManagerが閉じています」
java.lang.IllegalStateException:EntityManagerは、com.sunのcom.sun.enterprise.util.QueryWrapper.clearDelegates(QueryWrapper.java:460)のorg.hibernate.ejb.EntityManagerImpl.close(EntityManagerImpl.java:97)で閉じられます。 Enterprise.util.QueryWrapper.getResultList(QueryWrapper.java:198)
これらのEntityManagerは両方とも、JTAを使用したJNDIルックアップ(java:comp:/ env / TargetSitePersistenceContext)を介して取得されました(transaction-type属性はpersistence.xmlで定義されていません)。&SQL Server 2008 w / sqljdbc4.jar
コードはffを実行します:
query = entityManager.createQuery();
query.getResultList();
以上です。私が間違っていなければ、アプリコンテナはopen / commit / rollback / closeを処理すると思います。したがって、entityManager.close()は必要ありません。
これらの2つのランタイム例外の原因は何でしょうか。
GFはいつEntityManagerを実際に開閉しますか?
間に違いはありますか?
- JNDIルックアップを介して取得されたEntityManager
- @PersistenceContextインジェクションを介して?(これまでのところ、このスタイルの問題はありません)