Исключая hibernate-core-5.3.9.Final-redhat-00002.jar из загрузки в JBoss EAP 7.2.1.GA - PullRequest
0 голосов
/ 27 апреля 2020

У нас есть веб-приложение, развернутое в JBoss EAP 7.2.1.GA, включая hibernate JPA.

Мы получаем исключение:

Caused by: java.lang.ClassCastException: org.hibernate.jpa.HibernatePersistenceProvider cannot be cast to javax.persistence.spi.PersistenceProvider

вследствие столкновения для org.hibernate .jpa.HibernatePersistenceProvider между jar-файлом, включенным в JBoss hibernate-core-5.3.9.Final-redhat-00002.jar , и jar-файлом, включенным в наше веб-приложение org.hibernate.hibernate-entitymanager: 5.1 .10 .

Из-за политик загрузки классов JBoss jar, определенный в classpath JBoss, имеет преимущество перед jar, упакованным в наше веб-приложение, поэтому JBoss ожидает такого поведения.

Но нам нужно настроить политики загрузки классов, чтобы jar, настроенный в нашем приложении, имел приоритет над jar на сервере приложений или, возможно, исключил приложение на сервере приложений.

Мы попытались настроить jboss-deploy-structure. xml на обоих уровнях, на уровне развертывания и на уровне развертывания, чтобы исключить эту зависимость не случайно. Мы пробовали разные комбинации исключений, включая исключение каждого отдельного модуля и подсистемы, но hibernate-core-5.3.9.Final-redhat-00002.jar всегда загружается, и мы всегда получаем ClassCastException.

В документации мы нашли this :

Собственное использование Hibernate. Приложения, которые напрямую используют Hibernate API, называются здесь собственными приложениями Hibernate. В собственных приложениях Hibernate можно использовать банки Jibernate, включенные в JBoss AS, или они могут упаковать свою собственную копию файлов Jibernate. В приложениях, использующих JPA, JBoss AS Hibernate автоматически внедряется в путь к классу развертывания приложения. Это означает, что приложения JPA должны ожидать использования банок Hibernate, включенных в JBoss AS .

, но неясно, означает ли это, что зависимости JPA не могут быть исключены, несмотря на то, что исключая подсистему jpa, возможность .

Итак, вопросы:

  • Означает ли это, что исключение подсистемы JPA не работает для приложений JPA?

  • возможно ли исключить этот hibernate-core-5.3.9.Final-redhat-00002.jar, настроив jboss-deploy-structure. xml файл в веб-приложении?

  • возможно ли в JBoss EAP 7.2.1.GA отменить политику приоритетов по умолчанию, чтобы jar-файлы в WEB-INF / lib имели приоритет над jar-файлами в appserver?


Обновление 1: Что касается исключений, мы попытались исключить в структуре jboss-deploy-structure. xml:

  • все подсистемы: ejb3, infinispan, jaxrs, jca, jdr, jpa , jsf, jmx, jaxrs, удаленное взаимодействие, resteasy, security-manager, безопасность, веб-сервисы, сварка

  • все модули: javax.persistence.api , org.hibernate , org.jboss.as.jpa , javax.ejb.api, org. apache .commons. logging, org.slf4j, org.slf4j.ext, org.slf4j.jcl-over-slf4j, org.slf4j.impl, org. apache .log4j, org.jboss.as.jaxrs, org.jboss.resteasy, org.jboss.resteasy.resteasy-jaxrs, org.jboss.resteasy.re steasy-cdi, org.jboss.resteasy.resteasy-jaxb-provider, org.jboss.resteasy.resteasy-atom-provider, org.jboss.resteasy.resteasy-jackson-provider, org.jboss.resteasy.resteasy-jsapi, org.jboss.resteasy.resteasy-multipart-provider, org.jboss.resteasy.resteasy-crypto, org.jboss.resteasy.jose-jwt, org.jboss.resteasy.resteasy-jettison-provider, org.jboss.resteasy. resteasy-yaml-провайдер, org.jboss.resteasy.skeleton-key, javaee.api, javax.activation.api, javax.annotation.api, javax.el.api, javax.enterprise.api, javax.inject.api, javax.interceptor.api, javax.jms.api, javax.jws.api, javax.mail.api, javax.management.j2ee.api, javax.resource.api, javax.rmi.api, javax.security.auth. message.api, javax.security.ja cc .api, javax.transaction.api, javax.validation.api, javax. xml .bind.api, javax. xml. soap .api, javax . xml .ws.api, javax.api

  • как для развертывания, так и для дополнительного развертывания

Даже при одновременном применении всех этих исключений банку JBoss вводят в веб-приложение, поэтому мы все еще get ClassCastException.

Я смущен, если это работает так "по замыслу" в соответствии с этим комментарием к официальной документации : Приложения, использующие JPA, автоматически будут иметь JBoss AS Hibernate внедряется в путь к классу развертывания приложения. Это означает, что приложения JPA должны ожидать использования jiber-файлов Hibernate, включенных в JBoss AS. , или, в противном случае, их можно исключить, но мы что-то упустили, или, может быть, это ошибка.


Обновление 2. Мы протестировали все эти параметры конфигурации на стороне приложения, и ни один, ни по отдельности, или в комбинации, не может предотвратить загрузку JBoss hibernate jar:

В структуре jboss-deploy-structure. xml:

  • исключить подсистему JPA при развертывании
  • исключить подсистему JPA при развертывании
  • исключить модуль org.hibernate из развертывания без слота
  • исключить модуль org.hibernate из развертывания для слота main
  • исключить модуль org.hibernate из развертывания для слота 5.3
  • исключить модуль org.hibernate из развертывания для слота 5.3.9.Final
  • исключить модуль org.hibernate из вложенного развертывания без слота
  • исключить модуль org.hibernate из вложенного развертывания для основного слота
  • исключить модуль org.hibernate из вложенного развертывания для слота 5.3
  • исключить модуль org.hibernate из вложенного развертывания для слота 5.3.9. Окончательный
  • исключить модуль javax.persistence.api из развертывания
  • исключить javax.persistence Модуль .api из развертывания
  • исключить модуль javax.ejb.api из развертывания
  • исключить модуль javax.ejb.api из развертывания
  • исключить все модули (кроме сервлетов) / подсистем для развертывания / развертывания
  • настроить значение local-last = "false" для развертывания

В постоянстве. xml:

  • настроить jboss.as .jpa.providerModule для 'application'
  • настроить jboss.as.jpa.providerModule на '5.1.10'
  • настроить jboss.as.jpa.providerModule для 'org.hibernate: 5.1. 10.Final '
  • настроить jboss.as.jpa.managed как false

В maven несколько комбинаций и исключений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...