13

Equinoxを実行しているOSGiアプリケーションがあります。アプリケーションが提供するサービスを見たいのですが。これどうやってするの?

4

5 に答える 5

15

gogoシェルタイプから:

inspect cap service

これにより、すべてのバンドルによって登録されたすべてのサービスが表示されます。特定のバンドルのサービスを表示する場合は、次のように入力します。

inspect cap service <id>

<id>関心のあるバンドルの数値バンドルIDはどこにありますか。

于 2012-08-07T15:56:31.940 に答える
13

それは、対話的に意味するのか、OSGiシェルを使用するのか、それともアプリケーションからプログラム的に意味するのかによって異なります。

インタラクティブに

Equinoxコンソールを使用できます。「サービス」を参照してください。デプロイしたサービスのみを表示するには、LDAPフィルターを使用する必要があります。次に例を示します。

(objectClass=my.package.name.*)

@Neil Bartlettの回答も参照してください。これは、バンドルIDで制約できるため、より簡単な場合があります(知っていると仮定しますが、簡単に見つけることができます)。

プログラムで

ServiceTrackerアプローチを使用します。ニールもこれについてすべて書いたので、彼にもあなたの賛成票を与えるようにしてください:)

于 2012-08-07T15:18:56.873 に答える
1

はるかに、そして私ははるかに、あなたのサービスと何千もの詳細を見る最良の方法は、 Apache Felix Webconsoleを使用してから、 XRayをインストールすることです。このバンドルに関する私の最初2番目のブログを読むことをお勧めします。

于 2013-08-07T06:25:46.577 に答える
0

すでに登録されているが開始されていない特定のサービスを開始するだけで、動的に開始したい場合は、次を使用してバンドルを取得できます。

Bundle bundle = Platform.getBundle("com.example.com.class");

//次にバンドルを開始します

bundle.start();

//サービス参照を確認します

ServiceReference<IExampleService> serviceReference = b.getBundleContext().getServiceReference(IExampleService.class);
于 2015-09-02T09:26:28.090 に答える
0

[APIドキュメント][1]によると、getContext().getAllServiceReferences(clazz, filter)メソッドを呼び出して、指定されたクラスに登録され、指定されたフィルター式に一致するすべてのサービスのリストを取得できます。null両方のパラメーターを渡すと、すべてのサービスが取得されます。

于 2017-07-18T21:00:04.027 に答える