代码之家  ›  专栏  ›  技术社区  ›  James McMahon

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

  •  3
  • James McMahon  · 技术社区  · 15 年前

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

    • 这个 antlr ,请 asm , jpa core EclipseLink的束
    • 一个奥斯基化的罐子 javax.persistence 一点九九
    • 一个奥斯基化的罐子 com.mysql.jdbc 司机
    • 我自己的一个包,其中包含带注释的实体类和 persistence.xml
    • 我自己的另一包电话 Persistence.createEntityManagerFactory(String, Map)

    现在,我困惑的是哪个包必须能够看到MySQL驱动程序。我原以为这是创建EntityManagerFactory的捆绑包,但当我导入该清单时,会得到ClassNotFound错误。接下来,我尝试从EclipseLink导入它 JPA bundle的清单,但又错了。仅当我从包含持久性单元(实体类和 坚持XML ),它有效。

    因此,似乎数据库驱动程序是由clasloader查找pu的包,但这对我没有意义。发生什么事?

    我似乎找不到一个简单的文档。 These slides 给出一些提示,但并不完全全面。

    2 回复  |  直到 14 年前
        1
  •  3
  •   SteveD    15 年前

    我熟悉关于Hibernate和JDBC的OSGi类路径问题,我可以根据您链接到的幻灯片,为您提供有关正在发生的事情的推理。

    我假设您已将JDBC驱动程序条目添加到 persistence.xml 在你的聚氨酯包里?

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

    想想看。EclipseLink包不会导入所有已知的JDBC驱动程序(它不应该这样做),只有包可以知道它们需要哪个数据库驱动程序,所以期望您的pu包导入JDBC驱动程序类是合理的。

    如果第三方库已经进行了OSGi化,例如EclipseLink,则不需要修改它们的清单。

        2
  •  3
  •   Houtman    15 年前