java - 将 Hibernate 与 OSGi 和 Maven 结合使用

标签 java hibernate maven osgi apache-felix

我正在尝试使用 Maven 添加 Hibernate 作为我的 OSGi 包的依赖项。在我的 POM 文件中,我有:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-osgi</artifactId>
    <version>4.3.6.Final</version>
</dependency>

但是,当我运行时,出现错误:

org.osgi.framework.BundleException: bundle org.hibernate.core [8] 中 Unresolved 约束:无法解析 8.0:缺少要求 [8.0] osgi.wiring.package; (&(osgi.wiring.package=javax.transaction.xa)(version>=1.1.0)(!(version>=2.0.0))) [原因:无法解析 15.0:缺少要求 [15.0] osgi .接线.包; (osgi.wiring.package=javax.enterprise.context)]

所以我为 javax.enterprise.context 添加了另一个依赖项:

<dependency>
    <groupId>javax.enterprise</groupId>
    <artifactId>cdi-api</artifactId>
    <version>1.2</version>
</dependency>

这解决了之前的错误,但导致了另一个错误:

自动属性安装:file:///path/to/project/hibernate/target/bundles/javax.inject-1.jar(org.osgi.framework.BundleException:无法创建包对象。 - java.lang.IndexOutOfBoundsException)

现在,我无法解决这个问题,甚至无法找出原因。我使用 Apache Felix。

最佳答案

那是行不通的。如果您想在 OSGi 中使用 Hibernate,您将需要一些实际上在 osgi 包中提供所需接口(interface)的包。 对于您当前的用例,我建议使用 Karaf 并安装 Apache Aries 的 JPA/JTA 功能。 Karaf 是一个 OSGi 容器,解决了许多依赖关系并具有易于安装的功能。 要将 Karaf 与 JPA 结合使用,只需执行以下操作

features:install jpa
features:install jta
features:install hibernate

这样您就应该设置为在 osgi 容器中使用 hibernate。 另一种方法是安装所有必需的 bundle 来运行带有 hibernate 和 jpa/jta 支持的蓝图 osgi。有关这些列表,请查看相应的功能文件。可用地址:Karaf

关于java - 将 Hibernate 与 OSGi 和 Maven 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26224537/

相关文章:

java - @ElementCollection 用于映射 Object 类的列表

Maven 执行 :java run class file within jar

java - ProgressIndicator(节点)作为鼠标光标?

java - 从列表中获取最长的连续记录

java - 命名查询的等效条件查询

java - 错误 : AnnotationException: mappedBy reference an unknown target entity property

maven - 如何将自己的项目添加到公共(public)maven存储库?

maven - Maven 多模块项目版本控制的良好实践

java - 具有多个主机的 RMI

java - Jenkins 的 Slack Slash 命令插件