這是一個biggie。JDBC/OSGi以及如何動態加載驅動程序而不顯式聲明包中的依賴關係?
我有具有原始模塊化結構(所有模塊實現接口還共享相同的類路徑)結構良好的又單片代碼庫。我意識到這種方法的愚蠢以及它在我部署到可能具有不同版本的庫的應用程序服務器時所表示的問題。
我現在正依賴於各地的30瓶和我中途雖然bnding起來。現在我的一些模塊很容易宣告版本化的依賴關係,比如我的網絡組件。他們在JRE和其他BNDded庫中靜態引用類,但是我的JDBC相關組件通過Class.forName(...)實例化並可以使用任意數量的驅動程序之一。
我對服務區打破一切成OSGi包。
- 我的核心類/接口。
- 報告相關組件。
- 數據庫訪問相關組件(通過JDBC)。
- 等....
我希望我的代碼能夠仍然沒有OSGi的通過與我所有的依賴關係,並沒有OSGi的所有(通過JARJAR)一個jar文件裏使用,也可以是模塊化的通過OSGi元數據和粒度束以及依賴信息。
如何配置我的包和 我的代碼,以便它可以 動態地利用在 類路徑和/或OSGi的 容器環境 內的任何驅動程序(菲利克斯/春分的/ etc。)?
是否有運行時方法來檢測我是否在跨容器兼容的OSGi容器(Felix/Equinox等)中運行?
我需要使用不同的類加載機制,如果我在一個OSGi容器?
我是否需要OSGi的類導入到我的項目能夠通過我的數據庫模塊加載在束時間未知的JDBC驅動程序?
我還有第二種獲得驅動程序的方法(通過JNDI,它只適用於在應用程序服務器中運行時),是否需要爲支持OSGi的應用程序服務器更改我的JNDI訪問代碼?
感謝您的信息,尤其是DynamicImport-套餐:*端頭,它令人驚訝的我無法通過互聯網搜索發現。 關於第二個答案,如果你有時間,一個片段可能會很好。無論如何,我會將此標記爲已批准的答案,但請回答我的主要問題。 謝謝。 – Chris 2010-04-30 00:35:49