1

OSGi を使用して実行時にモジュラー機能をロードする動的アプリケーションがあります。OSGi バンドルにはモジュラー機能が含まれており、アプリケーションは必要なときにバンドルをロードします。このアプローチは問題なく機能しますが、より詳細なソリューションが必要です。バンドルには、Declarative Services によって制御されるコンポーネントが含まれています。バンドルをロードして、バンドル内で必要なコンポーネントのみを有効にしたいと考えています。この分野で調査を行いましたが、満足のいく解決策が見つかりません。1 つのアプローチは、バンドル内で常に有効な「ゲートキーパー」コンポーネントを作成し、ComponentContext を介して有効化および無効化コンポーネントを呼び出すことでした。これは実行可能な解決策ですが、「ゲートキーパー」が「知る」方法がわかりませんでした。

私が好むのは、バンドルをロードし、ロードされたバンドル内のすべてのコンポーネントを「知る」方法です。コンポーネントがどのバンドルにあり、現在どのような状態にあるかを判断できます (すべてのコンポーネントを一覧表示する equinox コンソール コマンド 'ls' に似ています)。必要に応じてコンポーネントを有効または無効にしたいと考えています。

コンソールはどのようにこれを行い、アプリケーションでこれをどのように行うことができますか?

更新: @Neil Bartlett: 遅れてすみません。私は別のことに移らなければなりませんでした。今、私はこの問題に戻ります。さらなるご支援をいただければ幸いです。私のアプリケーションはロールベースです。コンポーネントが提供する機能に基づいてコンポーネントを有効にする必要があります。目標は、すべての役割ベースのコンポーネントを最初に無効にすることです。ロールが変更されると、ロール マネージャは、提供されている機能について各コンポーネントをポーリングし、それをロードするかどうかを決定します。各コンポーネントは、提供する機能を (共通のサービス インターフェイスを介して) ブロードキャストします。ScrService では、最初に無効にしたサービス コンポーネントを有効にすることはできません。コンポーネントを最初に有効にし、ScrService がアプリケーションの起動時にできるだけ早くコンポーネントを無効にできるようにするのは、私のニーズには合いません。

4

3 に答える 3

1

ScrServiceを見てください。春分の日とフェリックスの両方がそれを持っています。

ただし、コンポーネントを遅延ロードするようにすることもできます。つまり、他のコンポーネント/バンドルで必要な場合にのみロードすることができます。しかし、それはおそらくあなたが望むものではありません。

于 2011-11-12T16:52:36.707 に答える