2017-01-17 7 views
0

私はこのような状況があります:「自分」の実体 シェアのOSGiバンドルの中でJPAデータソース

  • 1のためのJPAエンティティと、ばねのデータリポジトリと

    • 1つのSQLデータベースインスタンス
    • 二つ以上のOSGiバンドルを「バンドルバンドル」は「コアバンドル」、その他はそれに依存します(プラグインバンドル)

    これを単一データソースで使用できますか?

    例:

    • "コア・バンドル" は含まれていPerson実体
    • "人物リストプラグイン・バンドルは、" Personエンティティにどの参照PersonListエンティティが含まれていpeopleプロパティによって

    I今PersonListRepository.findByPeoplesFirstName(String firstName)

    を使用する「Person list plugin bundle」のPersonListServiceを使用します。

    osgiバンドルをプラグインとして追加することで、アプリケーションのデータベースを拡張したいという背景があります。

    今は私がapache karafとhibernate 5を実験しています。なぜなら、それが重要なのであれば空間的なサポートのためです。

  • +0

    どうして "プラグイン"を使用したいのですか?たとえば、Personエンティティがある場合、Personを扱うすべてのリポジトリクラスは同じバンドルになければなりません。エンティティとそのリポジトリを分離することは意味がないと思います。 –

    +0

    PHPコードを含むフォルダを追加するだけで、ユーザーが "プラグイン"をインストールできるレガシーアプリケーションを置き換えたい場合は、データベースに事前計算済みのテーブルをいくつか追加する "キャッシュビルダープラグイン"があります。これは、独自のテーブルと "コア"テーブルにアクセスする必要があります。 – dve

    答えて

    0

    OSGiでは、JPA EntityManagerのすべてのエンティティが同じバンドルに存在することを推奨します。エンティティをすべて表示するバンドルからEntityManagerを作成できますが、これは必要なプラグインモデルでは機能しません。

    とにかく、いくつかのバンドルを生成するデータベース側でモデルを作成すると、とにかく望ましくない結合が作成される可能性があります。 DDDの有界コンテキストの概念を調べ、それぞれの有界コンテキストを実装するための永続コンテキストを作成する必要があります。

    プラグインモデルは非常に静的な構造を持つ必要があるため、プラグインは実行時に移動する可能性があるため、データベースとの互換性はほとんどありません。

    もちろんデータソースを共有することはできますが、これはjpcレベルではなくjdbcレベルで行われます。

    +0

    私はその答えを恐れていましたが、これらのアイデアはうまくいきます:それぞれの "jpa-bundle"は必要なものをインポートし、独自の永続コンテキストを作成しますか?オブジェクトを1つのバンドルから別のバンドルに共有することはできませんが、依然としてエンティティとサービス定義を使用していますか? – dve

    +0

    これはうまくいくとは思わない。その理由は、EntityManagersは異なるキャッシュを持ちますが、同じデータベースに効果的に書き込むためです。もちろん、いくつかの基本クラスを共有できますが、各EntityManagerは異なるテーブルに書き込む必要があります。 –

    関連する問題