2012-03-07 10 views
3

私は休止状態に裏打ちされた春データJPAを使用して実装されているデータアクセス層を使用していますRCPベースのアプリケーションを開発しています。アノテーションされたドメインクラスは1つのjar/bundleにあり、SpringリポジトリとSpringのconfigはデータソース、エンティティマネージャ、トランザクションマネージャをインスタンス化するために別のバンドルに入っています。これらのjarファイルはプロジェクト全体で他の非RCPアプリケーションによって使用されます。私のプラグインまたはOSGIバンドル(jta、antlr、commons collectionsなど)を介してターゲットプラットフォーム内でラップされ公開されているhibernate 3.6.8 jarおよび依存関係Eclipse Gemini Blueprintを使用して、RCPアプリ内でバンドルスプリングコンテキストを管理しています。のEclipse RCP、春、Hibernateのクラスローディング問題

DALバンドル春のコンテキストはジェミニエクステンダーによって初期化されて、私はorg.hibernate.ejb.HibernatePersistenceまたはjavax.persistence.spi.Persistenceproviderに通常関連ClassDefNotFound例外、どちらかを休止得ます。私は、すべてのhibernate jarと依存関係を、javaxパッケージとhibernateパッケージをエクスポートする単一のプラグインに入れてみました。私は制御しているプラ​​グインのマニフェストにEclipse Buddyポリシーを設定しようとしました。

Geminiを使用してEclipse RCP環境でSpringとHibernateの間のこのクラスのロードに関する問題を見つけることができませんでした。 。私はすべてのHibernate JARをドメインとDAOクラスと同じプラグインに入れることで、RCP内の過去の休止状態のDAOプロジェクトを実行しました。そのため、クラスだけがエクスポートされます。

この時点で私は、OpenJPAのかEclipseLinkのような、よりOSGI優しいJPAプロバイダーに移動すると、オプションではないと思います。

春のジャーと依存関係を1つのプラグインに入れ、バウンダリーポリシーを設定した別のプラグインに休止状態のジャーと依存関係を入れることを示唆していました。関連するjarファイルのほとんどがOSGiバンドルであると、これは汚れているようです。

私は、DALの瓶を保持しているプラ​​グインを作成瓶、及びスプリングORMの瓶を休止状態なので、彼らはすべてお互いを見ることができる可能性があるとします。

この作業を取得するためにきれいな方法はありますか?あなたはそれを所有している場合

答えて

0

コアバンドル、登録された仲間として、すべての疑いのバンドルを追加し、パッケージやバンドルが時々クラスのロードが仕事に行くのではありませんバディそうreuiredされている定義されていることを確認してください。バンドルからロードが開始された場合は、バディ・ポリシーをカスケードする必要があります。他のオプションは、問題の原因となっているターゲットバンドルの中で最も扱いやすいファイルを変更することです。

+0

ありがとうDuncan。私はHibernateで動作するJPA DAOソリューションを取得するために同様のアプローチをとっていましたが、Hibernate jarと依存関係を1つのプラグインにバンドルし、ドメインモデルプラグインとDAOプラグインでバディロードを使用することでSpring Data JPAはありませんでした。私はそれが良いメンテナンスオプションではないので、第三者のマニフェストを変更したくなかった。結論として、クラスローダーの問題のためEclipse RCP環境でSpring Data JPAを使用して放棄しました。 – KWilson

関連する問題