【问题标题】:fuse 7.0 JPA persistence.xml schema is waiting for namespace handlersfuse 7.0 JPA persistence.xml 模式正在等待命名空间处理程序
【发布时间】:2019-10-22 16:03:05
【问题描述】:

我已经尝试了 JPA 2.1 注册表persistence_1_0.xsd、persistence_2_0.xsd、persistence_2_1.xsd 中的所有命名空间处理程序。结果,它们都没有工作并抛出错误。

2.0,2.1 正在等待命名空间处理程序 [http://xmlns.jcp.org/xml/ns/persistence] 1.0 正在等待命名空间处理程序 [http://java.sun.com/xml/ns/persistence]

让我知道问题的原因。

提前致谢。

【问题讨论】:

  • 还有更多细节吗?您如何部署持久性捆绑包(带有META-INF/persistence.xml 的捆绑包)?您安装了哪些 JPA 功能?您如何构建持久性捆绑包?任何特定的错误消息/堆栈跟踪?
  • 在 META-INF 目录下放置 persistence.xml 文件时,fuse 7.0 抛出以下错误 javax.persistence.PersistenceException: No Persistence provider for EntityManager named camel。所以我在 OSGI-INF/blueprint 下移动了 persistence.xml 文件,然后它就可以加载该文件了。但它抛出了错误。
  • 2019-10-23 15:25:37,554 |信息 | XNIO-4 任务 14 | o.a.a.b.c.BlueprintExtender | 47 - org.apache.aries.blueprint.core - 1.9.0 |销毁捆绑包 DEMO-PREP/4.1.0 的 BlueprintContainer 2019-10-23 15:25:41,899 |信息 | XNIO-4 任务 22 | o.a.a.b.c.BlueprintContainerImpl | 47 - org.apache.aries.blueprint.core - 1.9.0 | Bundle DEMO-PREP/4.1.0 正在等待命名空间处理程序 [java.sun.com/xml/ns/persistence]
  • 我已经安装了 jpa/2.6.1 现有的 fuse7.0 功能

标签: jbossfuse fuseesb


【解决方案1】:

如果你检查:

karaf@root()> feature:info jpa
Feature jpa 2.7.2
Description:
  OSGi Persistence Container
Details:
  JPA implementation provided by Apache Aries JPA 2.x. NB: this feature doesn't provide the JPA engine, you have to install one by yourself (OpenJPA for instance)
Feature has no configuration
Feature has no configuration files
Feature has no dependencies.
Feature contains followed bundles:
  mvn:org.apache.aries.jpa.javax.persistence/javax.persistence_2.1/2.7.2
  mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/1.1.1.redhat-2 (overriden from mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/1.1.1)
  mvn:org.osgi/org.osgi.service.jdbc/1.0.0
  mvn:org.apache.felix/org.apache.felix.coordinator/1.0.2 start-level=30
  mvn:org.apache.aries.jpa/org.apache.aries.jpa.api/2.7.2 start-level=30
  mvn:org.apache.aries.jpa/org.apache.aries.jpa.container/2.7.2 start-level=30
  mvn:org.apache.aries.jpa/org.apache.aries.jpa.support/2.7.2 start-level=30
Feature contains followed conditionals:
Conditional(aries-blueprint) has no configuration
Conditional(aries-blueprint) has no configuration files
Conditional(aries-blueprint) has no dependencies.
Conditional(aries-blueprint) contains followed bundles:
  mvn:org.apache.aries.jpa/org.apache.aries.jpa.blueprint/2.7.2 start-level=30

您会看到注意:此功能不提供 JPA 引擎,您必须自己安装一个(例如 OpenJPA)。这个描述似乎很老了。您需要实际的 JPA 提供程序,例如:

karaf@root()> feature:info hibernate
Feature hibernate 5.3.10.Final-redhat-00001
Description:
  Hibernate JPA engine support
Feature has no configuration
Feature has no configuration files
Feature depends on:
  wrap 0.0.0
  hibernate-orm 5.3.10.Final-redhat-00001
Feature contains followed bundles:
  mvn:net.bytebuddy/byte-buddy/1.9.5.redhat-00001 (overriden from mvn:net.bytebuddy/byte-buddy/1.9.5.redhat-00001)
Feature has no conditionals.

(来自 Fuse 7.0 之后的捆绑包版本)。

所以请另外安装hibernate功能:

karaf@root()> feature:install hibernate

karaf@root()> la -l|grep hibernate
249 │ Active   │  80 │ 5.0.4.Final-redhat-00001  │ mvn:org.hibernate.common/hibernate-commons-annotations/5.0.4.Final-redhat-00001
250 │ Active   │  80 │ 5.3.10.Final-redhat-00001 │ mvn:org.hibernate/hibernate-core/5.3.10.Final-redhat-00001
251 │ Active   │  80 │ 5.3.10.Final-redhat-00001 │ mvn:org.hibernate/hibernate-osgi/5.3.10.Final-redhat-00001

编辑 2019-11-07:

我检查了(即将推出的 Fuse 7.5,但应该对 7.0 有效)并发现了您遇到的问题。

如果你检查:

karaf@root()> ls PersistenceProvider
[javax.persistence.spi.PersistenceProvider]
-------------------------------------------
 javax.persistence.provider = org.hibernate.jpa.HibernatePersistenceProvider
 service.bundleid = 250
 service.id = 468
 service.scope = bundle
Provided by : 
 hibernate-osgi (250)
Used by: 
 Apache Aries JPA Specification 2.1 API (244)
 Camel Content-Based Router Example [EXAM-PREP] (256)

您会看到 Hibernate 注册了 org.hibernate.jpa.HibernatePersistenceProvider JPA 提供程序。

不过,您已经添加(META-INF/persistence.xml):

<provider>org.hibernate.ejb.HibernatePersistence</provider>

您应该删除此提供程序或使用org.hibernate.jpa.HibernatePersistenceProvider,因为它会影响org.apache.aries.jpa.container.impl.PersistenceProviderTracker#createFilter 为您的包创建的OSGi 过滤器。所以这就是你没有注册 EMF 的原因。

通过此更改,我发现它有效:

karaf@root()> ls EntityManagerFactory
[javax.persistence.EntityManagerFactory]
----------------------------------------
 hibernate.connection.pool_size = 25
 hibernate.dialect = org.hibernate.dialect.DerbyDialect
 hibernate.hbm2ddl.auto = create
 hibernate.show_sql = true
 javax.persistence.jdbc.driver = org.apache.derby.jdbc.EmbeddedDriver
 javax.persistence.jdbc.url = jdbc:derby:memory:order;create=true
 javax.persistence.jdbc.user = sa
 osgi.unit.name = camel
 osgi.unit.provider = org.hibernate.jpa.HibernatePersistenceProvider
 osgi.unit.version = 4.1.4
 service.bundleid = 256
 service.id = 501
 service.scope = singleton
Provided by : 
 Camel Content-Based Router Example [EXAM-PREP] (256)
Used by: 
 Camel Content-Based Router Example [EXAM-PREP] (256)

【讨论】:

  • 这是为了通知您,我已经安装了 hibernate、hibernate orm、openjpa 所有功能,但它正在寻找模式定义。我已经浏览了上述功能中存在的所有包,并确认 mvn:org.apache.aries.jpa.javax.persistence/javax.persistence_2.1/2.7.2 具有上述模式 xsd 文件,它也是一个活跃状态。但它会等待命名空间处理程序。
  • 所以我移动了 OSGI-INF/blueprint 下的 persistence.xml 文件 - 这可能是个问题。它必须在META-INF
  • 当我将 persistence.xml 文件放在 META-INF/persistence.xml 目录下时。 javax.persistence.PersistenceException:没有名为 camel 的 EntityManager 的持久性提供程序。 org.hibernate.ejb.HibernatePersistence 提供程序用于持久性 xml 和在 hibernate-entitymanager 包中导出的包。请告诉我问题的原因。
  • 我能够通过 camel:run 插件运行捆绑包,但 fuse 7.0 没有。
  • fuse 7.0 甚至没有加载 META-INF/persistence.xml。我安装了没有 META-INF/persistence.xml 的包,结果它抛出了同样的错误。 javax.persistence.PersistenceException:没有名为 camel 的 EntityManager 的持久性提供程序。
猜你喜欢
  • 1970-01-01
  • 2013-03-23
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 2011-08-16
  • 2013-02-25
相关资源
最近更新 更多