1

我在 OSGi 中开发时遇到了以下障碍。一组负责持久性的包使用com.mysql.jdbc.Driver由另一个(Springsource EBR 提供的)包提供的类。在另一个包中,我将 Quartz 调度程序库配置为将数据库用作作业存储。这也是使用 MySQL 驱动程序完成的。然而,在运行时,我得到一个ClassNotFoundException. 这很奇怪,因为持久性仍然正常工作。更奇怪的是,当我尝试手动加载类时,使用Class.forName("com.mysql.jdbc.Driver")它是正确加载的,暗示该类确实可以加载。

巧合与否,Drools 似乎也发生了同样的事情……我将一些最新的 Drools jar 重新打包为 OSGi 包,部署它们,然后再次运行时ClassNotFoundException弹出。在这两种情况下,所有供应商捆绑包都会添加到清单中所需的捆绑包中。

这个奇怪的问题是否敲响了警钟?我很高兴听到这件事...

4

1 回答 1

2

这似乎是关于 Equinox 中的类加载的问题。我尝试使用DynamicImport-PackageandEclipse-BuddyPolicy标头修复此问题,但没有太大成功。最终我通过自己将最新版本的 Quartz 重新打包为一个包来解决这个问题,并在包中添加了 MySql jar。这不是最漂亮或最优雅的解决方案,但现在必须这样做。如果有人可以告诉我更多关于类加载的信息,请随时回复!

于 2011-05-03T07:31:05.693 回答