Exemplo da Java Magazine 33 - hibernate

0 respostas
P

Amigos estou tentando rodar o exemplo da Java Magazine 33 sobre Hibernate na web. Acredito que consegui montar tudo correto. Mas na hora que o Tomcat Inicia ele acessa a aplicação mas sai em uma excessão que diz: Não foi possível listar as Reservas do dia …(dia de hoje no caso).

Depurei e vi que a mesagem volta da Classe ReservaDAO.

Esse trecho:
Session ses = TransacaoAplicacao.getSessao();

volta null.

O exemplo usa o pool de conexões do tomcat. Acho que não estou sabendo configurar corretamente o pool de conexões para acessar o hsqldb.

alguém pode me ajudar?

ReservaDAO.java:

package persistencia;

import java.text.DateFormat;

import java.util.<em>;

import org.hibernate.</em>;

import org.hibernate.exception.*;

public class ReservaDAO {

//TODO: este DAO sempre inicia e finaliza suas próprias transações, portanto não pode ser usada como parte de uma transação maior
//TODO: deveria haver um objeto de negócios (ou fachada) para fazer este controle

public ReservaDAO() {
}

public Sala leSala(int id) {

try {

Session ses = TransacaoAplicacao.getSessao();

Sala sala = (Sala) ses.get(Sala.class, new Integer(id));

TransacaoAplicacao.confirma();

return sala;

}

catch (Exception e) {

TransacaoAplicacao.aborta();

throw new PersistenciaException("Não foi possível recuperar a Sala " + id, e);

}

}
public List listaSalas() {

try {

Session ses = TransacaoAplicacao.getSessao();

Query query = ses.createQuery(from Sala s order by s.nome);

List resultado = query.list();

TransacaoAplicacao.confirma();

return resultado;

}

catch (Exception e) {

TransacaoAplicacao.aborta();

throw new PersistenciaException(Não foi possível listar as Salas”, e);

}

}
public void salvaReserva(Reserva r) {

try {

Session ses = TransacaoAplicacao.getSessao();

ses.saveOrUpdate®;

//TODO: Tirar todos os confirmas e deixar que alguém (o controlador?) faça isto???

TransacaoAplicacao.confirma();

}

catch (ConstraintViolationException e) {

TransacaoAplicacao.aborta();

DateFormat df = DateFormat.getInstance();

throw new InsercaoDuplicadaException("Outro usuário já fez uma reserva para a sala " +

r.getSala().getNome() + " no dia " + df.format(r.getInicio()), e);

}

catch (StaleObjectStateException e) {

TransacaoAplicacao.aborta();

throw new LockOtimistaException(A Reserva " + r.getId() + " ¡ foi alterada por outro usuário, e);

}

catch (Exception e) {

TransacaoAplicacao.aborta();

throw new PersistenciaException("Não foi possível salvar a Reserva: " + r.getId(), e);

}

}
public void cancelaReserva(Reserva r) {

try {

Session ses = TransacaoAplicacao.getSessao();

ses.delete®;

TransacaoAplicacao.confirma();

}

catch (StaleObjectStateException e) {

TransacaoAplicacao.aborta();

throw new LockOtimistaException(A Reserva " + r.getId() + " ¡ foi alterada por outro usuário, e);

}

catch (Exception e) {

TransacaoAplicacao.aborta();

throw new PersistenciaException("Não foi possível salvar a Reserva: " + r.getId(), e);

}

}
public Reserva leReserva(int id) {

try {

Session ses = TransacaoAplicacao.getSessao();

Query query = ses.createQuery(

"from Reserva r join fetch r.sala s " +

"where <a href="http://r.id">r.id</a> = :id ");

query.setParameter(“id”, new Integer(id));

List resultado = query.list();

TransacaoAplicacao.confirma();

if (resultado.size() == 1)

return (Reserva)resultado.get(0);

else

return null;

}

catch (Exception e) {

TransacaoAplicacao.aborta();

throw new PersistenciaException("Não foi possível recuperar a Reserva " + id, e);

}

}
public List listaReservasSala(int sala, Calendar inicio, Calendar fim) {

return listaReservasSala(sala, inicio.getTime(), fim.getTime());

}
public List listaReservasSala(int sala, Date inicio, Date fim) {

try {

Session ses = TransacaoAplicacao.getSessao();

Query query = ses.createQuery(

"from Reserva r join fetch r.sala s " +

"where <a href="http://s.id">s.id</a> = :sala " +

"and r.inicio >= :inicio and r.inicio <= :fim " +

“order by hour(r.inicio), dayofweek(r.inicio)”);

query.setParameter(“sala”, new Integer(sala));

query.setParameter(“inicio”, inicio);

query.setParameter(“fim”, fim);

List resultado = query.list();

TransacaoAplicacao.confirma();

return resultado;

}

catch (Exception e) {

TransacaoAplicacao.aborta();

throw new PersistenciaException("Não foi possível listar as Reservas para a sala "
  • sala + " no período indicado", e);
    }
    }
public List listaReservasDia(Date data) {

Calendar cal = Calendar.getInstance();

cal.setTime(data);

cal.set(Calendar.HOUR_OF_DAY, 0);

cal.set(Calendar.MINUTE, 0);

cal.set(Calendar.SECOND, 0);

data = cal.getTime();

cal.add(Calendar.DAY_OF_MONTH, 1);

try {

Session ses = TransacaoAplicacao.getSessao();

Query query = ses.createQuery(

"from Reserva r join fetch r.sala s " +

"where r.inicio >= :inicio and r.inicio <= :fim " +

"order by hour(r.inicio), s.nome ");

query.setParameter(inicio, data);

query.setParameter(fim, cal.getTime());

List resultado = query.list();

TransacaoAplicacao.confirma();

return resultado;

}

catch (Exception e) {

TransacaoAplicacao.aborta();

throw new PersistenciaException("Não foi possível listar as Reservas do dia "
  • data, e);
    }
    }
    }

context.xml:

<?xml version=“1.0” encoding=“UTF-8”?>
<Context path="/reservaSalas">

<!-- para o Tomcat 5.5 -->
<Resource name=“jdbc/Reservas” auth=“Container” type=“javax.sql.DataSource"
maxActive=“1” maxIdle=“0” maxWait=”-1"
username=“sa” password="" driverClassName="org.hsqldb.jdbcDriver"
url=“jdbc:hsqldb:file:C:\bd\Reservas;shutdown=true”/>

<!-- para o Tomcat 5.0 -->
<!–
<Resource name="jdbc/Reservas"
auth="Container"
type=“javax.sql.DataSource” />
–>

<!–
<ResourceParams name=“jdbc/Reservas”>
–>

<!-- Se permitir mais conexões, vou precisar de um meio de fazer
o shutdown do HSQLDB.
Poderia usar o ContextListenerr -->
<!–
<parameter>
<name>maxActive</name>
<value>1</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>0</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>

<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.hsqldb.jdbcDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:hsqldb:file:/home/lozano/jm/reservas;shutdown=true</value>
</parameter>
–>

<!–
</ResourceParams>
–>

</Context>

hibernate.cfg.xml

<?xml version=‘1.0’ encoding=‘utf-8’?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>

<hibernate-configuration>

&lt;session-factory&gt;

