Java 启动服务时发生Jpa休眠错误

Java 启动服务时发生Jpa休眠错误,java,hibernate,jpa,osgi,Java,Hibernate,Jpa,Osgi,下面是我在启动服务后看到的日志错误。。。你能帮我解决这个问题吗 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 servi

下面是我在启动服务后看到的日志错误。。。你能帮我解决这个问题吗

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

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

  • jpa容器使用persistence.xml提取您的包,并创建一个实体管理器工厂
  • jpa容器上下文拾取每个EntityManagerFactory服务,并使用(org.apache.aries.jpa.proxy.factory=true)服务属性键值对创建一个新的托管EntityManagerFactory服务
第二个不存在于您的环境中。可能有两个原因:

  • aries jpa容器上下文不在OSGi环境中或未处于活动状态
  • 原始EntityManagerFactory服务未注册,因为缺少某些依赖项
如果打开OSGi控制台并检查可用的服务,您可以检查它。如果根本没有EntityManagerFactory服务,那么第二个问题就是您的问题

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


我实现了一个自己的jpa容器,其工作方式与aries jpa容器几乎相同。如果您替换aries jpa容器(只有那一个,jpa容器上下文应该留在那里),它将在信息级别为您记录更多缺少的消息。容器可用。使用hibernate的示例应用程序位于。运行“mvn安装”后,您会发现itests/core/target/eosgi itests dist/equinox是一个子文件夹,您可以在equinox服务器上使用bin/runconsole.sh启动工作应用程序。

当前的aries jpa容器jar 1.0.0有一个bug,它会在创建EntityManager时吞下异常。我的一位同事打开了白羊座bug:

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


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

感谢您的回复。.我已检查jpa容器上下文是否处于活动状态。.我还有bundle。.Hibernate EntityManager处于活动状态。。。提交到avax.persistence.spi.PersistenceProvider…我安装了这个包,它公开并被hibernate使用..Apache Geronimo JSR-317 JPA 2.0 Spec apirog.Apache.Geronimo.specs.Geronimo-JPA_2.0spec;singleton=true.对不起,我不能完全理解你的评论。那么您有一个带有javax.persistence.spi.PersistenceProvider的OSGi服务了吗?是的,我有这个包,它为我提供了所需的依赖项mvn:org.apache.geronimo.specs/geronimo-jpa_2.0_spec/1.1。对于javax,persistence.spithat jar包含jpa的API类。它根本不向接口javax.persistence.spi.PersistenceProvider注册OSGi服务。您必须安装一个包来实例化该接口的Hibernate实现,并将其注册为OSGi服务。现在问题又来了,您是否有一个带有该接口的OSGi服务。在OSGi控制台中检查它!是的,我有一个数据源包,它公开了这些必需的属性。在blueprint中,我还提到了带有key&value的服务属性。下面是代码段。。