2013-05-30 170 views
1

運行的擴展是否有可能運行同時兩個版本的延伸與擴展點的OSGi應用程序?不同版本同時

這是我想達到什麼:
我有一個擴展點Foo和與符號名酒吧和1.0.0版本的模塊插入到模塊A和模塊B的擴展點和運行(即實例化) 。然後,我安裝了一個新的擴展程序包,其中包含一個bug修復程序,symbolicName Bar和版本1.0.1。我只想在模塊B中運行這個新版本,所以模塊A仍然使用Bar v1.0.0,模塊B現在使用Bar v1.0.1。

從我所看到的,因爲擴展需要一個單身所以不可能有相同的符號名稱的兩個版本是不可能的。因此,我們當前的解決方案是讓符號名稱包含版本:符號名稱 Bar_1_0_0和符號名稱 Bar_1_0_1。這樣做,我們可以獨立並且同時運行每個模塊中的每個版本,因爲它們是技術上無關的包,只是碰巧插入相同的擴展點。

但是,將版本放在符號名稱中似乎是錯誤的做法。這可以在不改變符號名稱的情況下完成嗎?我錯過了什麼嗎?

+0

「他們是技術上無關的捆綁」......好吧,他們不是,他們是同一捆綁的兩個版本。 –

+0

@Neil,因爲他們有不同的符號名稱osgi可能知道他們包含相同的代碼,只是不同的版本?兩個真正不相關的bundle之間的唯一區別是它們的符號名稱,所以如果一個bundle的兩個確切副本有兩個不同的符號名稱,osgi如何知道? – Hilikus

+0

你說得對,OSGi將它們視爲不同的捆綁包。我認爲將它們稱爲「無關」是一種延伸,因爲它們實際上是相同的,除了BSN之外。 –

回答

2

你不會錯過任何東西。 Eclipse擴展系統(plugin.xml)僅適用於單件包,這意味着多個版本不能同時處於活動狀態。要擁有非單身擴展名,您必須使用不同的擴展系統。我知道OSGi服務可以處理這種情況。可能想看看OSGi規範。

+0

我同意,離開了Eclipse擴展點,並採用純OSGi服務 – Cristiano