如何从CQ中的Java读取OSGI工厂配置的单个实例

时间:2015-06-10 08:46:57

标签: java osgi cq5 aem apache-felix

我需要读取OSGi工厂配置的特定子实例。 我相信无法使用出厂配置的Service PID访问它,因此应该有一种方法通过Java引用子配置。

有人可以帮忙提供示例代码或方法吗?

1 个答案:

答案 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);
       }
    }

 }