JPA + toplink + HSQLDB + Table not found

Boa tarde pessoal, estou a procurar uma solução para este problema a dias e não estou conseguindo resolver.
Estou tentando executar um teste no myjavaserver usando JPA e HSQLDB (versão 1.6 que roda no myjavaserver), porém não funciona com os testes que estu realizando no netbeans 6.
Segue abaixo meu persistence.xml, meu pojo, meu programa de teste e meu script de criação da tabela.
persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="LoginETEPU" transaction-type="RESOURCE_LOCAL">
    <provider>oracle.toplink.essentials.PersistenceProvider</provider>
    <class>login.Turma</class>
    <class>login.Pessoa</class>
    <class>login.Login</class>
    <properties>
      <property name="toplink.jdbc.user" value="sa"/>
      <property name="toplink.jdbc.password" value=""/>
      <property name="toplink.jdbc.url" value="jdbc:hsqldb:base.ete"/>
      <property name="toplink.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
    </properties>
  </persistence-unit>
</persistence>

POJO

package login;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author gilson
 */
@Entity
@Table(name = "TURMA")
@NamedQueries({@NamedQuery(name = "Turma.findById", query = "SELECT t FROM Turma t WHERE t.id = :id"), @NamedQuery(name = "Turma.findByDescricao", query = "SELECT t FROM Turma t WHERE t.descricao = :descricao")})
public class Turma implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "ID", nullable = false)
    private Integer id;
    @Column(name = "DESCRICAO")
    private String descricao;

    public Turma() {
    }

    public Turma(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Turma)) {
            return false;
        }
        Turma other = (Turma) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "login.Turma[id=" + id + "]";
    }

}

programa


import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import login.Turma;

public class Programa {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("LoginETEPU");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        
        Turma t = new Turma();
        //t.setId(1);
        t.setDescricao("jan-2007");
        em.persist(t);
        tx.commit();
        em.close();
    }

}

script

CREATE TABLE TURMA(
	ID INTEGER NOT NULL IDENTITY,
	DESCRICAO VARCHAR(20),
	PRIMARY KEY(ID));

O problema quando rodo o exemplo é este:
ERRO

Internal Exception: java.sql.SQLException: Table not found: LOGINETE.TURMA in statement [INSERT INTO LoginETE.TURMA (ID, DESCRICAO) VALUES (NULL, 'jan-2007')]
Error Code: 0
Call: INSERT INTO LoginETE.TURMA (ID, DESCRICAO) VALUES (?, ?)
        bind => [null, jan-2007]
Query: InsertObjectQuery(login.Turma[id=null])
Exception in thread "main" javax.persistence.RollbackException: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Table not found: LOGINETE.TURMA in statement [INSERT INTO LoginETE.TURMA (ID, DESCRICAO) VALUES (NULL, 'jan-2007')]
Error Code: 0
Call: INSERT INTO LoginETE.TURMA (ID, DESCRICAO) VALUES (?, ?)
        bind => [null, jan-2007]
Query: InsertObjectQuery(login.Turma[id=null])
        at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:120)
        at oracle.toplink.essentials.internal.ejb.cmp3.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:60)
        at Programa.main(Programa.java:19)
Caused by: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Table not found: LOGINETE.TURMA in statement [INSERT INTO LoginETE.TURMA (ID, DESCRICAO) VALUES (NULL, 'jan-2007')]
Error Code: 0
Call: INSERT INTO LoginETE.TURMA (ID, DESCRICAO) VALUES (?, ?)
        bind => [null, jan-2007]
