0

RAP アプリケーションでosgi-jax-rs-connectorを構成しようとしています。

README には、構成に Configuration Admin Service を使用するように記載されています。

ServiceReference caRef = context
    .getServiceReference(ConfigurationAdmin.class.getName());

null上記のコードは、常にServiceReference. ConfigurationAdmin への参照を取得する正しい方法は何ですか。前に別のバンドルを開始する必要がありますか?

4

2 に答える 2

1

Equinox を実行している場合は、Config Admin バンドル (org.eclipse.equinox.cm) がインストールされ、開始されていることを確認してください。

于 2013-08-07T14:45:19.553 に答える
1

この方法で ServiceReference を取得しようとすると、災害に備えることになります。このコードは、OSGi で発生するケースの 99% を処理できません: 構成管理者がそこにいない可能性がある、構成管理者バンドルがあなたの後に開始される、構成管理者バンドルが別の開始レベルにある、構成管理者バンドルが停止する、構成管理者が更新されます。コア OSGi API は非常に強力で、多くのミドルウェアで使用されていますが、基礎となるモデルを十分に理解する必要があり、エラーが発生しやすいため、アプリケーション コードには使用しないでください。

最も簡単で信頼性の高いソリューションは、Declarative Services (DS) とアノテーションを使用することです。

 @Component
 public class MyClass implements MyService {
    ConfigurationAdmin ca;
    @Reference void setCA(ConfigurationAdmin ca) { this.ca = ca; }

    public void doMyService() {
       // ... you can safely use ca
    }
 }

そして Gunnar は正しいかもしれません。そもそも Configuration Admin サービスをインストールしていないのかもしれません。ただし、現在のスニペットを使用すると、コードは別のときに爆発します。

于 2013-08-08T07:35:32.740 に答える