【问题标题】:Jpa-hibernate error while starting the service启动服务时出现 Jpa-hibernate 错误
【发布时间】:2013-08-25 14:02:07
【问题描述】:

以下是我在启动服务后看到的日志中的错误...你能帮忙解决这个问题吗?

2013-08-22 10:35:37,111 | DEBUG | l Console Thread | AbstractServiceReferenceRecipe   | r.AbstractServiceReferenceRecipe  143 | 7 - org.apache.aries.blueprint.core - 1.1.0 | Found initial references null for OSGi service (&(&(org.apache.aries.jpa.proxy.factory=true)(osgi.unit.name=tenant))(objectClass=javax.persistence.EntityManagerFactory))

2013-08-22 10:35:37,111 | DEBUG | l Console Thread | BlueprintContainerImpl           | container.BlueprintContainerImpl  280 | 7 - org.apache.aries.blueprint.core - 1.1.0 | Running blueprint container for bundle com.igt.arcus.framework.jta.arcus-framework-feature-service in state WaitForInitialReferences
2013-08-22 10:35:37,111 | INFO  | l Console Thread | BlueprintContainerImpl           | container.BlueprintContainerImpl  344 | 7 - org.apache.aries.blueprint.core - 1.1.0 | Bundle com.igt.arcus.framework.jta.arcus-framework-feature-service is waiting for dependencies [(&(&(org.apache.aries.jpa.proxy.factory=true)(osgi.unit.name=tenant))(objectClass=javax.persistence.EntityManagerFactory))]
2013-08-22 10:35:37,112 | DEBUG | l Console Thread | BlueprintEventDispatcher         | ntainer.BlueprintEventDispatcher  136 | 7 - org.apache.aries.blueprint.core - 1.1.0 | Sending blueprint container event BlueprintEvent[type=GRACE_PERIOD, dependencies=[(&(&(org.apache.aries.jpa.proxy.factory=true)(osgi.unit.name=tenant))(objectClass=javax.persistence.EntityManagerFactory))]] for bundle com.igt.arcus.framework.jta.arcus-framework-feature-service

【问题讨论】:

    标签: java hibernate jpa osgi


    【解决方案1】:

    如果您使用 Aries JPA,您应该会看到两个 EntityManagerFactory 服务:

    • jpa-container 使用 persistence.xml 获取您的包并创建一个实体管理器工厂
    • jpa-container-context 获取每个 EntityManagerFactory 服务并使用 (org.apache.aries.jpa.proxy.factory=true) 服务属性键值对创建一个新的托管 EntityManagerFactory 服务

    第二个在您的环境中不存在。可能有两个原因:

    • aries-jpa-container-context 不在您的 OSGi 环境中,或者它不处于活动状态
    • 由于缺少某些依赖项,原始 EntityManagerFactory 服务未注册

    如果您打开 OSGi 控制台并检查可用的服务,您可以检查它。如果根本没有 EntityManagerFactory 服务,那第二个就是你的问题了。

    检查您的所有捆绑包是否都处于活动状态!如果是,请检查您是否拥有 jpa-container 所需的所有服务:TransactionManager、DataSource 或 DataSourceFactory 以及用于 Hibernate 的 javax.persistence.spi.PersistenceProvider 服务。如果缺少任何服务,aries-jpa-container 将获取您的捆绑包,但永远不会创建 EntityManagerFactory。

    我实现了一个自己的 jpa-container,其工作方式与 aries-jpa-container 几乎相同。如果您更换 aries-jpa-container(只有那个,jpa-container-context 应该保留在那里),它将在 INFO 级别为您记录更多缺少的消息。容器可用herehttps://github.com/everit-org/osgi-hibernate 提供了一个使用休眠的示例应用程序。运行“mvn install”后,您会发现 itests/core/target/eosgi-itests-dist/equinox 是一个子文件夹,您可以在其中使用 bin/runco​​nsole.sh 在 Equinox 服务器上启动工作应用程序。

    【讨论】:

    • 感谢您的回复..我已经检查了 jpa-container-context 它的活动..我也有捆绑..Hibernate-EntityManager 活动...进入 avax.persistence.spi。 PersistenceProvider ...我已经安装了这个捆绑包,它公开并被休眠..Apache Geronimo JSR-317 JPA 2.0 Spec APIorg.apache.geronimo.specs.geronimo-jpa_2.0_spec;singleton=true ..
    • 抱歉,我无法完全理解您的评论。所以你有一个带有 javax.persistence.spi.PersistenceProvider 的 OSGi 服务?
    • 是的,我有这个包,它为我提供了所需的依赖 mvn:org.apache.geronimo.specs/geronimo-jpa_2.0_spec/1.1 ..for javax,persistence.spi
    • 那个 jar 包含 JPA 的 API 类。它根本不使用接口 javax.persistence.spi.PersistenceProvider 注册 OSGi 服务。您必须安装一个包,该包实例化该接口的 Hibernate 实现并将其注册为 OSGi 服务。如果您有一个带有该接口的 OSGi 服务,现在又是一个问题。在 OSGi 控制台中检查它!
    • 是的,我有一个数据源捆绑包公开了这些必需的属性。在蓝图中,我还提到了带有键和值的服务属性。下面是 sn-p ..
    【解决方案2】:

    当前的 aries jpa 容器 jar 1.0.0 有一个 bug,它会在创建 EntityManager 时吞下异常。我的一个同事打开了 aries 的 bug:https://issues.apache.org/jira/browse/ARIES-1160

    我创建了第二个补丁,可应用于 1.0.0 源以创建正确记录异常的 jar。查看 aries jpa 容器的 1.0.0 标签,应用补丁并构建。

    当您在 karaf 中运行时,您应该会看到错误的真正来源。

    【讨论】:

      猜你喜欢
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多