1

2番目の永続性ユニットを追加し、アプリケーションのデータソースをXADataSource(MySQL)に変更した後、親エンティティの分離レベルに関する紛らわしい警告がGlassfishログに表示されます。

WARN  o.e.p.s.f.j.ejb_or_metadata : Parent Entity BaseEntity has an isolation
level of: PROTECTED which is more protective then the subclass Contact with
isolation: null so the subclass has been set to the isolation level PROTECTED.

調査の結果、この分離レベルの警告メッセージはEclipseLinkのキャッシュメカニズムからのものだと思います。しかし、アプリのどこにも分離レベルを指定していないため、構成内の何かがBaseEntityクラスの分離レベルを「PROTECTED」にするようにトリガーしたようです。ドキュメントには、そのレベルに自動的に割り当てられる原因については記載されていません。ユーザーガイドを参照してください。

1人のユーザーを使ったマイナーなテストでは、アプリケーションは期待どおりに機能しているように見えますが、この警告メッセージでは、大衆に展開するのは快適ではありません。

誰かがこのメッセージに光を当てることができますか?私の懸念は有効ですか?

4

3 に答える 3

0

これはキャッシュの分離に関する単なる警告であり、データベースの分離によるものではないため、無視してかまいません。

キャッシュ分離の詳細については、以下を参照してください。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching/Shared_and_Isolated

ただし、キャッシュ構成を行っていない場合は奇妙です。デフォルトでは、すべてを共有する必要があります。保護されたものを取得するには、@ Cacheable(false)を使用するなど、関連するエンティティの痛みを無効にする必要がありますか?

于 2012-05-31T13:45:32.217 に答える
0

ここでのキャッシュの実装は、parnetと子エンティティの分離レベルを同期しようとしているだけです。ただし、デフォルトの保護分離レベルをオーバーライドする必要があると思います。「Serializeable」分離レベルは、最も保護的でパフォーマンスが低いレベルであるためです。要件に応じて、ReadCommittedまたはRepeateableReadレベルを使用できます。

于 2012-05-31T12:47:43.343 に答える
0

調査の結果、この警告はXADataSourceの使用とは何の関係もないことがわかりました。私は以前にEclipseLinkのマルチテナンシーの調査を開始しましたが、これが原因であることが判明しました。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Multitenant#Persistence_Usage_for_Multiple_Tenantsを参照してください:

このアーキテクチャを使用する場合、通常のエンティティタイプで使用できる共有キャッシュがありますが、マルチテナントタイプはキャッシュで保護されている必要があるため、MULTITENANT_SHARED_EMFプロパティをtrueに設定する必要があります。

参考までに-コードを確認する際、ClassDescriptor.initializeCaching()には、キャッシュ分離がPROTECTEDにダウングレードされる他の3つのケースがあります。

  1. エンティティに、キャッシュ不可としてマークするDatabaseMappingがある場合。
  2. エンティティに、共有の分離レベルを持たないForeignReferenceMappingがある場合。
  3. エンティティに、共有の分離レベルを持たないAggregateObjectMappingがある場合。
于 2012-06-27T01:34:29.820 に答える