Cara também estou tentando rodar o exemplo. Dá o seguinte erro:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
persistencia.PersistenciaException: Não foi possÃvel listar as Reservas do dia Wed May 24 00:00:00 GMT 2006 persistencia.ReservaDAO.listaReservasDia(ReservaDAO.java:150)
apresentacao.ControladorMapas.exibeMapaDiario(ControladorMapas.java:123)
apresentacao.ControladorMapas.doGet(ControladorMapas.java:46)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.15 logs.
Meus arquivos:
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>
web.xml:
<?xml version=“1.0” encoding=“UTF-8”?>
<web-app version=“2.4” xmlns=“http://java.sun.com/xml/ns/j2ee” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”>
<servlet>
<servlet-name>mapas</servlet-name>
<servlet-class>apresentacao.ControladorMapas</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mapas</servlet-name>
<url-pattern>/mapa/</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>reservas</servlet-name>
<servlet-class>apresentacao.ControladorReservas</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>reservas</servlet-name>
<url-pattern>/reserva/</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/fmt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/fmt-rt</taglib-uri>
<taglib-location>/WEB-INF/fmt-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/core-rt</taglib-uri>
<taglib-location>/WEB-INF/c-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/sql</taglib-uri>
<taglib-location>/WEB-INF/sql.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/sql-rt</taglib-uri>
<taglib-location>/WEB-INF/sql-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/x</taglib-uri>
<taglib-location>/WEB-INF/x.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/x-rt</taglib-uri>
<taglib-location>/WEB-INF/x-rt.tld</taglib-location>
</taglib>
</web-app>
Estou tentendo usar o Pool de Conexão do Tomcat? Seria o caso de ele não estar conseguindo isso?
Depurei e vi que a mesagem volta da Classe ReservaDAO.
Esse trecho:
Session ses = TransacaoAplicacao.getSessao();
volta null.
Algúém sabe me dizer o porquê?
ReservaDAO.java:
package persistencia;
import java.text.DateFormat;
import java.util.;
import org.hibernate.;
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(r);
//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() + " já 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(r);
TransacaoAplicacao.confirma();
}
catch (StaleObjectStateException e) {
TransacaoAplicacao.aborta();
throw new LockOtimistaException("A Reserva " + r.getId() + " já 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 r.id = :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 s.id = :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);
}
}
}