首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >白羊座管理服务工厂也管理物业吗?

白羊座管理服务工厂也管理物业吗?
EN

Stack Overflow用户
提问于 2011-10-21 15:13:27
回答 1查看 2.2K关注 0票数 6

我在Servicemix 4.3.1中使用Apache 0.2,并创建一个cm:托管服务-工厂。使用.cfg文件创建服务很好(除了白羊座-584),但是.cfg文件中的属性不会被注入服务对象。它们确实在ConfigAdmin中得到了正确的设置,只是我的bean setter方法从未被调用过我的配置文件中的值。

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

如果我不放入属性标记,那么任何值都不会被设置。使用属性标记,则只设置默认值,但不设置实际的配置文件值。

除了blueprint-sample.xml之外,我找不到任何使用白羊座CM子项目的文档,它不显示托管服务工厂中的托管属性。我一直在尝试使用Servicemix,但是在每个角落都有缺少的文档、破损或缺失的特性,或者影响核心功能的but。

春天双子座文档都表明,它们的托管服务工厂实现也应该充当托管属性。

foo.xml:

代码语言:javascript
复制
<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

代码语言:javascript
复制
package my;
public interface IFoo {
  public String getName();
  public void setName(String name);
}

Foo.java

代码语言:javascript
复制
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

代码语言:javascript
复制
name=name1

my.msf-2.cfg

代码语言:javascript
复制
name=name2

System.out

代码语言:javascript
复制
name set to default
name set to default

配置:proplist

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2014-10-20 03:23:34

我相信您必须在托管组件元素中增加一行。

代码语言:javascript
复制
<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文件中的任何内容,默认值都将被覆盖。如果这很重要,将调用默认的属性值设置程序,然后调用来自cfg的相同的属性设置器。

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

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

此外,也没有明显的方式影响所广告的服务属性。例如,我们可能希望有一个约定,即以service:xxx开头的任何cfg属性都将传递给服务属性。

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

代码语言:javascript
复制
<service-properties>
    <entry key="key" value="foo3" />
    <cm:cm-properties persistent-id="" update="true"/>
</service-properties>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7851493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档