私はOSGiのクラスの可視性について混乱しています。私は、Apacheフェリックスを実行すると、以下のバンドルロードしています:javax.persistence
1.99 OSGi環境では、クラスパスとクラスローダーはどのように設定されていますか?
antlr
、asm
、jpa
とcore
バンドルのOSGi-fiedが瓶をcom.mysql.jdbc
ドライバ- 注釈付きエンティティクラスとを呼び出し、自分の
persistence.xml
- 別のバンドルが含まれている私自身のバンドル210
ここで、私が混乱しているのは、どのバンドルがMySQLドライバを見ることができるかということです。私はこれがEntityManagerFactoryを作成するバンドルだと考えましたが、そのマニフェストでインポートするとClassNotFoundエラーが発生します。次に、eclipselink jpa
バンドルのマニフェストからインポートしようとしましたが、もう一度間違っています。永続性ユニット(エンティティクラスとpersistence.xml
)を含むバンドルのマニフェストからインポートした場合にのみ動作します。
したがって、データベースドライバはPUのバンドルのclasloaderによって参照されるように見えますが、それは私には意味がありません。どうしたの?
私はこれについての簡単な文書を見つけることができないようです。 These slidesはいくつかのヒントを示していますが、正確には包括的ではありません。
私はcreateEntityManagerFactoryにプロパティとしてドライバを渡しているが、私はそれは同じことだと思いますか?どういうわけかこれは私にとっては奇妙なようです。すべてのdb固有のものを扱う永続化プロバイダであるべきではありませんか? –
すべての永続性プロバイダには、JDBCインタフェースを処理できるDBドライバが必要です。そうすれば、バンドル間の結合を低く抑えることができます。使用するDBの選択はアプリケーション固有であるため、コード/設定の一部にする必要があります。これはOSGiの基本パターンです。インタフェースは契約として使用され、一部のバンドルはドメインまたはアプリケーション固有の実装を提供します。 – SteveD