同一组件中的几个配置(@ Meta.OCD接口)

时间:2017-12-22 04:11:39

标签: configuration liferay osgi liferay-7

我有一个需要访问AConfiguration和BConfiguration的组件MyComponent:

my.MyComponent:

[u'-83.6514766', u'67.0234192']

my.AConfiguration:

-83.6514766

my.BConfiguration:

@Component(
    configurationPid = "[my.AConfiguration,my.BConfiguration]"
)
public class MyComponent {
    @Activate
    @Modified
    protected void activate(Map<String, Object> properties) {
        _aConfiguration = ConfigurableUtil
            .createConfigurable(AConfiguration.class, properties);
        _bConfiguration = ConfigurableUtil
            .createConfigurable(BConfiguration.class, properties);
    }

    public void hello() {
        System.out.println("A:" + _sConfiguration.valueA());
        System.out.println("B:" + _sConfiguration.valueB());
    }
}

问题:使用Liferay的配置界面将valueA和valueB配置为@Meta.OCD( id = "my.AConfiguration" ) public interface AConfiguration { @Meta.AD(deflt = "6") public long valueA(); } 无效,@Meta.OCD( id = "my.BConfiguration" ) public interface BConfiguration { @Meta.AD(deflt = "6") public long valueB(); } 仍会看到默认值7

我做错了什么? 使组件使用来自多个配置界面的配置信息的正确方法是什么?

使用案例:我的组件执行一些业务处理并将结果保存到远程服务器。有一个配置界面包含业务处理设置,一个配置界面包含远程服务器的URL。

1 个答案:

答案 0 :(得分:5)

configurationPid注释上@Component属性的格式错误。它应该是:

configurationPid = { "my.AConfiguration", "my.BConfiguration" }

这将创建一个包含两个条目my.AConfigurationmy.BConfiguration的字符串数组值。相反,您使用过:

configurationPid = "[my.AConfiguration,my.BConfiguration]"

...使用文字值[my.AConfiguration,my.BConfiguration]创建单个字符串,这几乎肯定不是你想要的。