Как настроить встроенный контейнер OpenEJB для правильных тестов?
Вопрос
Это мой SLSB:
@Stateless
public class MyService {
PersistenceContext(unitName = "abc")
EntityManager em;
public boolean exists(int id) {
return this.em.find(Employee.class, id) != null;
}
}
Это мое persistence.xml
(Я использую Glassfish v3):
<persistence>
<persistence-unit name="abc">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/MyDS</jta-data-source>
<properties>
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQLInnoDBDialect" />
</properties>
</persistence-unit>
</persistence>
Теперь я пытаюсь создать тест, используя встроенный контейнер OpenEJB. Это мой класс тестов:
class MyServiceText {
@Test
public void testChecksExistence() throws Exception {
Properties properties = new Properties();
properties.setProperty(
javax.naming.Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory"
);
InitialContext ic = new InitialContext(properties);
// actual testing skipped
}
}
Я хотел бы использовать HSQL для тестирования. Как я могу поручить OpenEJB, что мой настойчивый блок "abc"
должен указывать на HSQL во время тестирования? Должен ли я создать новую версию persistence.xml
? Должен ли я использовать openejb.xml
? Я потерян в их Примеры и документация.. :(
Это проект Maven-3.
Решение
Я бы предложил разместить файл с именем jndi.properties
в src/test/resources
Для вашей конфигурации OpenEJB. Затем это будет доступно в тестовой патрубке, вы можете затем использовать эффект NO-аргументации INANTERCONTEXT для поиска создания данных и EJBS. Пример конфигурации выглядит так, я использую MySQL для моего источника данных:
java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory
myDS=new://Resource?type=DataSource
myDS.JdbcDriver=com.mysql.jdbc.Driver
myDS.JdbcUrl=jdbc:mysql://127.0.0.1:3306/test
myDS.JtaManaged=true
myDS.DefaultAutoCommit=false
myDS.UserName=root
myDS.Password=root
OpeneJB должен затем автоматически заменить ссылку на постоянство .xml с этим источником данных, если это единственная история данных, то это должно работать, даже если имена разные.
Редактировать: Настройки установки установки
Согласно Документация, которую вы ссылались Следует также возможно настроить свойства блока постоянства через jndi.properties:
abc.hibernate.hbm2ddl.auto=update
abc.hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
Я не проверил это сам, так как я использую MySQL для тестов, так и для обычных казней, только с разными именами баз данных. Пожалуйста, дайте мне знать, если это работает, я тоже думал о замене MySQL в моих тестированиях.