我一直在开发OSGi模块,但是到目前为止,当我不得不包装现有的jar时,我遇到了许多问题。这方面的一个示例是使用Oracle数据库驱动程序,即使我将jar打包为捆绑包,它也无法正常工作(即使存在驱动程序类也无法找到)。这仅是一个示例,但是我与其他第三方库存在问题,并且想知道是否存在每次都能使用的最佳方法来使用第三方库?
杰洛夫
最佳答案
您遇到的问题是jdbc使用Java运行时中的类来查找数据库驱动程序(DriverManager.getConnection)。由于无法从系统类加载器(已加载DriverManager类)访问数据库驱动程序,因此无法使用该功能。
在OSGi中工作的一种方法是改为使用数据源:http://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html。在这里,您只需使用new创建数据源,这当然可以工作。问题在于它使您的用户捆绑包依赖于特定的数据库驱动程序。因此,最佳实践是集中创建DataSource并将其作为服务发布。
您可以在我的Apache Karaf DB教程(http://www.liquid-reality.de/display/liquid/2012/01/13/Apache+Karaf+Tutorial+Part+6+-+Database+Access)中找到更多详细信息。
顺便说一句。通常,这种工厂通常在OSGi中库失败的地方。每个库都发明了另一个不同的工厂系统,并且大多数与OSGi的受限类加载器不兼容。幸运的是,如今大多数库都可以使用OSGi。大多数情况下,这仅意味着您还可以使用可以使用OSGi服务检索的具体对象来调用工厂。
关于java - 一致导入第三方库的OSGi,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15623803/