Frage

Das ist mein SLSB:

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

Das ist mein persistence.xml (ich bin mit 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>

Jetzt versuche ich, einen Test zu erstellen, OpenEJB eingebettete Behälter verwenden. Dies ist mein Test-Klasse:

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

Ich möchte HSQL verwenden, um zu testen. Wie kann ich anweisen OpenEJB, dass meine Persistenzeinheit "abc" während des Tests zu HSQL-zu-Punkt hat? Soll ich eine neue Version von persistence.xml erstellen? Soll ich openejb.xml benutzen? Ich bin in den Beispielen und Dokumentation verloren ..: (

Es ist ein Maven-3-Projekt.

War es hilfreich?

Lösung

Ich würde vorschlagen, eine Datei mit dem Namen jndi.properties in src/test/resources für Ihre OpenEJB Konfiguration platzieren. Dies wird dann im Test Classpath verfügbar sein, können Sie dann das nicht-Argument contructor von Initialdatenquellen und EJBs zum Nachschlagen verwenden können. Eine Beispielkonfiguration sieht wie folgt aus, ich bin mit MySQL für meine Datenquelle:

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 sollte dann automatisch die Referenz in persistence.xml mit dieser Datenquelle ersetzen, wenn dies die einzige Datenquelle, dann sollte dies funktionieren, auch wenn die Namen unterschiedlich sind.

Edit: Persistenzeinheit Einstellungen

Nach der Dokumentation referenzierten Sie soll es auch sein, möglich configure Persistenzeinheit Eigenschaften durch jndi.properties:

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

Ich habe das selbst nicht getestet, da ich mysql bin mit den beiden für Tests und normalen Ausführungen, nur mit anderen Datenbanknamen. Bitte lassen Sie mich wissen, ob das funktioniert, ich Denken bin über zu mysql in meinem Testfall zu ersetzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top