次のテストコードがあります。これは、テストサービスを登録し、登録を解除する必要があります。 Eclipse 4.5.2 Mail-Demoアプリケーションでテストしました。問題は、サービスが登録解除されていないこと、サービスの2番目の呼び出しがnullでないことです。OSGiサービスの登録を解除する方法
BundleContext bundleContext = Activator.getDefault().getBundle().getBundleContext();
ServiceRegistration<ITestService> registration = bundleContext.registerService(ITestService.class, new TestService(), null);
ServiceReference<ITestService> serviceReference = bundleContext.getServiceReference(ITestService.class);
bundleContext.ungetService(serviceReference);
serviceReference = bundleContext.getServiceReference(ITestService.class);
System.out.println("should be null but is not: " + serviceReference);
これは私が得る出力されます:
should be null but is not: {unregister.osgiservice.ITestService}={service.id=172, service.bundleid=8, service.scope=singleton}
私が正しくサービスの登録を解除するにはどうすればよいですか?
編集:
私がServiceRegistration.unregister()
を見つけた場合は、サービスを登録していない下のコードを追加してください。どのサービスが登録されている別の場所からServiceRegistration
を取得するには、次の質問が表示されますか?
registration.unregister();
serviceReference = bundleContext.getServiceReference(ITestService.class);
System.out.println("now the service is null: " + serviceReference);
出力:
should be null but is not: {unregister.osgiservice.ITestService}= service.id=174, service.bundleid=8, service.scope=singleton}
now the service is null: null
これは本当に非常に悪いです。パッケージ内に「内部」があるものはEclipse APIの一部ではなく、いつでも変更することができます。 –
はい、私はそれを認識しており、より良い方法を見つけることはできませんでした。私のユースケースでは、これは仕事です。 –
非常に悪いことに、私たちはある日失敗してしまい、oherフレームワークの使用を禁止しています。 –