【问题标题】:Using mysql JDBC in the OSGi framework在 OSGi 框架中使用 mysql JDBC
【发布时间】:2015-05-28 09:44:51
【问题描述】:

在我的 OSGi 应用程序中连接到数据库时遇到了很大的问题。我搜索了 3 天,找不到一个好的解决方案。只是不工作和旧东西。我正在使用 Bndtools 创建我的 Bundles。

谁能帮帮我,我很绝望。

谢谢

【问题讨论】:

  • 到底是什么问题?你的问题需要更有针对性。请注意,当前版本的 MySQL java 连接器 JAR 已经是一个 OSGi 包。
  • 好吧,我正在使用最新版本的 mysql JConnector 5.1.35,我认为它已经是一个可运行的 OSGi Bundle。我可以将它加载到框架中,并将其显示为 Active。当我尝试使用 "Class.forName("com.mysql.jdbc.Driver").newInstance();" 加载驱动程序时它会抛出一个找不到类的异常。
  • 多么奇怪的方法来实例化一个类! new 关键字有什么问题?通过使用这样的反射技巧,您可以向 Bnd(tools) 隐藏您的代码依赖于 com.mysql.jdbc 包的事实,因此 bnd 不会为该包生成导入,因此您的包无法看到它。
  • 对了,请把问题的详细信息和错误放在实际问题中。目前的问题是“有些东西不起作用,请告诉我如何解决它”,StackOverflow 版主将迅速关闭。
  • 感谢您的建议,我是新来的,所以下次我会尽力说得更具体。你能给我进一步的建议或告诉我一个链接,我可以在其中阅读更多关于让 bnd 生成导入的信息吗?

标签: mysql jdbc osgi osgi-bundle eclassnotfound


【解决方案1】:

此错误的最可能原因似乎是正在使用的类的包不存在于 bundle 的 manifest.mf 的 Import-package 指令中。

在 OSGi 环境中,每个包都有自己的类加载器。因此,每个类在应用程序生命周期内只会加载一次。每当在包之外使用类时,该类所在的包需要存在于其 jar 的 manifest.mf 的 Export-package 属性中。 任何需要此包/类的客户端捆绑包都应在其 manifest.mf 文件的 Import-package 属性中添加该条目。

如果你使用的是 maven,你可以使用 maven-bundle-plugin。该插件将通过扫描项目 pom.xml 中存在的依赖项来生成适当的清单导入和导出标头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2015-06-18
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多