4

私の問題に関するstackoverflowで他の多くの質問を読みましたが、適切な解決策が見つかりませんでした.

私は OSGI アプリケーション (Equinox) を開発し、JPA (EclipseLink) を使用しています。ここで、EntityManager を必要とするバンドルで EntityManager を取得する最善の方法を尋ねます。EntityManagerFactory をサービスとして公開し、それを使用して EntityManger を取得する場合、EntityManager を使用するすべてのバンドルで persistence.xml を提供する必要があります。EntityManger の 1 つのインスタンスを共有するユーティリティ クラスを作成し、それをサービスとして公開すると、スレッド同期の問題が発生するのではないかと心配しています。

OSGI と JPA を使用するときに EntityManager を提供するためのベスト プラクティスはありますか?

ありがとう

ダン

4

2 に答える 2

1

EclipseLink を OSGi 内で使用する場合、persistence.xml が配置されているバンドルの MANIFEST.MF に「<strong>JPA-PersistenceUnits: myPersistenceUnit」を追加して、persistence.xml を見つけることができるバンドルを宣言する必要があります。TopLinkはこの宣言を検索し、このバンドルのクラス・ローダーを使用してpersistence.xmlを取得します。その後、EntityManagerFactory をサービスとして公開でき、サービスを使用するすべてのバンドルで persistence.xml を共有する必要はありません。しかし、これはEclipseLinkでのみ機能すると思います。

于 2010-12-01T07:35:50.983 に答える
0

このブログを使用して、各クライアント バンドルが persistence.xml を認識せずに、OpenJPA と個別のモデル バンドルをセットアップしました。EclipseLink は JPA プロバイダーであるため、ほぼ同じセットアップである必要があります。ブログの下部にリンクされているサンプル コードを必ず確認してください。

于 2010-11-29T15:43:58.000 に答える