現在、実行中の Service Factory を含む単純なバンドルを取得しようとしています。
これは私のファクトリークラスです:
public class SvcFactory implements ServiceFactory<ServiceB> {
@Override
public ServiceB getService(Bundle bundle,
ServiceRegistration<ServiceB> registration) {
return new ServiceBImpl();
}
@Override
public void ungetService(Bundle bundle, ServiceRegistration<ServiceB> registration,
ServiceB service) {
}
}
これは、ファクトリによって作成される必要がある私のサービスです。
public class ServiceBImpl implements ServiceB {
private ServiceA svcA;
public void setA(ServiceA a) {
svcA = a;
}
}
そして最後に OSGI-INF/component.xml
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="bundleb.internal.SvcFactory">
<implementation class="bundleb.internal.SvcFactory"/>
<reference bind="setA" cardinality="1..1" interface="bundlea.ServiceA" name="ServiceA" policy="static"/>
<service servicefactory="true">
<provide interface="bundleb.ServiceB"/>
</service>
</scr:component>
equinox 内でテスト バンドル (A、B、および C) を実行すると、次のエラーが発生します。
org.osgi.framework.ServiceException: org.eclipse.equinox.internal.ds.FactoryReg.getService() returned a service object that is not an instance of the service class bundleb.ServiceB
インターネット上のコンポーネント定義で宣言された ServiceFeactories の使用に関する情報はあまり見つかりません。「OSGi and Equinox」という本でさえ、OSGi の使用についてはあまり教えてくれませんでした。誰かが私が間違っていることを説明してもらえますか?