4

さまざまなビューを備えた Eclipse プラグインがあるとします。これらのビューは、データをビューにプッシュする OSGi バンドルからのデータを表示する必要があります。すべてのビューを OSGi バンドルと通信させるのではなく、ビューの黒板として機能し、ビューと他の OSGi バンドルとの間の通信を管理する中間の Facade クラスを用意します。これが理論です。

この問題は、ui バンドル (ビューと Facade を含む) が Declarative Services を使用して他のバンドル (DataStore と呼ぶ) と通信するために発生します。Data Store はさらに別のソースから非同期データ更新を受信するため、コンテンツを Facade (および利用可能な場合は他のバンドル) にプッシュする必要があります。OSGi は、データストアの DS 構成のカーディナリティの要件を満たすために Facade をインスタンス化しますが、ビューはプラグインの IApplication 実装によってインスタンス化されます。IApplication と Facade が同じクラスであっても、お互いを認識しない 2 つの別個のインスタンスを取得します。

これらのコンポーネント (プラグイン Application、Views などと OSGi でインスタンス化された Facade) 間の通信を有効にするにはどうすればよいですか?

4

2 に答える 2

1

また、Spring DMを使用して OSGi サービスを接続し、Martin Lippert グルー プラグインを使用してビューを OSGi サービス (ま​​たは Spring Bean) に接続することもできます。サービス API またはスプリング API ...

于 2008-11-12T23:41:46.810 に答える
1

1 つの解決策は、Singleton を使用し、Application と Facade の一方または両方をその Singleton に登録することです。

ただし、この問題でグローバル変数をスローするという考えは本当に好きではありません。意味がないようです-これは一般的な問題に違いないので、エレガントな解決策があると思いますが、それを検索する方法がわかりません。

于 2008-11-11T23:33:25.313 に答える