2013-08-22 19 views
0

我嘗試連接到我的MySQL數據庫,但Class.forname()的正常方式不起作用,因爲OSGI的Class Loader Hirachie。我不知道該怎麼做。如何設置與OSGI的MySQL數據庫連接?

+0

請閱讀:http://www.liquid-reality.de/display/liquid/2012/01/13/Apache+Karaf+Tutorial+Part+6+-+Database+Access – Namphibian

回答

0

在OSGi中,一個bundle的類加載器只能看到這個bundle在其清單中顯式導入的包。因此,Class.forname不適用於未導入的包。

直接的解決方案是在com.mysql.jdbc包的清單中添加一個Import-Package標頭。如果你試圖加載(例如)com.mysql.jdbc.Driver,它會起作用。

爲JDBC驅動程序添加顯式導入包會導致無需更改導入包頭即可切換驅動程序。爲此,您可以考慮使用DynamicImport-Package:*。這將允許捆綁包在捆綁佈線之後找到類。請注意,在大多數情況下,這絕不應該使用,因爲現在您已經回到了運行時加載類加載異常的可能性,OSGi通常會爲您預防這些異常。在JDBC的情況下,它可以是正確的解決方案。