1

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

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
4

2 回答 2

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

于 2013-08-22T18:51:51.470 回答
0

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

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

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

于 2014-04-07T13:15:04.503 回答