繁体   English   中英

Aries管理服务工厂是否也管理物业?

[英]Does Aries managed-service-factory also manage properties?

我在Servicemix 4.3.1中使用Apache Aries 0.2并创建cm:managed-service-factory。 使用.cfg文件创建服务工作正常( #ARIES-584除外),但.cfg文件中的属性不会注入服务对象。 它们确实在ConfigAdmin中正确设置,只是我的bean setter方法永远不会调用我的配置文件中的值。

我以为我应该使用cm:托管属性或类似嵌套在我的托管服务工厂中的东西,但这需要一个单独的pid,所以似乎不对。

如果我没有放入属性标记,则不会设置任何值。 使用属性标记,然后只设置默认值,但从不实际配置文件值。

我找不到任何使用Aries CM子项目的文档,但blueprint-sample.xml除外,它没有显示托管服务工厂内的托管属性。 我一直在尝试使用Servicemix,但是在每个角落都缺少文档,功能损坏或丢失,或者影响核心功能的错误。

springgemini文档都指出他们的托管服务工厂实现也应该作为托管属性。


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;
  }
}

my.msf-1.cfg

name=name1

my.msf-2.cfg

name=name2

System.out的

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

我相信你必须在managed-component元素中添加一行。

<blueprint>
  <cm:managed-service-factory id="myfoo-msf" factory-pid="my.msf" interface="my.IFoo">
    <cm:managed-component class="my.Foo"> 
      <cm:managed-properties persistent-id="" update-strategy="container-managed"/>
      <property name="name" value="default />
    </cm:managed-component>
  </cm:managed-service-factory>
</blueprint>

确实会覆盖cfg文件中的默认值。 如果重要,将调用默认属性值setter,然后使用cfg中的值调用相同的属性setter。

在这种情况下,我使用容器管理更新策略。 但是你可以使用组件管理。

这对我来说似乎有点多余,而且味道很差。 为什么我需要在我的bean中使用空白持久性id设置另一个托管属性,而我已经在上面这样做了? 也许有更好的方法,但这似乎有效。

此外,没有明显的方法可以影响所公布的服务属性。 例如,我们可能希望有一个约定,即以service:x​​xx开头的任何cfg属性都将传递给Service属性。

更新:Apache Aries测试非常有用。 他们可以在这里找到http://aries.apache.org/downloads/currentrelease.html 特别要看一下配置管理的一个,org.apache.aries.blueprint.cm。 在测试文件夹中它有一些例子。 它显示除了上面显示的cm:managed-component中的cm:managed-properties子元素之外,还有一个选项可以在service-properties中包含cm:cm-properties元素。

<service-properties>
    <entry key="key" value="foo3" />
    <cm:cm-properties persistent-id="" update="true"/>
</service-properties>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM