Java 如何等待blueprint服务被绑定

Java 如何等待blueprint服务被绑定,java,osgi,blueprint,Java,Osgi,Blueprint,我是Blueprint服务的新手,我寻找任何样本来满足在引用侦听器上下文中等待服务启动的要求 我有一个核心包,它提供一些内核服务(db、网络等),我用如下接口(blueprint.xml)将其包装起来: 其目的是,在消费者捆绑包中,我可以轻松地使用ServiceHolder.getInstance().getService()来利用该服务 问题是,有时在bundle启动的初始阶段或服务注册之前需要该服务。显然,当调用getService()时,我会得到一个null 当bundle启动时,使用bl

我是Blueprint服务的新手,我寻找任何样本来满足在引用侦听器上下文中等待服务启动的要求

我有一个核心包,它提供一些内核服务(db、网络等),我用如下接口(blueprint.xml)将其包装起来:

其目的是,在消费者捆绑包中,我可以轻松地使用
ServiceHolder.getInstance().getService()
来利用该服务

问题是,有时在bundle启动的初始阶段或服务注册之前需要该服务。显然,当调用getService()时,我会得到一个null


当bundle启动时,使用blueprint来满足服务需求的最佳实践是什么?我想我可以使用
while(service==null){Thread.sleep(5000)}我想说您不需要这个
服务持有者
。OSGi服务注册表是容器的主“服务持有者”。拥有
后,您可以将该ref注入任何试图使用
服务持有者的消费者中。容器将为您接收订单。

谢谢,我想我应该将我的服务注入到实际的业务逻辑中,它将等待服务启动并运行,然后继续执行。多谢。
<bean id="ServiceImplBean" class="com.mysite.service.impl.ServiceImpl" factory-Method="getInstance"/>
<service id="MyServiceInterface" ref="ServiceImplBean" interface="com.mysite.service.IService"></service>
<bean id="ServiceHolderBean" class="com.mysite.consumer.ServiceHolder" factory-method="getInstance" />
<reference id="ServiceHolderBeanReference" interface="com.mysite.service.IService">
    <reference-listener ref="ServiceHolderBean" bind-method="bind" unbind-method="unbind" />
</reference>
public class ServiceHolder {
    private static ServiceHolder instance = new ServiceHolder();
    private IService service;

    private ServiceHolder() {
    }

    public static ServiceHolder getInstance() {
        return instance;
    }

    public void bind(IService service) {
        this.service = service;
    }

    public void unbind(IService service) {
        this.service = null;
    }

    public IService getService() {
        return this.service;
    }
}