我在 Servicemix 4.3.1 中使用 Apache Aries 0.2 并创建了一个 cm:managed-service-factory。使用 .cfg 文件创建服务可以正常工作(#ARIES-584除外),但 .cfg 文件中的属性不会注入到服务对象中。它们确实在 ConfigAdmin 中正确设置,只是我的 bean setter 方法永远不会被我的配置文件中的值调用。
我在想我应该使用 cm:managed-properties 或类似的东西嵌套在我的托管服务工厂中,但这需要一个单独的 pid,所以看起来不正确。
如果我不放入属性标签,则不会设置任何值。使用属性标签,只设置默认值,而不是实际的配置文件值。
我找不到任何关于 Aries CM 子项目使用的文档,除了blueprint-sample.xml,它不显示托管服务工厂内的托管属性。我真的一直在尝试使用 Servicemix,但在每个角落都缺少文档、损坏或丢失的功能,或者影响核心功能的错误。
spring和gemini文档都表明它们的托管服务工厂实现也应该用作托管属性。
foo.xml:
<blueprint>
<cm:managed-service-factory id="myfoo-msf" factory-pid="my.msf" interface="my.IFoo">
<cm:managed-component class="my.Foo">
<property name="name" value="default />
</cm:managed-component>
</cm:managed-service-factory>
</blueprint>
IFoo.java
package my;
public interface IFoo {
public String getName();
public void setName(String name);
}
Foo.java
package my;
public class Foo implements IFoo {
private String name;
public void setName(String name) {
this.name = name;
System.out.println("name set to: " + name);
}
public String getName() {
return name;
}
}
我的.msf-1.cfg
name=name1
我的.msf-2.cfg
name=name2
系统输出
name set to default
name set to default
配置:proplist
service.pid = my.msf.xxxxxxx-xx-xx-xxxxxxxxxxxxxxx
name = name1
service.factoryPid = my.msf
service.pid = my.msf.yyyyyyy-yy-yy-yyyyyyyyyyyyyyy
name = name2
service.factoryPid = my.msf