Схема fuse 7.0 JPA persistence.xml ожидает обработчиков пространства имен - PullRequest
0 голосов
/ 22 октября 2019

Я перепробовал все обработчики пространства имен, которые есть в реестре 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]

Дайте мне знать причину проблемы.

Заранее большое спасибо.

1 Ответ

0 голосов
/ 23 октября 2019

Если вы проверите:

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:

Я проверил (готовится к выпуску предохранитель 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)

вы увидите, что org.hibernate.jpa.HibernatePersistenceProvider JPA-провайдер зарегистрирован в Hibernate.

Однако вы добавили (в META-INF/persistence.xml):

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

Вы должны удалитьэтот провайдер или используйте org.hibernate.jpa.HibernatePersistenceProvider, потому что он влияет на фильтр OSGi, созданный org.apache.aries.jpa.container.impl.PersistenceProviderTracker#createFilter для вашего пакета. Так вот почему вы не зарегистрировали 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)
...