Question

Ceci est mon SLSB:

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

Ceci est mon persistence.xml (j'utilise 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>

Maintenant, je suis en train de créer un test, en utilisant conteneur embarqué OpenEJB. Ceci est ma classe de test:

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

Je voudrais utiliser HSQL pour tester. Comment puis-je Instruire OpenEJB que mon unité de persistance "abc" doit pointer vers HSQL au cours des essais? Dois-je créer une nouvelle version de persistence.xml? Dois-je utiliser openejb.xml? Je suis perdu dans leurs exemples et la documentation ..: (

Il est un projet Maven-3.

Était-ce utile?

La solution

Je suggère de placer un fichier nommé jndi.properties dans src/test/resources pour votre configuration OpenEJB. Ce sera alors disponible dans le classpath de test, vous pouvez alors utiliser le contructor sans argument de InitialContext pour rechercher et sources de données EJB. Un exemple de configuration ressemble à ceci, j'utilise MySQL pour mon source de données:

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 doit alors remplacer automatiquement la référence en persistence.xml avec cette source de données, si cela est la seule source de données alors que cela devrait fonctionner même si les noms sont différents.

Edit: Paramètres de l'unité sur la persistance

Selon le documentation vous avez fait référence il devrait également être possible de configurer la persistance des propriétés de l'unité par jndi.properties:

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

Je n'ai pas testé moi-même depuis que je suis en utilisant MySQL pour les tests et les exécutions normales, uniquement avec des noms de bases de données différentes. S'il vous plaît laissez-moi savoir si cela fonctionne, j'ai pensé à remplacer mysql dans mes testcases aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top