2014-11-05 49 views
0

我有一個關於我的問題的例子。 (文件關節:https://drive.google.com/file/d/0B8ThLrV6-uchaFlTZTNGQ1FnT1E/view?usp=sharingiPOJO和組件ipojo之間的連接

我有3個ipojo部件(3個bunbles):

  • CallHello使用這兩者HelloDelay或HelloComponentReplace

  • HelloDelay和HelloComponentReplace使用HelloService中實現的DelayService服務在HelloPrint中實現的服務。

在部署時,我部署5捆:

  • service.hello.service.jar

  • printer.hello.printer.jar

  • delay.hello。 delay.jar

  • replace.hello.replace.jar

  • call.hello.call.jar

結果:DelayService總是使用在HelloDelay實施。

最後,我運行Main.java來控制HelloDelay和HelloComponentReplace之間的手動選擇。

  • 我實現了一個函數來在Main.java中啓動/停止或卸載/安裝bundle(它運行良好)。但是,HelloDelay或HelloComponentReplace是有效的。

  • 在這兩種情況都有效且有效的情況下,我在iPOJO網站上閱讀,我可以使用「比較器」。但我不明白如何應用'比較'來控制上述兩個組件之間的選擇。這是否改變優先權?我知道我們可以改變bundle的優先級,但是我不知道如何應用到我的文件(Main.java)和iPOJO。

  • 我們可以控制需求組件和許多提供組件(相同的服務或接口)之間的連接(綁定)嗎?

我希望你能在這段時間幫助我的困難。

最好的問候,

回答

0

你可以操縱的服務中使用攔截器綁定:http://felix.apache.org/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/service-binding-interceptors.html

隨着攔截器,你可以隱藏的服務,和/或以強制要使用提供商的服務提供商排序。

+0

謝謝您的回覆。 我可以實現這個攔截器作爲一個獨立的組件,它動態地控制服務綁定操作嗎?我在網上https:// github上閱讀你的鏈接和例子。com/apache/felix我不明白攔截器如何影響現有的bundle(對於需要捆綁服務的更改)。 Regards, – HNT 2014-11-06 11:34:23

+0

攔截器是單獨的組件,因此它們可以獨立於應用程序進行開發和部署。他們使用他們的「目標」屬性來定位「服務依賴」。該屬性是一個LDAP篩選器,用於選擇要處理的依賴關係。例如:(dependency.id = foo)選擇id爲foo的依賴項,while(dependency.specification = org.acme.Foo)選擇需要org.acme.Foo服務接口的所有依賴項。 – Clement 2014-11-08 08:01:12