2010-10-28 2 views
5

Это мой SLSB:Как правильно настроить встроенный контейнер OpenEJB для тестов?

@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? Я потерял в их examples and documentation .. :(

Это проект Maven-3.

ответ

6

Я хотел бы предложить размещение файла с именем jndi.properties в src/test/resources для конфигурации OpenEJB. Это будет доступно в тестовом пути к классам , вы можете использовать без аргументов застройщика из InitialContext для поиска источников данных и 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 с этим источником данных, если это единственный источник данных, тогда это должно работать, даже если имена разные.

Edit: настройки Постоянство блок

Согласно documentation you referenced она также должна быть обеспечена возможность настройки свойств единицы сохранения через jndi.properties:

abc.hibernate.hbm2ddl.auto=update 
abc.hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect 

Я не проверял это сам, так как я используя mysql для обоих тестов и нормальных исполнений, только с разными именами баз данных. Пожалуйста, дайте мне знать, если это работает, я тоже думал о замене mysql в моих тестовых таблицах.

+0

örn Спасибо, не могли бы вы указать в своем ответе, как мне настроить свойства Hibernate для этого источника данных (или единицы продолжительности) .. Или, может быть, вы можете указать ссылку, в которой эта информация будет раскрыта? – yegor256

+0

@ Vincenzo, я отредактировал свой ответ, пожалуйста, дайте мне знать, если это сработает. –

+0

örn Большое спасибо, теперь это работает! – yegor256

Смежные вопросы