コンテナー管理のエンティティ マネージャーとアプリケーション管理のエンティティ マネージャーの違いを理解するのに問題がありますか?
違いを示す例を教えていただければ幸いです。
コンテナー管理のエンティティ マネージャーとアプリケーション管理のエンティティ マネージャーの違いを理解するのに問題がありますか?
違いを示す例を教えていただければ幸いです。
コンテナ管理のエンティティ マネージャの場合、コンテナはこのエンティティ マネージャのライフサイクルを管理します。アプリケーション管理の場合、アプリケーション (つまり、プログラマ) がこれを管理します。
close()
単純ですが非常に目に見える違いは、アプリケーション管理のエンティティ ファクトリを呼び出す必要があることです。コンテナ管理のものを使用すると、コンテナがこれを行います。
アプリケーション管理のエンティティ マネージャーの永続化コンテキストも、トランザクション スコープではありません。エンティティ マネージャが作成されたときに開始され、エンティティ マネージャが閉じられると終了します。これは、拡張永続コンテキストに多少似ていますが、このタイプのエンティティーマネージャーは、ステートフル Bean だけでなく、どこでも使用できるという違いがあります。
最後に、コンテナが実行している可能性のある (JTA) トランザクションから独立した、リソース ローカル トランザクションを使用するように公式に構成できるのは、アプリケーション管理のエンティティ マネージャーだけです。
Java SE では、アプリケーション管理のエンティティ マネージャーしかないことに注意してください。したがって、Hibernate を Tomcat に追加するだけ (一般的な組み合わせ) では、基本的にアプリケーション管理のエンティティ マネージャーを常に使用していることになります。
複数の Java EE アプリケーションが同じデータベースに接続し、JPA エンティティ マネージャー キャッシュを使用している場合。この問題に直面する可能性があります:
1 つのアプリケーションで行われたデータベースの変更は、すぐに他のアプリケーションに反映されない場合があります
コンテナ管理エンティティ マネージャの代わりにアプリケーション管理エンティティ マネージャを使用することは、この問題を解決するための完璧なソリューションです。
私のブログJava EE Example - How to use application managed entitymanager を参照してください。