我有一个需要访问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。
答案 0 :(得分:5)
configurationPid
注释上@Component
属性的格式错误。它应该是:
configurationPid = { "my.AConfiguration", "my.BConfiguration" }
这将创建一个包含两个条目my.AConfiguration
和my.BConfiguration
的字符串数组值。相反,您使用过:
configurationPid = "[my.AConfiguration,my.BConfiguration]"
...使用文字值[my.AConfiguration,my.BConfiguration]
创建单个字符串,这几乎肯定不是你想要的。