Pergunta

Este é o meu SLSB:

@Stateless
public class MyService {
  PersistenceContext(unitName = "abc")
  EntityManager em;
  public boolean exists(int id) {
    return this.em.find(Employee.class, id) != null;
  }
}

Este é meu persistence.xml (Estou usando 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>

Agora estou tentando criar um teste, usando o contêiner incorporado OpenEJB. Esta é a minha aula de teste:

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
  }
}

Eu gostaria de usar o HSQL para testes. Como posso instruir o OpenEjb que minha unidade de persistência "abc" Tem que apontar para o HSQL durante o teste? Devo criar uma nova versão de persistence.xml? Devo usar openejb.xml? Estou perdido em seus Exemplos e documentação.. :(

É um projeto MAVEN-3.

Foi útil?

Solução

Eu sugeriria colocar um arquivo chamado jndi.properties dentro src/test/resources Para sua configuração OpenEJB. Isso estará disponível no Test ClassPath, você poderá usar o contrato de nenhum argumento do InitialContext para procurar fontes de dados e EJBs. Um exemplo de configuração se parece com isso, estou usando o MySQL para o meu DataSource:

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

O OpenEJB deve então substituir automaticamente a referência no persistence.xml por esse conjunto de dados, se esse for o único conjunto de dados, isso deve funcionar mesmo que os nomes sejam diferentes.

Editar: Configurações da unidade de persistência

De acordo com documentação que você referenciou Também deve ser possível configurar as propriedades da unidade de persistência por meio de jndi.properties:

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

Eu também não testei isso, pois estou usando o MySQL para testes e execuções normais, apenas com diferentes nomes de banco de dados. Informe -me se isso funciona, eu também tenho pensado em substituir o MySQL nas minhas casas de teste.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top