В единице сохранения состояния отсутствуют зависимости, мигрирующие с JBoss EAP 6.4 на 7.0

У меня есть приложение, которое должно работать как на JBoss EAP 6.4, так и на 7.0. Приложение использует объектные компоненты EJB, которые больше не поддерживаются в JBoss EAP 7, поэтому объектные компоненты переносятся на использование объектов JPA, как описано в руководстве по миграции JBoss. Приложение развертывается и работает нормально в версии 6.4, но не может развернуться из-за ошибки «Отсутствуют зависимости» в версии 7.0. Я видел множество проблем, когда отсутствующая зависимость была источником данных, но, похоже, здесь это не так. Источник данных вообще не упоминается в ошибке недостающих зависимостей. Я вижу в журналах, что файл persistence.xml анализируется и привязки jndi добавляются для сессионных компонентов до того, как развертывание завершится неудачей.

У меня есть файл EAR, содержащий несколько файлов jar war и ejb. Приложение, с которым у меня возникла проблема, состоит из файла ejbModule.jar, который содержит файл persistence.xml и классы сущностей, и файла webModule.war с классами taglib, которые ссылаются на классы сущностей, содержащиеся в ejbModule.jar.

Структура файла EAR представлена ​​ниже:

MyEAR.ear
- ejbJar.jar
- webApp1.war
- webApp2.war
- ejbModule.jar (содержит persistence.xml и классы сущностей)
- META-INF / persistence .xml
- webModule.jar (классы taglib зависят от классов сущностей из ejbModule.jar)
- META-INF

persistence.xml: (заменены имена классов, имя источника данных, имя единицы сохранения состояния)

<persistence version="2.0" xmlns:per="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="myPU">
    <class>org.MyEntity1</class>
    <class>org.MyEntity2</class>
    <jta-data-source>java:/MyDataSource</jta-data-source>
    <properties>
        <property name="jboss.entity.manager.jndi.name" value="java:/myPU"/>
        <property name="jboss.entity.manager.factory.jndi.name" value="java:/myPU"/>
    </properties>
</persistence-unit>

It's difficult to post the error message as it's got hundreds of lines of "missing dependencies" for class names and application names that I can't share and by the time I replace them all I don't feel it would be of much use. But there are entries like:

"jboss.naming.context.java.comp.MyEAR.ejbModule.MyEntity1.InAppClientContainer отсутствует [jboss.naming.context.java.comp.MyEAR.ejbModule.MyEntity1]",

Однако есть и такие записи, как:

"jboss.deployment.subunit. \" MyEAR.ear \ ". \" webApp1.war \ ". component. \" org.taglib.MyTagLibClass \ ". START отсутствует [jboss.persistenceunit. \" MyEAT. ухо / ejbModule.jar # myPU \ "]"

Из журнала DEBUG для org.jboss.as.jpa я вижу, что JBoss, похоже, добавляет зависимости от блока сохранения состояния для всех классов taglib во все файлы войны в ухе. Только webModule.war должен использовать блок сохранения состояния.

2017-12-07 15: 37: 13,808 DEBUG [org.jboss.as.jpa] (поток службы MSC 1-2) Добавление зависимости от службы службы PU jboss.persistenceunit. "MyEAR.ear # myPU" для компонента org.taglib.MyTagLibClass

Когда я перемещаю файл persistence.xml в каталог META-INF EAR, приложение развертывается и отлично работает на JBoss EAP 7.0. Однако это не идеальное решение, поскольку файл EAR создается динамически и может содержать пользовательские приложения, над которыми у меня нет контроля. Я пробовал различные другие структуры, чтобы попытаться заставить это работать, но не нашел ничего другого, что работает.

Есть идеи, как заставить это работать на JBoss EAP 7.0?


person Gareth Patterson    schedule 07.12.2017    source источник


Ответы (1)


В вашем persistence.xml есть ненужные записи

Тебе просто нужно это

<persistence version="2.0" xmlns:per="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="myPU">
    <jta-data-source>java:/MyDataSource</jta-data-source>
</persistence-unit>

Поскольку сущности будут найдены автоматически относительно persistence.xml

Пожалуйста, попробуйте это, и если не поможет, опубликуйте как можно больше журнала server.log.

Другой вариант - обратиться в службу поддержки RedHat, поскольку вы используете EAP. Я предполагаю, что у вас есть подписки, содержащие поддержку.

person Simon Martinelli    schedule 08.12.2017
comment
Спасибо, но, к сожалению, приложение все еще не развертывается. Он не работает с теми же ошибками, что и описанные выше. - person Gareth Patterson; 08.12.2017
comment
Пожалуйста, предоставьте весь файл журнала. Я не могу помочь вам просто и отрывком - person Simon Martinelli; 08.12.2017