簡體   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