2013-08-22 17 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的情况下,它可以是正确的解决方案。