2010-10-28 15 views
5

Esta es mi SLSB:¿Cómo configurar el contenedor OpenEJB integrado para las pruebas correctamente?

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

Ésta es mi persistence.xml (estoy 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> 

Ahora estoy tratando de crear una prueba, utilizando OpenEJB contenedor embebido. Esta es mi clase de prueba:

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

Me gustaría utilizar HSQL para la prueba. ¿Cómo puedo instruir a OpenEJB que mi unidad de persistencia "abc" tiene que apuntar a HSQL durante la prueba? ¿Debo crear una nueva versión de persistence.xml? ¿Debo usar openejb.xml? Estoy perdido en su examples and documentation .. :(

Es un proyecto Maven-3.

Respuesta

6

Yo sugeriría colocar un archivo llamado jndi.properties en src/test/resources para su configuración OpenEJB. Esto luego estará disponible en la ruta de clase de prueba , a continuación, puede utilizar el contructor sin argumentos de InitialContext para buscar fuentes de datos y los EJB Un ejemplo de configuración se parece a esto, estoy usando MySQL para mi fuente de datos:.

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 debe vuelva a colocar automáticamente la referencia en la persistencia .xml con esta fuente de datos, si esto es el único datasource entonces esto debería funcionar incluso si los nombres son diferentes.

Editar: ajustes de la unidad de persistencia

De acuerdo con la documentation you referenced también debería ser posible configurar propiedades de la unidad de persistencia a través jndi.properties:

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

No he probado esto mismo desde que Estoy usando mysql para pruebas y ejecuciones normales, solo con diferentes nombres de bases de datos. Por favor, avíseme si esto funciona, he estado pensando en reemplazar mysql en mis testcases también.

+0

örn Gracias, podrían indicar en su respuesta cómo puedo configurar las propiedades de Hibernate para esta fuente de datos (o unidad de persistencia) .. ¿O tal vez puede dar un enlace donde se divulgue esta información? – yegor256

+0

@Vincenzo, edité mi respuesta. Por favor, avíseme si esto funciona. –

+0

örn Muchas gracias, ¡ahora funciona! – yegor256

Cuestiones relacionadas