Подтвердить что ты не робот

Исключить JPA 2.0 от JBoss 7.1, чтобы использовать спящий режим 4.3

Я хочу использовать hibernate 4.3 для своих функций многоуровневости в JBoss 7.1.

Мне удалось включить его в мою войну, добавив следующие строки в структуру jboss-deployment-structure

<exclusions>
   <module name="org.hibernate" />
</exclusions>

и добавление зависимости для спящего ядра и менеджера объектов в моем pom.xml

Это привело к загрузке спящего режима 4.3, но, к сожалению, я получил сообщение об ошибке

java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;

что связано с загрузкой JPA 2.0, когда hibernate 4.3 использует JPA 2.1

Я видел эти темы и пытался, что они предлагают Исключение подсистемы JPA от JBoss EAP 6.1 - Попытка использования JPA 2.1 в JBoss EAP 6.1, JBoss AS7 Автоматическая загрузка JPA, Hibernate 4.3.0.Final и Spring Данные JPA 1.4.3.RELEASE.

Я добавил файл persistence.xml с

<property name="jboss.as.jpa.managed" value="false" /> 

исключено hibernate jpa 2.0 из Spring Данные

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>${spring-data.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Удалена подсистема JPA полностью из JBoss standalone.xml без каких-либо успехов.

Единственное, что делало трюк, заключалось в том, чтобы исключить весь javaee.api в jboss-deployment-structure, как предлагается в другом потоке

<exclusions>
    <module name="javax.persistence.api"/>
    <module name="javaee.api"/>
</exclusions>

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

UPDATE: теперь мой jboss-deployment-structure.xml выглядит как

<jboss-deployment-structure>
<deployment>
    <exclusions>
        <module name="org.slf4j" />
        <module name="org.slf4j.impl" />
        <module name="org.apache.log4j" />
        <module name="javax.persistence.api" />
        <module name="org.hibernate" />
    </exclusions>
    <dependencies>
        <module name="org.jboss.ironjacamar.jdbcadapters" />
        <module name="org.hornetq" />
        <module name="org.hornetq.ra" />
        <module name="org.jboss.ejb3" />
        <module name="org.jboss.ejb-client" />
    </dependencies>
</deployment>
</jboss-deployment-structure>

Как вы видите, я пробовал много вещей без везения, поэтому, если у кого-то есть другая идея, это очень приветствуется.

4b9b3361

Ответ 1

Я бы разделил эту проблему на два меньших:

1) Убедитесь, что вы не проходите транзитно в зависимости от JPA 2.0

Для этого вы можете использовать инструмент визуализации графиков зависимостей (у NetBeans есть один встроенный или вы можете использовать плагин дерева зависимостей maven). Другой способ - просто пропустить файлы libs, включенные в ваш артефакт, перед тем, как приступить к JBoss.

2) Обеспечьте правильную конфигурацию JBoss AS 7.1

JBoss AS 7.1 поставляется вместе с банками Hibernate 4.0.x, чтобы обновить их, попробуйте выполнить эти шаги, как описано в официальном документе .

  • обновить текущую папку as7/modules/org/hibernate/main, чтобы она содержала более новую версию

  • Удалить *.index файлы в папках as7/modules/org/hibernate/main и as7/modules/org/hibernate/envers/main

  • Резервное копирование текущего содержимого as7/modules/org/hibernate, если вы допустили ошибку

  • Удалите старые банки и скопируйте новые банки Hibernate в as7/modules/org/hibernate/main + as7/modules/org/hibernate/envers/main

  • Обновите as7/modules/org/hibernate/main/module.xml + as7/modules/org/hibernate/envers/main/module.xml, чтобы назвать банки, которые вы скопировали в

Обновлен as7/modules/org/hibernate/main/module.xml будет выглядеть (обратите внимание, что зависимости не изменятся):

<?xml version="1.0" encoding="UTF-8"?>

<module xmlns="urn:jboss:module:1.1" name="org.hibernate">
    <resources>
        <resource-root path="hibernate-core-4.3.5.Final.jar"/>
        <resource-root path="hibernate-commons-annotations-4.0.4.Final.jar"/>
        <resource-root path="hibernate-entitymanager-4.3.5.Final.jar"/>
        <resource-root path="hibernate-infinispan-4.3.5.Final.jar"/>
    </resources>

    <dependencies>
       .
       .
    </dependencies>
</module>

Ответ 2

Попробуйте удалить только модуль javax.persistence.api вместе с org.hibernate.

Кроме того, если вы хотите переключиться на Hibernate 4.3 для всех веб-приложений (которые должны быть обратно совместимы), переключитесь на более новую версию Hibernate, как описано здесь.

Некоторые советы по отладке: после генерации ваших JAR файлов проверьте явно, какие библиотеки JPA/Hibernate они содержат (разархивируя их). Также, чтобы проверить версию Hibernate, вы можете сделать это как описано здесь.

Также проверьте структуру файл структуры jboss-deployment-structure, так как кажется, что элемент <exclusions> не находится ни в <deployment>, ни в элементе <sub-deployment>.

Ответ 3

для нас помогло следующее (работает только для сценариев JPA, не связанных с контейнером!):

  • IDE-сторона: (Eclipse Kepler) удаление (добавлено во время тестов и забыто удалить) (локально установлен) JBoss 7.1.1.Final Library project Build Path dependency

  • Maven-side: (mvn 3.0.4 и 3.3.3) outcommented следующий спящий JPA 2.0, включающий раздел наш глобальный /pom.xml (его проект уха с /pom.xml, ear/pom.xml, ejb/pom.xml и web/pom.xml:

    <project xmlns="http://maven.apache.org/POM/4.0.0" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    
        ...
    
        <dependencyManagement>
            <dependencies>
                ...
    
                <!-- outcommented because of JPA 2.1 support -->
                <!-- 
                <dependency>
                    <groupId>org.jboss.bom</groupId>
                    <artifactId>jboss-javaee-6.0-with-hibernate</artifactId>
                    <version>${version.jboss.bom}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                -->
            </dependencies>
        </dependencyManagement>
    
        ...
    
  • Maven-side: добавление только hibernate-entitymanager 4.3.8.Final и наш драйвер db (postgres) как зависимости от DB/ORM (который загрузите все остальные необходимые библиотеки) в нашем /ejb/pom.xml

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.3-1102-jdbc41</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.3.8.Final</version>
    </dependency>
    
  • серверная сторона: отключить JPA 2.0 в нашем JBoss 7.1.1.Final глобально (для всех webapps/libs, если у вас несколько) настройка <module name="javax.persistence.api" export="false"/>

намеков:

Ответ 4

попробуйте использовать более низкую версию hibernate-entitymanager

 <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>3.6.0.Final</version>
</dependency>

и jpa 2.0 могут работать > Это сработало для меня.