Я пытаюсь запустить интеграционный тест с Arquillian, используя OpenEJB, встроенный в качестве среды, но развертывание завершается неудачно из-за отсутствия persistence.xml.
Это выполняется в модуле («сервисы») многомодульного проекта maven. Модуль разворачивается как EJB-Jar ("services.jar") в EAR ("services-ear.ear"). Также в EAR я включаю в качестве библиотеки jar («data-1.0-SNAPSHOT.jar») другого модуля моего проекта («data»). Последний модуль содержит сущностные объекты и DAO как EJB. Все DAO имеют EntityManager, который ссылается на модуль персистентности, который объявлен в /META-INF/persistence.xml в «data-1.0-SNAPSHOT.jar». Итак, структура в EAR:
ear
|- services.jar
|- /lib/data-1.0-SNAPSHOT.jar
|- ...
Структура печатается, когда я строю ухо для развертывания, чтобы убедиться, что эти компоненты действительно находятся в архиве.
Когда я запускаю интеграционные тесты, появляется OpenEJB («15: 45: 48.345 [LogStreamAsync.Thread] INFO OpenEJB.server - Ready!»), И архивы создаются и развертываются. OpenEJB находит EJB-файлы в «data-1.0-SNAPSHOT.jar» и начинает их развертывание. Тем не менее, он не может найти файл persistence.xml в том же банке. Я проверил, что файл persistence.xml находится в банке. Сообщения, которые я получаю, одинаковы для каждого EJB:
...
15:56:42.167 [LogStreamAsync.Thread] ERROR OpenEJB.startup.validation - FAIL ... PlatformDaoImpl: A persistence unit must be defined via META-INF/persistence.xml to satisfy @PersistenceContext ref "manager" to unit "". An example of a suitable persistence.xml might be:<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"><persistence-unit name=""><jta-data-source>java:openejb/Resource/myDataSource</jta-data-source><non-jta-data-source>java:openejb/Resource/myUnmanagedDataSource</non-jta-data-source><properties><property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/></properties></persistence-unit></persistence>
15:56:42.167 [LogStreamAsync.Thread] ERROR OpenEJB.startup.validation - FAIL ... DefaultThreatResponseStatusDaoImpl: A persistence unit must be defined via META-INF/persistence.xml to satisfy @PersistenceContext ref "manager" to unit "". An example of a suitable persistence.xml might be:<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"><persistence-unit name=""><jta-data-source>java:openejb/Resource/myDataSource</jta-data-source><non-jta-data-source>java:openejb/Resource/myUnmanagedDataSource</non-jta-data-source><properties><property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/></properties></persistence-unit></persistence>
15:56:42.167 [LogStreamAsync.Thread] ERROR OpenEJB.startup.validation - FAIL ... DataSourceDaoImpl: A persistence unit must be defined via META-INF/persistence.xml to satisfy @PersistenceContext ref "manager" to unit "". An example of a suitable persistence.xml might be:<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"><persistence-unit name=""><jta-data-source>java:openejb/Resource/myDataSource</jta-data-source><non-jta-data-source>java:openejb/Resource/myUnmanagedDataSource</non-jta-data-source><properties><property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/></properties></persistence-unit></persistence>
15:56:42.167 [LogStreamAsync.Thread] ERROR OpenEJB.startup.validation - FAIL ... TechnologyDaoImpl: A persistence unit must be defined via META-INF/persistence.xml to satisfy @PersistenceContext ref "manager" to unit "". An example of a suitable persistence.xml might be:<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"><persistence-unit name=""><jta-data-source>java:openejb/Resource/myDataSource</jta-data-source><non-jta-data-source>java:openejb/Resource/myUnmanagedDataSource</non-jta-data-source><properties><property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/></properties></persistence-unit></persistence>
15:56:42.167 [LogStreamAsync.Thread] ERROR OpenEJB.startup.validation - FAIL ... ear-scoped-cdi-beans_services-ear: A persistence unit must be defined via META-INF/persistence.xml to satisfy @PersistenceContext ref "manager" to unit "". An example of a suitable persistence.xml might be:<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"><persistence-unit name=""><jta-data-source>java:openejb/Resource/myDataSource</jta-data-source><non-jta-data-source>java:openejb/Resource/myUnmanagedDataSource</non-jta-data-source><properties><property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/></properties></persistence-unit></persistence>
15:56:42.167 [LogStreamAsync.Thread] ERROR OpenEJB.startup.validation - Invalid EjbModule(name=ear-scoped-cdi-beans_services-ear, path=ear-scoped-cdi-beans_services-ear)
...
Чего мне не хватает?