gpt4 book ai didi

spring - OSGI 类不可见,即使所需的 JAR 位于 Bundle-classpath 中

转载 作者:行者123 更新时间:2023-12-02 00:27:45 26 4
gpt4 key购买 nike

我们使用基于 Equinox 的 OSGI 框架来运行多个包。
我们的包在 Bundle-classpath 中有依赖的 JAR,依赖的 JAR 与其他类和资源一起打包在一个 JAR/WAR 文件中。但是我们在运行多个这样的 Bundle 时遇到了问题。
说,
Bundle A:完全测试/工作的 JAR 包。包含包类路径中的所有依赖 JAR 和内部的所有依赖 JAR(在名为 lib 的文件夹下)。通过仅部署此 bundle 进行测试时工作正常

Bundle B:类似于 Bundle A。在单独部署时再次工作

但是当两个 bundle 一起加载时,OSGI 无法从 bundle-classpath 中提到的 JAR 中为第二个加载的 bundle 加载类。第一个加载的包运行良好,而第二个加载的包失败。

当 SPRING 尝试加载 javax.persistence.QueryHint 类时,当前会出现此问题。

我们使用我们的 xxxx-EntityManager.xml 创建一个数据源,我们在其中创建我们的 entityManagerFactory

使用的依赖 JAR:(两个包中的相同 JAR)

  • Spring :3.0.6.RELEASE JARS
  • 休眠:3.6.7 JARS
  • Hibernate-JPA:hibernate-jpa-2.0-api-1.0.1.Final.jar

异常:PropertyAccessException 1:org.springframework.beans.MethodInvocationException:属性“targetDataSources”抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建类路径资源 [xxxx-EntityManager.xml] 中定义的名称为“entityManagerFactory”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException:接口(interface) javax.persistence.QueryHint 在类加载器中不可见
在 org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:102)
在 org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)
在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358)

注意:

  • 两个 Bundle 都经过单独测试并且工作正常
  • 我们知道,除了创建 Bundle-classpath 之外,我们还可以在 bundle 之外提取第三方 JAR 并使用 import-package。但是对于当前的需求,我们只需要父包内的第三方 JAR。

请求 OSGI 专家帮助我们。

最佳答案

我建议将您的依赖项放在单独的包中,并使所有包对其他包可见。然后将这些单独的包添加为依赖项(或者更好:仅导入所需的包而不是整个包!)。这样你就可以确保你的依赖项只加载一次。我建议您当前的配置导致类加载问题,因为类被加载两次很可能是相同的 serialVersionUID。由于每个 bundle 都有自己的类加载器,因此第二个 bundle 将看不到次要(未)加载的类。

关于spring - OSGI 类不可见,即使所需的 JAR 位于 Bundle-classpath 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8224024/

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