2012-09-18 83 views
2

我有一個有兩個實現的接口。我想將這兩個實現都公開爲OSGi服務,但是當我這樣做時會覆蓋另一個。請發現我做的配置:將接口的多個實現公開爲OSGI服務

<bean id="formService" class="com.dbt.form.service.FormService"/> 
<bean id="formAPIService" class="com.dbt.form.service.FormAPIService"/> 
<osgi:service 
    ref="formAPIService" 
    interface="com.dbt.form.service.ifc.IFormService"/> 
<osgi:service 
    ref="formService" 
    interface="com.dbt.form.service.ifc.IFormService" /> 

這裏formServiceformAPIService實現覆蓋。

請幫我解決這個問題。

回答

8

第二項服務不會覆蓋第一項服務......這兩項服務將分開發布,您可以通過在OSGi Gogo shell中鍵入inpect cap service命令來確認這一點。

可能發生的事情是您的客戶代碼只會選擇其中一個可用的服務實例。在這種情況下,您需要編寫消費者以綁定到所有實例,或者使用排名組合或目標過濾器來確定您想要的特定服務。您應該提供更多關於您如何使用這些服務的信息,因爲這是問題所在(可能)。

3

閱讀本頁... Chapter 8. The Service Registry第8.2.2.3節。

您可以使用bean-name屬性osgi 參考標記。導入服務時bean-name指的是該服務在導出時的id屬性。

相關問題