OSGI - 按服务ID查找捆绑引用

时间:2015-02-19 20:02:19

标签: java osgi blueprint-osgi

我正在使用一个引用侦听器,在我的侦听器方法中使用Service,Dictionary参数。

Dictionary有一个service.id,然后我需要拥有该服务的Bundle。

我的问题是,拥有服务和服务ID,如何获得Bundle对象。

示例:

<reference-listener
            bind-method="bindFormProcessor"
            unbind-method="unbindFormProcessor"
            ref="mainSvc"
            >

    </reference-listener>

我的Java方法

public void bindFormProcessor(IFormProcessor formProcessor,Dictionary dictionary) {
    try {
        Bundle bundle = OsgiUtil.getBundleByObject(dictionary.get("service.id"));
        logger.info("************************ GOOOAAL " + bundle.getSymbolicName());
        //Now, I have the bundle of my Service
    } catch (Exception e) {
        e.printStackTrace();
    }

}

此致

1 个答案:

答案 0 :(得分:2)

您可以将ServiceReference定义为bind方法的参数。通过使用它,您可以获得提供服务的包。

如果您不想将ServiceReference定义为参数类型(无论出于何种原因),您可以使用以下代码获取它:

ServiceReference serviceRef = bundleContext.getServiceReferences(IFormProcessor.class, "(service.id=" + serviceId + ")");
相关问题