Domanda

Questa è la mia SLSB:

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

Questa è la mia persistence.xml (sto usando v3 Glassfish):

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

Ora sto cercando di creare un test, utilizzando OpenEJB contenitore incorporato. Questa è la mia classe di 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
  }
}

Vorrei utilizzare HSQL per il test. Come posso istruire OpenEJB che la mia unità di persistenza "abc" deve puntare a HSQL durante i test? Devo creare una nuova versione di persistence.xml? Devo usare openejb.xml? Mi sono perso nei loro esempi e documentazione ..: (

E 'un progetto Maven-3.

È stato utile?

Soluzione

Vorrei suggerire mettere un file chiamato jndi.properties in src/test/resources per la configurazione OpenEJB. Questo sarà quindi disponibile nel percorso di classe di prova, è possibile utilizzare il contructor senza argomenti di InitialContext di ricercare origini dati e EJB. Un aspetto di configurazione di esempio come questo, sto usando mysql per la mia origine dati:

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 dovrebbe quindi sostituire automaticamente il riferimento in persistence.xml con questa origine dati, se questa è l'unica origine dati allora questo dovrebbe funzionare anche se i nomi sono diversi.

Modifica Impostazioni unità di persistenza

Secondo il documentazione si fa riferimento dovrebbe anche essere possibile configurare la persistenza proprietà delle unità tramite jndi.properties:

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

Non ho provato io stesso dal momento che sto usando mysql per entrambi i test e le esecuzioni normali, solo con nomi diversi database. Per favore fatemi sapere se questo funziona, ho pensato di sostituire mysql nei miei testcases troppo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top