Pregunta

Esta es mi SLSB:

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

Esta 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 contenedores incrustado OpenEJB. 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 probar. ¿Cómo puedo instruir 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 sus ejemplos y documentación ..: (

Es un proyecto Maven-3.

¿Fue útil?

Solución

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 ve como este, 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 entonces debe reemplazar automáticamente la referencia en persistence.xml con esta fuente de datos, si esta es la única fuente de datos, entonces esto debería funcionar incluso si los nombres son diferentes.

Editar Configuración de unidad de persistencia

De acuerdo con la documentación href="http://openejb.apache.org/3.0/configuring-persistenceunits-in-tests.html" rel="noreferrer"> también debería ser posible configurar la persistencia propiedades de la unidad a través jndi.properties:

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

No he probado esto mismo ya que estoy usando MySQL para ambas pruebas y ejecuciones normales, sólo que con diferentes nombres de bases de datos. Por favor, hágamelo saber si esto funciona, he estado pensando sobre la sustitución de MySQL en mis casos de prueba también.

scroll top