DI を使用するSwing
プロジェクトがSpring
あり、現在、および に移行しようとしていEclipse 4
ますOSGi
。
ユーザーの構成ファイルを使用するとSpring
、機能を追加/削除するために Bean をコメント化/コメント解除できます (これらのバックエンド Bean によって提供されます)。に基づいてこれを行うための最良の方法を探してい
ます。
Bean をサービスとして作成し、開始レベルを定義できることはわかっていますが、これではユース ケースが解決されません。これらの Bean/モジュールが実行されていない状態で
アプリケーションが開始され、ユーザーが実行中の UI から構成を更新すると、これらの Bean/モジュールが開始され、アプリケーションの次の起動時にも開始されます。Eclipse
OSGi
OSGi
OSGi
私の問題に対する素敵でクリーンなアプローチはありますか?
4 に答える
おそらく、 Eclipse Gemini Blueprintを使用して、Spring と OSGi の間ですべてを統合する方法を管理したいと思うでしょう(Gemini Blueprint は Spring Dynamic Modules の後継です)。特に、動的サービス登録に関連するすべての複雑さを実質的に処理できます。あなたの豆は実質的に同一のままにすることができます。
もう 1 つの方法は、Declarative Services を Configuration Admin と一緒に使用して、構成データでアクティブにするサービスを決定できるようにすることです。詳しくはこちら。
これに対する絶対的な最善のアプローチは宣言型サービス (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 つの利点は、サイズが小さく、ダイナミクスを隠そうとしないことです。
あなたがすでに知っているように、サービスはこれに対する良いアプローチです。単純にすべてのモジュールをインストールしますが、起動はしません。次に、ユーザーが必要な機能を選択すると、UI はモジュールを開始および停止できます。OSGi フレームワークは、再起動時にインストールおよび開始されたモジュールを記憶します。