Equinoxを実行しているOSGiアプリケーションがあります。アプリケーションが提供するサービスを見たいのですが。これどうやってするの?
5 に答える
gogoシェルタイプから:
inspect cap service
これにより、すべてのバンドルによって登録されたすべてのサービスが表示されます。特定のバンドルのサービスを表示する場合は、次のように入力します。
inspect cap service <id>
<id>
関心のあるバンドルの数値バンドルIDはどこにありますか。
それは、対話的に意味するのか、OSGiシェルを使用するのか、それともアプリケーションからプログラム的に意味するのかによって異なります。
インタラクティブに
Equinoxコンソールを使用できます。「サービス」を参照してください。デプロイしたサービスのみを表示するには、LDAPフィルターを使用する必要があります。次に例を示します。
(objectClass=my.package.name.*)
@Neil Bartlettの回答も参照してください。これは、バンドルIDで制約できるため、より簡単な場合があります(知っていると仮定しますが、簡単に見つけることができます)。
プログラムで
ServiceTrackerアプローチを使用します。ニールもこれについてすべて書いたので、彼にもあなたの賛成票を与えるようにしてください:)
はるかに、そして私ははるかに、あなたのサービスと何千もの詳細を見る最良の方法は、 Apache Felix Webconsoleを使用してから、 XRayをインストールすることです。このバンドルに関する私の最初と2番目のブログを読むことをお勧めします。
すでに登録されているが開始されていない特定のサービスを開始するだけで、動的に開始したい場合は、次を使用してバンドルを取得できます。
Bundle bundle = Platform.getBundle("com.example.com.class");
//次にバンドルを開始します
bundle.start();
//サービス参照を確認します
ServiceReference<IExampleService> serviceReference = b.getBundleContext().getServiceReference(IExampleService.class);
[APIドキュメント][1]によると、getContext().getAllServiceReferences(clazz, filter)
メソッドを呼び出して、指定されたクラスに登録され、指定されたフィルター式に一致するすべてのサービスのリストを取得できます。null
両方のパラメーターを渡すと、すべてのサービスが取得されます。