我在OSGi开发过程中遇到了以下障碍。负责持久性的一组bundle使用另一个(Springsource EBR provisioned)包提供的com.mysql.jdbc.Driver
类。在另一个包中,我正在配置Quartz调度程序库以将数据库用作jobstore。这也是使用MySQL驱动程序完成的。然而,在运行时,我得到ClassNotFoundException
。这很奇怪,因为持久性仍能正常运行。更奇怪的是,当我尝试手动加载类时,使用Class.forName("com.mysql.jdbc.Driver")
它被正确加载,暗示该类确实可以加载。
巧合与否,Drools似乎也在发生......我将一些最新的Drools罐子重新打包为OSGi捆绑包,部署它们,再次运行时ClassNotFoundException
弹出。在这两种情况下,所有供应商捆绑包都会添加到清单中的必需捆绑包中。
这个奇怪的问题会不会响铃?我很高兴听到它......
答案 0 :(得分:2)
这似乎是Equinox中类加载的问题。我尝试使用DynamicImport-Package
和Eclipse-BuddyPolicy
标头修复此问题,但没有取得多大成功。最后我通过自己重新打包最新版本的Quartz作为捆绑包修复了这个问题,在捆绑包中添加了MySql jar。它不是最漂亮或最优雅的解决方案,但它现在必须要做。如果有人能告诉我更多有关课程加载的信息,请随时回复!