gpt4 book ai didi

jpa - 在 OSGi 环境中,类路径和类加载器是如何设置的?

转载 作者:行者123 更新时间:2023-12-05 01:23:41 27 4
gpt4 key购买 nike

我对 OSGi 中的类可见性感到困惑。我正在运行 Apache Felix 并加载以下包:

  • 来自 eclipselink 的 antlrasmjpacore
  • javax.persistence 1.99 的 OSGi 化 jar
  • 带有 com.mysql.jdbc 驱动程序的 OSGi 化 jar
  • 我自己的一个包,其中包含带注释的实体类和一个 persistence.xml
  • 我自己的另一个包调用 Persistence.createEntityManagerFactory(String, Map)

现在,我感到困惑的是哪个包必须能够看到 MySQL 驱动程序。我认为这将是创建 EntityManagerFactory 的包,但是当我导入该 list 时出现 ClassNotFound 错误。接下来,我尝试从 eclipselink jpa 包的 list 中导入它,但又出错了。只有当我从包含持久性单元(实体类和 persistence.xml)的包的 list 中导入它时,它才有效。

因此,看似数据库驱动程序由 PU 包的类加载器查找,但这对我来说没有意义。怎么回事?

我似乎无法为此找到直接的文档。 These slides提供一些提示,但并不全面。

最佳答案

我熟悉 Hibernate 和 JDBC 周围的 OSGi 类路径问题,我可以根据您链接到的幻灯片向您提供我的推理。

我假设您已将 JDBC 驱动程序条目添加到 PU 包内的 persistence.xml 中?

EclipseLink 正在使用 extender代表 PU 束工作的模式。扩展程序正在监听捆绑启动,检查它们是否有 persistence.xml,然后进行设置工作。它期望 PU 包导入您可能在 persistence.xml 中引用的所有类型,包括 JDBC 驱动程序。

想一想。 EclipseLink bundle 不会导入每个已知的 JDBC 驱动程序(也不应该)——只有您的 bundle 才能知道它们需要哪个数据库驱动程序,因此期望您的 PU bundle 导入 JDBC 驱动程序类是合理的。

如果第 3 方库已经是 OSGi 化的,例如 EclipseLink,则您不需要修改它们的 list 。

关于jpa - 在 OSGi 环境中,类路径和类加载器是如何设置的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1272094/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com