OSGi声明性服务 - 在bind方法中获取ServiceReference

时间:2011-09-13 12:37:05

标签: eclipse osgi bind service-reference declarative-services

我正在使用Eclipse 3.7和Eclipse Gemini JPA / DBAccess。我实现了一个引用EntityManagerBuilderFactory的声明式ServiceComponent。 bind方法如下所示:

public void bindEntityManagerFactoryBuilder(EntityManagerFactoryBuilder emfBuilder) {
    emfFactoryBuilders.add(emfBuilder);
}

但是,我需要ServiceReference来获取此服务的属性,例如:

    ServiceReference ref = ...
    String unitName = (String)ref.getProperty(EntityManagerFactoryBuilder.JPA_UNIT_NAME);

我是否必须在ServiceRegistry中搜索此ServiceReference,还是有更优雅的方法?

欢呼声, 缪奇

2 个答案:

答案 0 :(得分:10)

如果您使用的是Declarative Services 1.1(最新的规范版本),则可以将bind方法的签名更改为:

public void bindEntityManagerFactoryBuilder(EntityManagerFactoryBuilder emfBuilder, Map properties)

地图将包含绑定服务的服务属性。

答案 1 :(得分:1)

如果您想访问服务引用对象,可以使用这种方式(1.0和1.1 DSp支持它>

public void bindEntityManagerFactoryBuilder(ServiceReference reference)