2015-09-08 67 views
2

我對OSGI軟件包部署有疑問。軟件包部署順序

我有7個捆綁包,我需要在嚴格的順序部署,否則我沒有發現類錯誤。部分軟件包用作靜態庫,其中一部分導出OSGI服務。

在OSGI應用程序中,通常如何解決這個問題?

回答

4

這個問題解決了沒有解決它(至少,不像你問的方式)。

即:沒有必須以嚴格順序安裝/啓動的軟件包!這意味着你的包的設計非常糟糕。相反,請更改捆綁包,以便它們可以以任何順序啓動。

如果您遇到困難,請修改您的問題,以便我們瞭解爲什麼您認爲您需要開始訂購。

0

我同意Neil Bartlett提到的最好的方法是避免它。但是,有時需要訂購捆綁包的開始。即使使用Equinox或Felix,您也可以使用bundle start-level。它將確保您的捆綁包將以特定順序啓動。

「開始級別與每個包相關聯,起始級別是一個正整數值,它控制激活/啓動包的順序,啓動級別較低的包在具有較高起始級別的包之前啓動。因此,啓動級別爲1的bundle首先啓動,屬於內核的bundle往往具有較低的啓動級別,因爲它們提供了運行大多數其他bundle的先決條件。「 - Red Hat JBoss Fuse Documentation

希望它有幫助。

+0

使用開始級別不會阻止您遇到問題。起始級別內的啓動順序未定義,您不能中斷循環。 –

2

如果我正確理解你的問題,它只是提供正確的依賴關係鏈由OSGi解決的問題。
您的圖書館應該導出您的服務將導入的軟件包。

如果BundleA需要來自BundleBOtherBundle,加入Import-Package並在所有束的MANIFEST.MF Export-Package元數據類應該是足夠的。

BundleA MANIFEST.MF

進口包裝:my.required.package.from.b,other.package.in.b,other.package

BundleB MANIFEST.MF

export-package:my.required.package.from.b,other.package.in.b

OtherBundle MANIFEST.MF

出口型包裝:其他。包

然後安裝所有包,它們將在INSTALLED狀態。開始主要的(本例中爲BundleA)。 OSGi將解決所有依賴關係(只是要小心不要有周期),捆綁將會以RESOLVED狀態(依賴關係可用)和ACTIVE關聯。您可以輕鬆配置maven-bundle-plugin這樣的工具。

另外這個問題What is the natural start order for package-dependent OSGI bundles可能是有用的。