Проверьте функциональность альтернативных дескрипторов , которая предназначена для того, что вы пытаетесь сделать.
Попробуйте эту настройку:
src/main/resources/META-INF/persistence.xml
src/main/resources/META-INF/test.persistence.xml
Затем вы можете создать OpenEJB для предпочтения файла test.persistence.xml
, установив для свойства openejb.altdd.prefix
System или InitialContext значение test
Aдругое возможное решение может заключаться в переопределении свойств единицы сохраняемости в тесте .При таком подходе вы можете избежать потребности во второй persistence.xml
, что может быть приятно, так как поддержание двух может быть проблемой.
Вы можете использовать подход Maven, но помните, что в соответствии со спецификацией поставщик персистентности будет толькоищите (или сканируйте) для @Entity
bean-компонентов в точном jar или каталоге, где находится persistence.xml
.Так что имейте в виду, что в Maven это два разных места:
target/classes
target/test-classes
РЕДАКТИРОВАТЬ Подробнее о переопределяющих возможностях
Вы можете переопределить любое свойство в настройках теста с помощью либо системных свойств, либо свойств начального контекста (включая файлы jndi.properties).Формат:
<unit-name>.<property>=<value>
Так, например, со следующим persistence.xml
:
<persistence>
<persistence-unit name="movie-unit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>movieDatabase</jta-data-source>
<non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.max_fetch_depth" value="3"/>
</properties>
</persistence-unit>
</persistence>
Вы можете переопределить и добавить постоянствосвойства объекта в вашем тестовом случае.В настоящее время нет средств для их удаления (если у вас есть необходимость, дайте нам знать - это пока не получится).
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.LocalInitialContextFactory");
p.put("movie-unit.hibernate.hbm2ddl.auto", "update");
p.put("movie-unit.hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
context = new InitialContext(p);
Или через файл jndi.properties
java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory
movie-unit.hibernate.hbm2ddl.auto = update
movie-unit.hibernate.dialect = org.hibernate.dialect.HSQLDialect