1

JBOSS 5.1内で実行されている、Hibernateを背後に持つJPAを使用しています。

トランザクション内のEntityManagerを介してデータを書き込むと、このトランザクションをコミットし、この書き込まれたデータを読み取るために新しいトランザクションを開始した直後に、新しいデータがクエリによって返されないため、奇妙な動作が発生します(ただし、古いもの)ですが、データベースにコミットされた新しいデータが表示されます(別のプロセスで表示されます)。

この読み取りを何度でも繰り返すことができます(この同じトランザクションのデバッグモードで)。新しいデータは返されません。

次に、entityManager.clear()を実行すると、(同じトランザクション内の)次の読み取りで最終的にデータが返されます。

面白い部分はここから始まります。別のマシンにインストールされた同じJBoss(物理コピー、ライブラリ、構成、すべて)は、まったく同じ物理データベースを指し、FINEで動作します(EMをクリアする必要なしにデータを取得します)。だからそれは環境に関連したものでなければなりません...

何か案は?

4

1 に答える 1

0

JBoss/server/default/deployers/ejb3.deployer/META-INF/persistence.properties両方のサーバーで確認します。

残念ながら、デフォルトでは、トランザクションではないもののみが含まれており、 orhibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProviderに置き換える必要があります。org.hibernate.cache.jbc2.JBossCacheRegionFactoryorg.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory

こちらもご覧ください

https://community.jboss.org/wiki/ClusteredJPAHibernateSecondLevelCachinginJBossAS5

http://www.mastertheboss.com/hibernate-cache/using-hibernate-second-level-cache-with-jboss-as-5-6-7

于 2012-11-29T14:10:24.507 に答える