我需要读取OSGi工厂配置的特定子实例。 我相信无法使用出厂配置的Service PID访问它,因此应该有一种方法通过Java引用子配置。
有人可以帮忙提供示例代码或方法吗?
答案 0 :(得分:0)
以下是一个例子。 " WSConnection"是一个OSGI配置,我们可以配置多个配置。并且助手课程将帮助您选择您想要的那个。 " configuration.id"是每个OSGI配置的属性之一。如果您需要更多详细信息,请与我们联系。
@Service(value = WSConnection.class)
@Component(immediate = true, label = "WS Factory", description = "WS
Connection Factory", configurationFactory = true, policy =
ConfigurationPolicy.REQUIRE, metatype = true)
@Properties({
@Property(name = "configuration.id", value = "", label = "Configuration ID", description = "Configuration ID to reference this configuration")
})
public class WebServiceConnection {
....
....
}
public class WSHelper extends WCMUse {
...
...
@Override
public void activate() throws Exception {
setProperties();
}
private void setProperties() {
BundleContext bundleContext = FrameworkUtil.getBundle(WSConnection.class).getBundleContext();
ServiceReference configurationAdminReference = bundleContext.getServiceReference(ConfigurationAdmin.class.getName());
if (configurationAdminReference != null) {
ConfigurationAdmin confAdmin = (ConfigurationAdmin) bundleContext.getService(configurationAdminReference);
try {
Configuration conf[] = confAdmin.listConfigurations("("+ConfigurationAdmin.SERVICE_FACTORYPID+"="+WSConnection.class.getName()+")");
for (Configuration c : conf){
Dictionary<String,Object> props = c.getProperties();
this.configurationId = props.get("configuration.id").toString();
break;
}
}
} catch (Exception e) {
log.error("Error getting Web Service URL", e);
}
}
}