    &lt;!-- Parâmetros de conexão ao banco de dados --&gt;
    &lt;property name="connection.datasource"&gt;java:/comp/env/jdbc/Reservas&lt;/property&gt;
    
    &lt;property name="connection.driver_class"&gt;org.hsqldb.jdbcDriver&lt;/property&gt;
    &lt;property name="connection.url"&gt;jdbc:hsqldb:file:C:\bd\Reservas;shutdown=true&lt;/property&gt;
    &lt;property name="connection.username"&gt;sa&lt;/property&gt;
    &lt;property name="connection.password"&gt;&lt;/property&gt;
    
    &lt;!-- Dialeto SQL do banco --&gt;
    &lt;property name="dialect"&gt;org.hibernate.dialect.HSQLDialect&lt;/property&gt;

    &lt;!-- Exibe comandos SQL na saída padrão --&gt;
    &lt;property name="show_sql"&gt;false&lt;/property&gt;

    &lt;!-- Arquivos de mapeamento OO/Relacional --&gt;
    &lt;mapping resource="persistencia/Sala.hbm.xml"/&gt;
    &lt;mapping resource="persistencia/Reserva.hbm.xml"/&gt;

&lt;/session-factory&gt;

</hibernate-configuration>

Criado 1 de junho de 2006
Respostas 0
Participantes 1