如何向其消费者提供与OSGi声明服务相同的对象?

时间:2013-05-06 06:46:59

标签: java maven osgi equinox declarative-services

我有一个场景,我需要在OSGi应用程序的几个包中公开作为声明式服务的相同对象。更具体地说,有一个类暴露为声明服务(Service1)。有几个服务消费者。我正在使用maven-scr-plugin来生成SCR描述符。服务使用者可以像这样引用服务接口。

@Reference(name = "Service1",bind = "bindService1",
      unbind = "unbindService1", policy = ReferencePolicy.STATIC)
ServiceInterface1 service1;

protected void bindService1(ServiceInterface1 service1) {
    this.service1 = service1;
}

protected void unbindService1(ServiceInterface1 service1) {
    this.service1 = null;
}

此服务提供程序(Service1)是另一个服务(Service2)的服务使用者。所以Service1也会引用Service2。

@Service
@Component(immediate = true, name = "Service1")
public class Service1 implements ServiceInterface1{

    @Reference(name = "Service2",bind = "bindService2",
      unbind = "unbindService2", policy = ReferencePolicy.STATIC)
    ServiceInterface2 service2;

    protected void bindService2(ServiceInterface2 service2) {
        this.service2 = service2;
    }

    protected void unbindService2(ServiceInterface2 service2) {
        this.service2 = null;
    }
}

这就是我的Service2的样子

@Service
@Component(immediate = true, name = "Service2")
public class Service2 implements ServiceInterface2 {
    .....
}

我遇到的问题是我可以看到Service1和服务使用者的绑定方法是由OSGi容器调用的,但绑定到服务使用者中的引用service1的对象没有初始化其service2引用。这意味着当我从服务使用者使用service1对象时,我得到一个Null Pointer Exception,因为service1对象中没有service2对象。 绑定到service1的对象与OSGi容器用于绑定引用service2的对象不同。我想要在所有服务使用者中使用相同的对象。这可以解决吗?

0 个答案:

没有答案