0

DI を使用するSwingプロジェクトがSpringあり、現在、および に移行しようとしていEclipse 4ますOSGi
ユーザーの構成ファイルを使用するとSpring、機能を追加/削除するために Bean をコメント化/コメント解除できます (これらのバックエンド Bean によって提供されます)。に基づいてこれを行うための最良の方法を探してい
ます。 Bean をサービスとして作成し、開始レベルを定義できることはわかっていますが、これではユース ケースが解決されません。これらの Bean/モジュールが実行されていない状態で アプリケーションが開始され、ユーザーが実行中の UI から構成を更新すると、これらの Bean/モジュールが開始され、アプリケーションの次の起動時にも開始されます。EclipseOSGiOSGi
OSGi

私の問題に対する素敵でクリーンなアプローチはありますか?

4

4 に答える 4

2

おそらく、 Eclipse Gemini Blueprintを使用して、Spring と OSGi の間ですべてを統合する方法を管理したいと思うでしょう(Gemini Blueprint は Spring Dynamic Modules の後継です)。特に、動的サービス登録に関連するすべての複雑さを実質的に処理できます。あなたの豆は実質的に同一のままにすることができます。

于 2012-10-22T10:19:58.623 に答える
1

もう 1 つの方法は、Declarative Services を Configuration Admin と一緒に使用して、構成データでアクティブにするサービスを決定できるようにすることです。詳しくはこちら

于 2012-10-22T12:40:36.077 に答える
0

これに対する絶対的な最善のアプローチは宣言型サービス (DS) です。DS は OSGi の Configuration Admin と統合されているため、サービス インスタンスの数だけでなく、その構成とサービス プロパティを簡単に制御できます。たとえば、次のコンポーネント (bnd アノテーション付き [OSGi 仕様の同様の機能にすぐに似る予定です]):

    @Component(designateFactory=Config.class)
    public MyComp implements MyService {
       interface Config {
         int port();
         String host();
      }
      Config config;
      @Activate
      void activate(Map<String,Object> map) {
        config = Configurable.createConfigurable(Config.class,map);
        start();
      }

      void foo() { ... do the MyService stuff ... }

      @Reference
      void setDataSource( DataSource ds ) { ... }
   }

このコンポーネントには、構成管理の工場出荷時の構成が必要です。これがどれほど強力かを確認する最良の方法は、Apache Felix Webconsole を使用してフレームワークをセットアップすることです。は、バンドル内にメタタイプXML ファイルdesignateFactory=Config.classを作成するように bnd に指示します。これは Webconsole によって使用され、インターフェースとそのメソッドから派生した、構成データの見栄えの良いフォームを作成します。このフォームは型を認識します。つまり、ポート番号に数値以外の値を入力することはできません。Web コンソールを使用して、複数のファクトリ構成を作成することにより、複数のコンポーネントをインスタンス化できるようになりました。これらの工場設定を削除すると、サービスが削除されます。アプリケーションでは、ユーザーの制御下で Configuration Admin を自分で操作できます。

もう 1 つの利点は、Configuration Admin を使用して、コンポーネントの依存関係のバインディングを制御できることです。前述の例では、会計データベースを選択するdataSource.targetようなフィルターにプロパティを設定できます。(db=accounting)すべての構成プロパティはサービス プロパティとして追加されるため、データ ソースを作成する構成で「db」サービス プロパティを簡単に設定できます (このように実装されている場合)。

これは、DS の最も理解されていない利点の 1 つであり、非常に大きいと断言できます。これを開始するには、bndtools で DS プロジェクトを作成してから、新しい実行記述子を作成し、Webconsole テンプレートを選択します。

DS のもう 1 つの利点は、サイズが小さく、ダイナミクスを隠そうとしないことです。

于 2013-10-23T06:54:02.373 に答える
0

あなたがすでに知っているように、サービスはこれに対する良いアプローチです。単純にすべてのモジュールをインストールしますが、起動はしません。次に、ユーザーが必要な機能を選択すると、UI はモジュールを開始および停止できます。OSGi フレームワークは、再起動時にインストールおよび開始されたモジュールを記憶します。

于 2012-10-22T06:43:01.227 に答える