Проверьте функциональность alternate descriptors, которая нацелена на то, что вы пытаетесь сделать.
Попробуйте эту установку:
src/main/resources/META-INF/persistence.xml
src/main/resources/META-INF/test.persistence.xml
Тогда можно построить OpenEJB предпочитать файл test.persistence.xml
, установив openejb.altdd.prefix
системы или InitialContext свойство test
A возможным решением может быть override the persistence unit properties in the test. При таком подходе вы могли бы избежать необходимости в втором persistence.xml
, который может быть приятным, так как поддержание двух может быть болью.
Вы можете использовать подход Maven, но имейте в виду, что за спецификацию поставщик постоянства будет смотреть (только сканирование) на @Entity
beans в точном банке или каталоге, где находится persistence.xml
. Так что прекрасно понимаю, что в Maven это два разных места:
target/classes
target/test-classes
EDIT Более подробную информацию о возможностях первостепенных
Вы можете переопределить любое свойство в вашем тестовую настройку с помощью свойств системы или исходных свойств контекста (включая файлы 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
Возможный дубликат [Как настроить JPA для тестирования в Maven] (http://stackoverflow.com/questions/385532/how-to-configure-jpa-for-testing-in-maven) –
Хмм , не могли бы вы добавить более подробную информацию о части OpenEJB (возможно, ссылку?). Потому что это работает с «базовыми» тестами JUnit. –
Вы используете [Application discovery через classpath] (http://openejb.apache.org/3.0/application-discovery-via-the-classpath.html)? –