2015-10-02 15 views
5

Spring起動アプリケーションでプラグインアーキテクチャを実装したいと思います。私のシナリオを説明しましょう。私は、サーバーを起動し、セキュリティなどを管理するメインアプリケーションを持っています。このアプリケーションは、このルートアプリケーションとそれに加えられた他のプラグインを含む私の最終製品のルートのようです。注釈ベースのSpring起動アプリケーションでプラグインアーキテクチャを実装する

ここで、プラグインはSpringブートアプリケーションであり、特定のパスのjarファイルを動的に検索したり、プロジェクト依存関係をライブラリとして追加してルートアプリケーションに追加することができます。

プラグインは独自の設定を持ち、メインルートアプリ内で実行されているアプリのようです。ルートアプリケーションがサーバーを実行している場合、プラグインアプリケーションには、製品に機能を提供するすべてのコントローラ(エンドポイント)、Beanなどが含まれている可能性があります。

これが前提で、今私が知りたいどのように私は、このアーキテクチャを実現することができ、

  1. のですか?
  2. ルートアプリはプラグインとどのように通信しますか?
  3. 別々のアプリケーションコンテキストがありますか?
  4. ルートアプリケーションから子アプリを起動して設定するにはどうすればよいですか?
  5. アプリケーションがクライアントから要求を受け取ると、プラグインが多数ある可能性があるため、特定のコントローラ内の特定のコントローラにリクエストをルーティングする方法を教えてください。

私はここのコンセプトと、それがどのように機能するかについて混乱しています。どんな種類の助けもありがたいです。誰かが提供できるいくつかの例があれば、それはすばらしいことになります。

+2

私は同様のプラグインシステムを実装しようとしています。あなたは解決策を見つけましたか? – rvit34

答えて

5

あなたがけん引オプションがありJava dyanmically load pluginで説明したように:

  1. 口座にすべてのあなたの質問にかかりますが、ServiceLoader
  2. を使用した春ブーツ
  3. と組み合わせることが少しトリッキーかもしれないのOSGiの道を、行くを

少なくとも2番目のアプローチでは、各jarファイルは同じインタフェースを実装する必要があります。これを使用してjarファイルの内容を登録できます(OSGiバンドルのstartメソッドと同様)。このようにして、各jarファイルのアプリケーションコンテキストを分離し、起動時にのみ利用できるようにすることができます(たとえば、追加されたjarのコンテキストをルートコンテキストに追加するコンテキスト階層を作成できます)。

同じ要求を満たすことができる複数のサービスがあると考える必要があるため、最後の点は難しいかもしれません。 OSGiからのリーフをもう一度取ると、これらのサービスは通常共通のインターフェースを介して定義され、実装には優先順位のようなものがあり、複数のサービスがある場合にどのサービスを使用すべきかを示します。もちろん、どちらか一方を選択するために定義できる他のアプローチがあります。

0

2つの可能なオプション 1. spring-pluginを使用すると、OSGiの種類の機能を実現できます。 https://github.com/spring-projects/spring-plugin 2. mirco-bootを使用します。これは、スプリングブートバックエンドとマイクロサーバーフロントエンドを使用します。それはまた、あなたの要件に応じてプラグインのサポートを提供します。あなたは探検することができます https://github.com/aol/micro-server/tree/master/micro-boot

関連する問題