0

Karaf バージョン 3.0.3 では、以下のコードを使用して ServiceReference オブジェクトを取得できました

ServiceReference serviceReference = 
                (ServiceReference) bundleContext.getServiceReference(CustomService.class.getName());

しかし、Karaf 4 では、このコードは null を返します。サービスが開始されました サービス一覧にサービスが表示されました。

注: ラップされたバンドルとしてロードされたサービスを取得しようとしています

4

1 に答える 1

1

サービスが開始されていることが確実な場合、その理由は、上記のサービス プロバイダーとサービス クライアントが CustomService クラスの異なるインスタンスを参照しているためです。

そのパッケージをエクスポートする 2 つのバンドルがあるとします。または、パッケージがプロバイダーまたはクライアントにも組み込まれています。別の理由として、サービスが起動する前にサービス参照を取得したことが考えられます。アクティベーターでこれを行いますか?はいの場合..タイミングの問題が発生する可能性があるため、これは悪い習慣です。ServiceTracker または DS または設計図を使用することをお勧めします。

次のコマンドを使用して、重複したエクスポートを確認できます。

package:exports  -d
于 2016-02-10T07:31:37.153 に答える