我需要提供一個自定義ClassLoader嗎?大聲思索這似乎不是正確的方法,因爲在類加載器中不知道所需的版本。我想從數據庫或其他來源加載我的OSGI jar文件
回答
鑑於加載機制基本上與URL一起工作,我建議 嘗試一個自定義的URL處理程序。從邏輯上講,您需要在使用此處理程序加載任何包之前加載並激活它,否則我認爲它應該起作用。
請參閱「R4處理器服務規範」,R4 OSGi核心規範。
Glassfish is using this approach to install webapp bundles btw。
您可以隨時將它們從數據庫(或其他)下載到某個本地位置,然後將它們動態安裝到OSGi框架中。你需要給這個框架的是該包的文件系統路徑。當然,你必須自己編寫所有的膠水代碼。另一方面,如果您使用的是Eclipse P2,則可能需要更多的靈活性,這要歸功於自動配置。
看一看的PAX URL項目:http://wiki.ops4j.org/display/paxurl/Documentation
演示的加載從它是如何存儲在OSGi包的關注點分離。理論上,我沒有看到使用數據庫作爲捆綁存儲的任何主要障礙,但我也沒有看到任何明顯的優勢。
在捆綁版本上,您需要一些機制來確定要加載的捆綁包(和版本)。你會將這些包與版本信息一起存儲在數據庫中,否則你將如何存儲相同包的不同版本?
確切地說,我怎麼知道哪些捆綁包是必需的,沒有官方的回調可以用來自己解決捆綁包。 – 2009-12-04 04:27:14
你不需要任何回調。想想看,OSGi運行時如何引導?您需要一些機制來加載最初的一組軟件包。你不會說你正在使用哪個OSGi容器,但是如果你在Eclipse安裝目錄中進行挖掘,你會發現一個config.ini文件,它執行引導。 – SteveD 2009-12-04 07:45:33
即使我在Equinox中查看config.ini,然後需要檢查諸如必需包和導入語句之類的頭文件以確定要加載的包。它不是一個真正的回調,當它嘗試加載一個包時,容器調用它。 – 2010-01-03 10:30:34
一個簡單的解決方案是創建自己的引導程序包,它將從數據庫(或其他位置)提供所有其他包。 OSGi允許您從任意InputStream
安裝捆綁軟件,因此無論您需要什麼源代碼(例如JDBC),都可以很容易地將其插入。
有關更多詳細信息,請參見BundleContext.installBundle()
方法。
由於自動依賴關係管理(ala Maven)不是核心OSGi功能的一部分,因此您不應該尋找「回調」,通過該回調,框架會通知您「何時需要加載所需的依賴項」通過使用像OBR這樣的服務來實現)。
嗯,我希望每當系統在加載一個包時發現一個「導入包」或「所需包」標頭時,會調用一個回調函數。 – 2009-12-05 21:18:03
這並不容易,特別是當您考慮碎片化的捆綁包等時。您可能會看看Packacge Admin Service。 – akr 2010-01-28 12:23:28
- 1. 我想unnet其他數組來查詢的Postgres數據庫
- 2. 我想從其他控制器文件加載新的FXML文件
- 3. Mahout使用其他數據(評級)來源比txt文件或數據庫
- 4. 我想從屬性文件添加源
- 5. 在MySQL數據庫我想如果其他條件
- 6. 我想從其他活動
- 7. 從其他JAR添加映射資源
- 8. 我怎樣才能用Zend_Http_Client或其他庫下載文件
- 9. 停止或崩潰我的瀏覽器,當我從數據庫加載數據
- 10. 我們如何從laravel 5的config文件夾的app.php中的數據庫或其他文件訪問數據
- 11. 從數據庫中加載高位數據數據來源:
- 12. 要添加其他數據庫或不添加其他數據庫,即questionn
- 13. 從JAR或文件系統加載ImageIcon
- 14. 我想從文本視圖中加載數據從MySQL
- 15. 我可以在我的數據庫中添加其他表嗎?
- 16. 來自其他項目的來源文件,其中來源
- 17. 我想從mysql加載我的數據到sqlite
- 18. 我是否需要使用PreferenceActivity或數據庫或其他?
- 19. 從數據庫或其他來源檢索電話號碼到AddBlockingEntry
- 20. 我想從我的數據庫中顯示孟加拉語言
- 21. 我想其中date = jdatechooser從數據庫中提取數據:
- 22. 我可以從數據庫或字符串加載ITemplate嗎?
- 23. RequireJS加載資源我不想
- 24. 從jar加載庫
- 25. 我想將我的庫.so文件轉換爲android項目的.jar文件。
- 26. 從文本文件加載數據庫
- 27. 如何使用CodeIgniter添加AJAX來從數據庫加載我的數據
- 28. 從jar中的資源文件夾加載文件
- 29. 我想從值從數據庫
- 30. 點擊DIV,從其他div上的數據庫加載內容
這似乎不雅,我寧願跳過臨時目錄的東西,並自己加載罐子。但我無法找到回調,因此容器會在需要加載所需的依賴項時通知我。 – 2009-12-01 03:53:45