この方法で 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 サービスをインストールしていないのかもしれません。ただし、現在のスニペットを使用すると、コードは別のときに爆発します。