2009-11-30 32 views

回答

3

鑑於加載機制基本上與URL一起工作,我建議 嘗試一個自定義的URL處理程序。從邏輯上講,您需要在使用此處理程序加載任何包之前加載並激活它,否則我認爲它應該起作用。

請參閱「R4處理器服務規範」,R4 OSGi核心規範。

Glassfish is using this approach to install webapp bundles btw。

0

您可以隨時將它們從數據庫(或其他)下載到某個本地位置,然後將它們動態安裝到OSGi框架中。你需要給這個框架的是該包的文件系統路徑。當然,你必須自己編寫所有的膠水代碼。另一方面,如果您使用的是Eclipse P2,則可能需要更多的靈活性,這要歸功於自動配置。

+0

這似乎不雅,我寧願跳過臨時目錄的東西,並自己加載罐子。但我無法找到回調,因此容器會在需要加載所需的依賴項時通知我。 – 2009-12-01 03:53:45

1

看一看的PAX URL項目:http://wiki.ops4j.org/display/paxurl/Documentation

演示的加載從它是如何存儲在OSGi包的關注點分離。理論上,我沒有看到使用數據庫作爲捆綁存儲的任何主要障礙,但我也沒有看到任何明顯的優勢。

在捆綁版本上,您需要一些機制來確定要加載的捆綁包(和版本)。你會將這些包與版本信息一起存儲在數據庫中,否則你將如何存儲相同包的不同版本?

+0

確切地說,我怎麼知道哪些捆綁包是必需的,沒有官方的回調可以用來自己解決捆綁包。 – 2009-12-04 04:27:14

+0

你不需要任何回調。想想看,OSGi運行時如何引導?您需要一些機制來加載最初的一組軟件包。你不會說你正在使用哪個OSGi容器,但是如果你在Eclipse安裝目錄中進行挖掘,你會發現一個config.ini文件,它執行引導。 – SteveD 2009-12-04 07:45:33

+0

即使我在Equinox中查看config.ini,然後需要檢查諸如必需包和導入語句之類的頭文件以確定要加載的包。它不是一個真正的回調,當它嘗試加載一個包時,容器調用它。 – 2010-01-03 10:30:34

2

一個簡單的解決方案是創建自己的引導程序包,它將從數據庫(或其他位置)提供所有其他包。 OSGi允許您從任意InputStream安裝捆綁軟件,因此無論您需要什麼源代碼(例如JDBC),都可以很容易地將其插入。

有關更多詳細信息,請參見BundleContext.installBundle()方法。

由於自動依賴關係管理(ala Maven)不是核心OSGi功能的一部分,因此您不應該尋找「回調」,通過該回調,框架會通知您「何時需要加載所需的依賴項」通過使用像OBR這樣的服務來實現)。

+0

嗯,我希望每當系統在加載一個包時發現一個「導入包」或「所需包」標頭時,會調用一個回調函數。 – 2009-12-05 21:18:03

+0

這並不容易,特別是當您考慮碎片化的捆綁包等時。您可能會看看Packacge Admin Service。 – akr 2010-01-28 12:23:28

相關問題