mercredi 4 novembre 2015

Problems to create a EntityManager + Junit + HSQLDB

I'm getting weird problem. I'm trying to do an integration testing but the Entity Manager creator is not working.

<? xml version = "1.0" encoding = "UTF-8"?>
<persistence xmlns = "http://ift.tt/UICAJV"
    xmlns: xsi = "http://ift.tt/ra1lAU"
    xsi: schemaLocation = "http://ift.tt/UICAJV http://ift.tt/O9YdEP"
    version = "2.0">
 
    <persistence-unit name = "db-test" transaction-type = "RESOURCE_LOCAL">
    
        <provider> org.hibernate.jpa.HibernatePersistenceProvider </ provider>

        <class> br.com.e2pd.model.Grupo </ class>
 
        <properties>
        <property name = "javax.persistence.jdbc.url" value = "jdbc: hsqldb: mem: db-test" />
<property name = "javax.persistence.jdbc.user" value = "sa" />
<property name = "javax.persistence.jdbc.password" value = "" />
<property name = "javax.persistence.schema-generation.database.action" value = "drop-and-create" />
<property name = "hibernate.show_sql" value = "true" />
            <property name = "hibernate.hbm2ddl.auto" value = "update" />
        </ properties>
    </ persistence-unit>
</ persistence>

public class RepositoryTest  {

    protected static EntityManagerFactory factory;
    protected static EntityManager em;

    @BeforeClass
    public static void setUpPersistence() {
        factory = Persistence.createEntityManagerFactory("db-test");
        em = factory.createEntityManager();
        em.getTransaction().begin();
    }

    @AfterClass
    public static void tearDown() {
        em.getTransaction().commit();
        em.close();
        factory.close();
    }
}

public class GrupoRepositoryTest extends RepositoryTest {

    private GrupoRepository repository;

    @Before
    public void setUp() {

        this.repository = new GrupoRepositoryImpl(em);
    }
}


@Entity
@Table(name = "grupos")
public class Grupo implements Model{

    @Id
    @GeneratedValue
    @Column(name = "id")
    private Long id;

    @Column(name = "nome")
    private String nome;

    public Grupo() {
    }

    public Grupo(Long id, String nome) {
        this.id = id;
        this.nome = nome;
    }

    //gets and sets
}

The log comes up here:

20: 53: 28.484 INFO [LogHelper] HHH000204: Processing PersistenceUnitInfo [
name: DB-test
...]
20: 53: 28.582 INFO [Version] HHH000412: Hibernate Core 5.0.2.Final {}
20: 53: 28.584 INFO [Environment] HHH000206: hibernate.properties not found
20: 53: 28.586 INFO [Environment] HHH000021: Bytecode provider name: Javassist
20: 53: 39.198 INFO [Version] HCANN000001: Hibernate Commons Annotations 5.0.0.Final {}
20: 55: 45.714 WARN [DriverManagerConnectionProviderImpl] HHH000402: Using Hibernate built-in connection pool (not for production use!)
20: 55: 45.732 INFO [DriverManagerConnectionProviderImpl] HHH000401: using driver [null] at URL [jdbc: hsqldb: mem: db-test]
20: 55: 45.733 INFO [DriverManagerConnectionProviderImpl] HHH000046: Connection properties: user = {s}
20: 55: 45.733 INFO [DriverManagerConnectionProviderImpl] HHH000006: Autocommit mode: false
20: 55: 45.740 INFO [DriverManagerConnectionProviderImpl] HHH000115: Hibernate connection pool size: 20 (min = 1) 
STOPS HERE!

And gives the exception Caused by: java.sql.SQLException: No suitable driver found for jdbc: hsqldb: mem: db-test.

To solve this exception I did it in the setUpPersistence() ( even not knowing if it is the best solution ):

try {
    Class.forName ("org.hsqldb.jdbcDriver");
    connection = DriverManager.getConnection ("jdbc: hsqldb: mem: db-test", "sa", "");
} Catch (Exception ex) {
    ex.printStackTrace ();
}

Thereafter when road testing gives the error:

java.lang.NoSuchMethodError: javax.persistence.Table.indexes () [Ljavax / persistence / Index;
at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:1080)
at org.hibernate.cfg.AnnotationBinder.bindClass (AnnotationBinder.java:765)
at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:245)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:222)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:265)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:770)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:797)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
at javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:63)
at javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:47)
at unit.br.com.e2pd.common.RepositoryTest.setUpPersistence (RepositoryTest.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source)
at java.lang.reflect.Method.invoke (Unknown Source)
org.junit.runners.model.FrameworkMethod at $ 1.runReflectiveCall (FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:47)
at org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:24)
at org.junit.internal.runners.statements.RunAfters.evaluate (RunAfters.java:27)
at org.junit.runners.ParentRunner.run (ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:192)

java.lang.NullPointerException
at unit.br.com.e2pd.common.RepositoryTest.tearDown (RepositoryTest.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source)
at java.lang.reflect.Method.invoke (Unknown Source)
org.junit.runners.model.FrameworkMethod at $ 1.runReflectiveCall (FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:47)
at org.junit.internal.runners.statements.RunAfters.evaluate (RunAfters.java:33)
at org.junit.runners.ParentRunner.run (ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:192)

Aucun commentaire:

Enregistrer un commentaire