2014-10-09 61 views
1

一個ManagedServiceFactory的註冊如下是可以做到: -ManagedServiceFactory使用藍圖

private ServiceRegistration factoryService; 
public void start(BundleContext context) { 
    Dictionary props = new Hashtable(); 
    props.put("service.pid", "test.smssenderfactory"); 
    factoryService = context.registerService(ManagedServiceFactory.class.getName(), 
     new SmsSenderFactory(), props); 
} 

如何才能做到這一點的藍圖(樣品的例子是非常有用的)?

回答

0

Apache aries支持託管服務。您可以在https://svn.apache.org/repos/asf/aries/trunk/blueprint/blueprint-itests/src/test/resources/ManagedServiceFactoryTest.xml的Apache Aries藍圖集成測試中找到示例。在這種情況下,可以將您的SMSSenderFactory的代碼更改爲不執行ManagedServiceFactory,因爲藍圖會爲您執行此操作。

如果這是您的問題,您也可以將您的代碼(您在問題中作爲示例給出的代碼)嵌入到您的bean的init方法中。在這種情況下,ManagedServiceFactory應該在bean的destroy方法中註銷。

第三種選擇是將藍圖退出遊戲。你已經有了一個ManagedServiceFactory實現,你爲什麼不簡單地將它註冊到Bundle的Activator中?

第四個選項是使用Declarative Services與其中一個註釋集合。在這種情況下,Metatype信息也會生成,您可以通過webconsole配置您的SMSSender。

我建議你使用最後一個選項。