Query: InsertObjectQuery(login.Turma[id=null])
        at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:311)
        at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:654)
        at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:703)
        at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:492)
        at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:452)
        at oracle.toplink.essentials.internal.sessions.AbstractSession.executeCall(AbstractSession.java:690)
        at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
        at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:214)
        at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.insertObject(DatasourceCallQueryMechanism.java:346)
        at oracle.toplink.essentials.internal.queryframework.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:191)
        at oracle.toplink.essentials.internal.queryframework.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:205)
        at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:564)
        at oracle.toplink.essentials.queryframework.InsertObjectQuery.executeCommit(InsertObjectQuery.java:89)
        at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.performUserDefinedWrite(DatabaseQueryMechanism.java:750)
        at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.performUserDefinedInsert(DatabaseQueryMechanism.java:714)
        at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.insertObjectForWriteWithChangeSet(DatabaseQueryMechanism.java:602)
        at oracle.toplink.essentials.queryframework.WriteObjectQuery.executeCommitWithChangeSet(WriteObjectQuery.java:162)
        at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:390)
        at oracle.toplink.essentials.queryframework.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:109)
        at oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:628)
        at oracle.toplink.essentials.queryframework.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:555)
        at oracle.toplink.essentials.queryframework.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:138)
        at oracle.toplink.essentials.queryframework.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:110)
        at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2233)
        at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:952)
        at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:909)
        at oracle.toplink.essentials.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:269)
        at oracle.toplink.essentials.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:190)
        at oracle.toplink.essentials.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:2657)
        at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1044)
        at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:403)
        at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1126)
        at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:107)
        at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:856)
        at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:102)
        ... 2 more
Caused by: java.sql.SQLException: Table not found: LOGINETE.TURMA in statement [INSERT INTO LoginETE.TURMA (ID, DESCRICAO) VALUES (NULL, 'jan-2007')]
        at org.hsqldb.Trace.getError(Trace.java:180)
        at org.hsqldb.jdbcResultSet.<init>(jdbcResultSet.java:2645)
        at org.hsqldb.jdbcConnection.executeStandalone(jdbcConnection.java:994)
        at org.hsqldb.jdbcConnection.execute(jdbcConnection.java:721)
        at org.hsqldb.jdbcStatement.fetchResult(jdbcStatement.java:686)
        at org.hsqldb.jdbcStatement.executeUpdate(jdbcStatement.java:85)
        at org.hsqldb.jdbcPreparedStatement.executeUpdate(jdbcPreparedStatement.java:152)
        at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:647)
        ... 35 more

Só gostaria de lembrar que o POJO foi criado pelo próprio netbeans…

Qualquer ajuda será bem-vinda…muito obrigado a todos.
[]´s
Gilson

Tow passando pelo mesmo problema. Chegou a resolvê-lo?

No meu caso eu cometi engano. Criei tabelas e populei num canto e acessei em outro.
E parece que quando você conecta standalone (usando o front-end do hsqldb, por exemplo) ele não deixa outros conectarem.

Se o seu caso não é nenhum destes, pode ser que vc tenha configurado o banco como transiente e assim que ele pára, apaga tudo.

No caso do uso do JPA eu acredito que exista este problema de não conseguir fazer mais do que uma conexão simultaneamente. Estava usando o site do myjavaserver para testes e acabei abandonando a idéia por não conseguir resolver. Caso consiga uma solução para isto, por favor entre em contato.

[]´s

Se vc inicializar o banco como Server e acessar no JPA como URL vai funcionar conexões simultâneas.

<property name="toplink.jdbc.url" value="jdbc:hsqldb:hsql://localhost"/>

Bom dia BiraBoy,

Você já usou o MyJavaserver? será que dá para usar HSQLDB como server lá?

Obrigado pela dica…Vou estudar a possibilidade e qualquer coisa posto aqui depois.

Valew!! :lol:

Entendi. Cara, eu só seu usá-lo em mais de uma thread quando se trata de usar nesse formato que te falei. Como você não teria como fazê-lo implantando num servidor web, só resta usar a forma de acesso direto ao banco via arquivo. Pode ser que desta maneira ele permita várias threads, mas eu não sei configurar assim. Seria o caso de ler a documentação.