2009-07-31 17 views
9

永続性プロバイダとしてEclipselinkを使用して、データモデルにJPA永続性を使用します。私はモジュラー(OSGi)アプリケーションを持っており、モジュールの1つに標準データモデルとパッケージからのすべてのエンティティを自動的に含むパーシスタンスユニットが含まれています。パーシスタンスプロバイダは別のモジュールにあり、うまく機能します。異なるJARから永続性ユニットをマージ/拡張するにはどうすればよいですか?

私は、永続ユニットにいくつかのエンティティを追加する第3のモジュールを望みます。それ、どうやったら出来るの?私はthis solutionを見つけました。私は使用していないSpring固有のようです。そのアプローチの要約は、持続ユニット処理にフックするポストプロセッサを書き込んで、persistence.xmlファイルの<class>エントリを手動でマージすることです。

永続性ユニットをマージできますか?誰でも回避策を提案できますか?

+0

3つのモジュールはすべて1つの.earですか? –

+0

いいえ、各モジュールは、OSGiコンテナ(私の場合はApache Felix)にロードされるJARです。 Eclipselinkは、それ自身のJARまたはモジュールの1つにあり、persistence.xmlファイルの可視パッケージをスキャンします。これはうまくいく。 –

答えて

5

まず、Dynamic-JPAというリンクがあり、エンティティを動的に更新する方法があります。私はこのオプションを最初に探求します。ここ


のOSGiから別のリンク( PDF)は永続性と有用であり得るのEntityManagerFactoryを扱ういくつかのトップレベルの図であるです。


興味深いアプローチが、ここで creating persistence units programmaticly上のリンクは、あなたが本当に行うことはできませんpersistence.xmlのファイルを(使用せずですが、答えは問題のいくつかの洞察を提供

無関係であり)。 philkは、persistence.xmlファイルからプロバイダを削除する方法を提案します。この方法に従うと、エンティティを特定の永続ユニットに結合することができます。

「まあ休止状態の古き良き時代に私はセッションを作成することができますし、 は、その場でそれに私のクラスを追加します。サンズJPA スペックにそれを作ったことがないと思われます。しかし、私は完全にからプロバイダを削除しました persistence.xmlを使用してEMFのプロパティを使用してELに渡してくださいこの は正常に動作しているようですが、persistence.xmlに残っている唯一のことは、クラス です。メソッドの は、ELのクラス名を解析し、そのクラスのClassDescriptorをEL JPAプロバイダの公開メソッドとして として作成します。


最後に、私たちはすでに提案されているハッキリした解決策に出くわして、事実の後にpersistence.xmlファイルを編集するだけです。私はこれがうまくいくと信じています(私はそれを試していませんが)、間違いなく選択肢です。

関連する問題