1

私の Equinox OSGi アプリケーションには、共通のタスクに使用される共通のバンドル (A) があります。ただし、バンドル A は状況に応じて他の多くのバンドルからパッケージをインポートします。つまり、バンドル A とバンドル B がランタイムにある場合、A はパッケージ「com.b.package1」をインポートする必要があります。バンドル A とバンドル C がランタイムにある場合、A はパッケージ「com.c.package2」をインポートする必要があります。このため、ランタイムを変更するたびに、バンドル A の MANIFEST.MF ファイルの import ステートメントを手動で変更する必要があります。これをプログラムで処理する方法はありますか。バンドル A でカスタム クラス ローダーを使用している可能性がありますか? どんな助けでも大歓迎です。

4

3 に答える 3

1

実際、これはアーキテクチャの問題を示しています。特に hibernate では、動的インポートを使用して jpa エンティティにアクセスする必要があることが知られています。今後のバージョンでは、休止状態チームはより優れた OSGi サポートを約束しますが、今のところ OSGi ではかなりお粗末です。

したがって、OpenJPA または Eclipselink に切り替え、Aries JPA を使用して JPA EntityManager を作成することをお勧めします。このようにして、バンドルごとに EntityManager が作成され、それをサービスとして注入できます。必要に応じて、コンテナ管理の永続化も処理します。したがって、Java EE のように JPA をほぼ使用できます。

http://aries.apache.org/modules/jpaproject.html およびhttp://www.liquid-reality.de/display/liquid/2012/01/13/Apache+Karaf+Tutorial+Part+6+-を参照してください。 +データベース+アクセス

于 2013-07-06T16:34:52.140 に答える