启动服务时出现Jpa-hibernate错误

时间:2013-08-22 17:38:00

标签: 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 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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

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

答案 1 :(得分:0)

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

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

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