簡體   English   中英

一致導入第三方庫的OSGi

[英]Consistent OSGi import of 3rd party libraries

我一直在開發OSGi模塊,但是到目前為止,當我不得不包裝現有的jar時,我遇到了許多問題。 這方面的一個示例是使用Oracle數據庫驅動程序,即使我將jar打包為捆綁包,它也拒絕工作(即使存在驅動程序類,也無法找到)。 這僅是一個示例,但是我與其他第三方庫存在問題,並且想知道是否存在每次都能使用的最佳方法來使用第三方庫?

傑洛夫

我的首選方法不是包裝庫,而是解壓縮它,添加清單,然后重新打包。 Jars-inside-jars往往會導致難以調試的問題。 可以使用簡單的ant腳本自動執行Unjar和re-jar。

另外,我喜歡手動編寫MANIFEST.MF。 如果要包裝的庫很小,那么這樣做很容易。 像bnd這樣的為您生成MANIFEST.MF的工具並不總是能給出正確的結果,如果您過多地依賴它們,您將不知道到底發生了什么。

您遇到的問題是jdbc使用Java運行時中的類來查找數據庫驅動程序(DriverManager.getConnection)。 由於無法從系統類加載器(已加載DriverManager類)訪問數據庫驅動程序,因此無法使用該功能。

OSGi中一種有效的方法是改用DataSource: http : //docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html 在這里,您只需使用new創建數據源,這當然可以工作。 問題在於它使您的用戶捆綁包依賴於特定的數據庫驅動程序。 因此,最佳實踐是集中創建DataSource並將其作為服務發布。

您可以在我的Apache Karaf數據庫教程( http://www.liquid-reality.de/display/liquid/2012/01/13/Apache+Karaf+Tutorial+Part+6+-+Database+Access)中找到更多詳細信息)。

順便說一句。 通常,這種工廠通常在OSGi中庫失敗的地方。 每個庫都發明了另一個不同的工廠系統,並且大多數與OSGi的受限類加載器不兼容。 幸運的是,如今大多數庫都可以使用OSGi。 大多數情況下,這僅意味着您還可以使用可以使用OSGi服務檢索的具體對象來調用工廠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM