OSGi 環境 (Felix を実行している Karaf) で可能な限り多くのモジュール性を維持しようとしています。JPA ではなく、追加機能 (主にフェッチ グループ) のために JDO を選択しました。実装は Datanucleus です。Maven を使用してプロジェクト全体をビルドします。
私は JDO や OSGi の経験がなかったので、どちらかを機能させるのは非常に困難でした。私は現在、Java SE 環境で JDO 永続化を行うことができ (単体テストは問題なく動作します)、ブループリント コンテナーを使用して OSGi 環境でサービスを提供する方法を知っています。しかし、私はこれら2つのことを一緒に機能させることができません。クラスローディングの問題があります。
Karaf で JDO 永続化を実行できる単純なアプリケーションでさえ構築できませんでした (このチュートリアルに従ってみましたが、Spring DM を使用しており、代わりに OSGi ブループリントを使用するように書き直すことができませんでした)。
私が最も混乱しているのは、次のことです。
- datanucleus.primaryClassLoaderプロパティをどの値に設定すればよいですか?
- JDOHelper.getPersistenceManagerFactoryメソッドに引数として渡すクラスローダーはどれですか?
- maven-bundle-pluginを使用して明示的にインポートするパッケージは? (少なくともjavax.jdo、org.datanucleus.api.jdo、org.osgi.frameworkが必要なようです)
- PersistenceManagerFactoryへの参照以外に、他のバンドルには何が必要ですか?
さらに:
- 永続化情報を値クラスから分離することは可能ですか? 私がそれを正しく理解していれば、実行可能であれば非常に複雑なランタイム拡張を使用する場合にのみ可能です。
- 複数のバンドルで相互に依存する永続化可能なクラスを定義することは可能ですか? ユーザーをあるバンドルで定義し、そのアドレスを別のバンドルで定義するなど?
Datanucleus、JDO API、および OSGi ブループリントのみを使用して永続性を処理する単純なマルチバンドル プロジェクトの例を提供していただければ、非常にありがたいです。
ありがとうございました