2

OSGI モデルを使用する Java アプリケーションが 1 つあります。

2 つの既存のバンドルがあります。

  1. コムモス
  2. com.login

com.loginAuthenticatorサービス(認証用の独自サービス)の実装と登録があります。com.loginだけでなく、com.mosこの認証サービスを使用します。

現在、1 つの新しいバンドル ( com.new) を作成しており、Authenticator Service を追加/変更する必要があるため、独自の実装を作成しました。

プログラム/アプリケーションを起動すると、新しいバンドルcom.newが後で実行されるとcom.login、すべてのバンドルが新しいバンドルを使用します。Authenticator Serviceただし、com.newバンドルが前に実行されるcom.loginと、古いバンドルAuthenticator Serviceが利用可能になります。

OSGIどのバンドルを最初に開始するかなど、何らかの優先順位を付けるメカニズムはありますか。

4

2 に答える 2

1

一般に、利用可能な OSGi サービスが複数ある場合、いずれかを選択するための 2 つのオプションがあります。

  1. サービス フィルター
  2. サービスランキング

ここまたはここ で説明されているように、サービス フィルターを使用して、サービス プロパティに基づいてサービスをフィルター処理できます。

サービスが発行するサービスランキングにより、サービスランキングに基づくピックアップ対象となります。ここまたはここ で説明されているように、サービス ランキングが最も高いものがピックアップされます。

BundleContext.getServiceReference()メソッドのドキュメントによると:

そのようなサービスが複数存在する場合は、最も優先度の高いサービスが選択されます。この優先度は、(Constants.SERVICE_RANKING プロパティで指定されているように) 最も高いランキングを持つサービス参照として定義されます。

ランキングが同点の場合は、サービス ID が最も小さいサービス (Constants.SERVICE_ID プロパティで指定)。つまり、最初に登録されたサービスが返されます。

于 2014-06-24T17:12:08.633 に答える
1

OSGi バンドルの開始レベルを使用すると、各バンドルの開始順序に影響を与えることができます。対応する javadocs http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/startlevel/package-summary.htmlを参照してください。 ただし、それを行うことはお勧めしません。開始レベルは通常、サービスの開始を制御する方法として使用しないでください。OSGi サービスでは、開始順序は保証されておらず、サービスは自由に出入りする可能性があります。

Authenticator サービスの特定の実装に応じて新しいバンドル (com.new) を作成すると、トリックが実行され、正しい順序が保証されます。

于 2013-06-14T13:11:12.347 に答える