![](/img/trans.png)
[英]How to create configuration for Managed Service Factory with Karaf features?
[英]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,但是在每個角落都缺少文檔,功能損壞或丟失,或者影響核心功能的錯誤。
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;
}
}
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:xxx開頭的任何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.