0

Service を呼び出してエンティティをロードします。これを統合テストで実行すると問題ありませんが、実際のサーバーでは失敗します。

このエンティティの一部のプロパティはコレクションです。どちらの場合も、エンティティには Bean がロードされています。「query.getSingleResult()」の近くでブレークポイントを使用してデバッグモードで実行を停止すると、コレクションがロードされたことがわかります。ただし、試運転のみ...

servletcontainer で同じコードを停止すると、InvocationException が発生します!?

私の環境は次のようになります:
春 3.1
休止状態 3.6.6.Final

私が試したこと:
- context.xml (テストと本番) の違いを検索する
- productionmode で他の context.xml ファイル (テスト) を使用する

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: de.hoeso.gwt.platform.server.domain.common.Person.anschrift, no session or session was closed at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383) at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375) at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:122) at org.hibernate.collection.PersistentBag.size(PersistentBag.java:248) at de.hoeso.sis.server.services.common.impl.UserServiceBeanImpl.login(UserServiceBeanImpl.java:397) at de.hoeso.sis.server.rpc.LoginService.execute(LoginService.java:35)

テストモードでは、休止状態のセッションが接続されて開いていることがわかりました。プロダクション モード (サーブレット コンテナでは、entitymanager.getDelegate().

4

1 に答える 1

0

JMelnik の助けを借りて、自分の問題の解決策を見つけました。後世のために、私は私の解決策を共有します...

オブジェクトをロードするコードの近くにブレークポイントを配置すると、主な違いがわかりました。

return entitymanager.isOpen();

(boolean) true // テストモードとプロダクションモード

return ((org.hibernate.Session)entitymanager.getDelegate()).isConnected();

(boolean) true // テストモード (boolean) false // productionmode

return ((org.hibernate.Session)entitymanager.getDelegate()).isOpen();

(boolean) true // テストモード (boolean) false // productionmode

return((org.hibernate.Session)entitymanager.getDelegate()).getTransaction().isActive();  

productionmode では例外がスローされ、testmode では次が返されます: (boolean) true

結論: コードはトランザクションなしで本番モードで実行されています。テスト モードでは、@Transactional アノテーションが付けられたスーパークラスからテスト クラスが継承されるため、トランザクションが存在します。ServiceBean の階層では、これを忘れていました。

注釈が挿入され、すべてが完全に機能します!

于 2012-06-08T12:14:32.967 に答える