0

我尝试连接到我的 MySQL 数据库,但由于 OSGI 的 Class Loader Hirachie,使用 Class.forname() 的正常方式不起作用。我不知道该怎么做。

4

2 回答 2

0

查看 Pax JDBC:https ://ops4j1.jira.com/wiki/display/PAXJDBC/MySQL+Driver+Adapter

这将为 MySQL 数据库注册一个 DataSourceFactory,然后您可以使用它来创建 DataSource。见http://www.osgi.org/javadoc/r4v42/org/osgi/service/jdbc/DataSourceFactory.html

我认为 Pax JDBC MySql 驱动程序有一些限制,它没有完全实现规范,所以请仔细阅读说明。

于 2013-08-23T06:44:01.447 回答
0

在 OSGi 中,bundle 的类加载器只能看到由该 bundle 在其清单中显式导入的包。因此 Class.forname 不适用于未导入的包。

直接的解决方案是在 com.mysql.jdbc 包的清单中添加 Import-Package 标头。如果您尝试加载(例如)com.mysql.jdbc.Driver,它将起作用。

为 JDBC 驱动程序添加显式的 Import-Packages 将使得在不更改 import-package 标头的情况下切换驱动程序是不可能的。为此,您可以考虑使用 DynamicImport-Package: *. 这将允许捆绑包在捆绑包连接后找到类。请注意,在大多数情况下,永远不应该使用它,因为现在您又回到了 OSGi 通常为您阻止的运行时类加载异常的可能性。但是,对于 JDBC,它可能是正确的解决方案。

于 2013-08-25T20:30:15.150 回答