Problemas com Hibernate

Pessoal, estou fazendo testezinhos que usam struts e hibernate. Estou apanhando disso hoje o dia inteiro, uma coisinha atrás da outra. No momento, estou esbarrando com o seguinte erro:

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: The user must supply a JDBC connection
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

root cause

java.lang.UnsupportedOperationException: The user must supply a JDBC connection
	net.sf.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:32)
	net.sf.hibernate.impl.BatcherImpl.openConnection(BatcherImpl.java:292)
	net.sf.hibernate.impl.SessionImpl.connect(SessionImpl.java:3373)
	net.sf.hibernate.impl.SessionImpl.connection(SessionImpl.java:3333)
	net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:67)
	net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:784)
	net.sf.hibernate.loader.Loader.doQuery(Loader.java:269)
	net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:138)
	net.sf.hibernate.loader.Loader.doList(Loader.java:1063)
	net.sf.hibernate.loader.Loader.list(Loader.java:1054)
	net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:854)
	net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1554)
	net.sf.hibernate.impl.QueryImpl.list(QueryImpl.java:49)
	net.app.MateriaPrimaService.getMateriaPrimaList(MateriaPrimaService.java:177)
	org.apache.jsp.AddMateriaPrima_jsp._jspService(org.apache.jsp.AddMateriaPrima_jsp:111)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

Meu hibernate.cfg.xml está no diretorio classes, da seguinte forma:

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

<hibernate-configuration>

    <session-factory>

	<property name="dialect">net.sf.hibernate.dialect.FirebirdDialect</property>
	<property name="connection.driver_class">org.firebirdsql.jdbc.FBDriver</property>
	<property name="connection.url">jdbc:firebirdsql:localhost/3050:E:\Leticia\Java\BD\teste.fdb</property>
	<property name="connection.username">sysdba</property>
	<property name="connection.password">masterkey</property> 

        <!-- Mapping files -->
        <mapping resource="MateriaPrima.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

Os fontes estão dentro do mesmo diretorio classes, só que no pacote net.app.

Já consegui fazer anteriormente, sem problemas, exemplos com struts, sem hibernate. Por alguma razão, na hora de juntar os dois estou apanhando mais que mulher de soldado bêbado que descobriu que é corno.

Agradeço a atenção,

Até mais

Ele está dizendo que você tem que “entregar” as conexões pra ele, porque você não definiu nenhum provedor de conexões pra ele. Porque você não está usando os pools de conexões dele?

Não estou usando porque… não sei pq.

Pro BD só o que fiz foi configurar o hibernate.cfg.xml conforme coloquei acima e tem um arquivo ConnectionFactory.java que está conforme abaixo:

package net.app;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.MappingException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;

public class ConnectionFactory
{

	private static ConnectionFactory instance = null;
	private SessionFactory sessionFactory = null;

	private ConnectionFactory()
	{
		// Estabelece SessionFactory pro Hibernate
		try
		{

			Configuration cfg = new Configuration().addClass(MateriaPrima.class);
			sessionFactory = cfg.buildSessionFactory();

		}
		catch (MappingException e)
		{
			System.err.println("Exception de Mapeamento" + e.getMessage());
			throw new RuntimeException(e);
		}
		catch (HibernateException e)
		{
			System.err.println("Exception do Hibernate" + e.getMessage());
			throw new RuntimeException(e);
		}

	}

	public static synchronized ConnectionFactory getInstance()
	{
		if (instance == null)
		{
			instance = new ConnectionFactory();
		}
		return instance;
	}

	public Session getSession()
	{
		try
		{
			Session s = sessionFactory.openSession();
			return s;
		}
		catch (HibernateException e)
		{
			System.err.println("Exception do Hibernate" + e.getMessage());
			throw new RuntimeException(e);
		}
	}

}

Estou cometendo algum grave erro? :shock: :oops:

Você está cometendo um erro terrível, não está deixando o Hibernate se conectar ao banco de dados :lol:

Adiciona isso aí no teu .cfg.xml

<property name="hibernate.dbcp.maxActive">100</property>
<property name="hibernate.dbcp.whenExhaustedAction">1</property> 
<property name="hibernate.dbcp.maxWait ">120000</property> 
<property name="hibernate.dbcp.maxIdle">10</property> 
<property name="hibernate.dbcp.ps.maxActive">100</property> 
<property name="hibernate.dbcp.ps.whenExhaustedAction">1</property> 
<property name="hibernate.dbcp.ps.maxWait">120000</property> 
<property name="hibernate.dbcp.ps.maxIdle">10</property> 

E coloque o commons-pool e o commons-dbcp no seu classpath.

Continuo não deixando ele se conectar ao database.

Fiz as mudanças que vc sugeriu, e infelizmente ficou na mesma. Daí dei uma pesquisada e percebi que o nome das propriedades que eu estava usando era diferente de algumas referências que achei na web… então fiz mudanças no meu .cfg.xml e ele ficou:

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

<hibernate-configuration>

    <session-factory>

      <property name="hibernate.connection.driver_class">org.firebirdsql.jdbc.FBDriver</property>
      <property name="hibernate.connection.url">jdbc:firebirdsql:localhost/3050:E:\Leticia\Java\BD\teste.fdb</property>
      <property name="hibernate.connection.username">sysdba</property>
      <property name="hibernate.connection.password">masterkey</property>
      <property name="hibernate.connection.pool_size">10</property>
      <property name="show_sql">true</property>
      <property name="dialect">net.sf.hibernate.dialect.FirebirdDialect</property>
      <property name="hibernate.hbm2ddl.auto">update</property>
      <property name="hibernate.dbcp.maxActive">100</property>
 	<property name="hibernate.dbcp.whenExhaustedAction">1</property> 
	<property name="hibernate.dbcp.maxWait ">120000</property> 
	<property name="hibernate.dbcp.maxIdle">10</property> 
	<property name="hibernate.dbcp.ps.maxActive">100</property> 
	<property name="hibernate.dbcp.ps.whenExhaustedAction">1</property> 
	<property name="hibernate.dbcp.ps.maxWait">120000</property> 
	<property name="hibernate.dbcp.ps.maxIdle">10</property> 

        <!-- Mapping files -->
        <mapping resource="MateriaPrima.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

A essa altura do campeonato, tenho quase certeza que é um erro idiota em algum lugar que a idiota aqui não está achando, hehe. Mas já pesquisei e tentei resolver de várias formas e ainda nada :frowning:

O erro ainda é o mesmo

Agradeço a ajuda

Alguém?

Na boa, dá uma olhada nesse tutorial aqui:

http://www.guj.com.br/java.tutorial.artigo.174.1.guj

Eu realmente não estou conseguindo entender o que está acontecendo.

Maurício, este tutorial está mto bom, o autor está de parabéns :roll: :roll:

Consegui fazer o exemplo dele e funcionou legal. No entanto, tou apanhando é na hora de meter struts com hibernate, o que teoricamente seria uma boa combinação.

Hibernate sozinho = funciona
Hibernate com struts = … erro atrás do outro

Eu gostaria, se fosse possivel, que alguem me informasse onde eu posso ver um bom tutorial dessa combinação, ou codigo fonte de exemplo, ou coisa que o valha. Pq até agora tudo q achei nao foi mto util.

Enfim, agradeço. Até mais.

Pois é, o autor pensou em dividir o tutorial em duas partes, pra ele não ficar chato demais. Primeiro ia mostrar como é que funciona o Hibernate e na segunda parte ele ia mostrar como integrar ele em uma aplicação web ou desktop, usando DAO e (talvez) Active Record. Mas parece que o povo tá com mais pressa do que ele previu :lol:

Já que o seu problema é pra agora, vejamos um paleativo, não é assim que eu estou fazendo, mas isso já é um passo pra resolver algumas coisas. Você cria uma classe pra “cobrir” as coisas do Hibernate, os inserts, updates, selects, gets e deletes.

Primeiro, uma interface pro dao:

import java.util.List;

/*
 * Created on 17/06/2005
 */

/**
 * @author Maurício
 */
public interface CrudDao {

    public void inserir(Object objeto);
    
    public List listar(Class clazz);
    
    public void atualizar(Object objeto);
    
    public void deletar(Object objeto);
    
    public Object carregar(Class clazz, Integer id);
    
    
}

Depois a implementação usando Hibernate dessa interface:

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

/*
 * Created on 17/06/2005
 *
 */

/**
 * @author Maurício
 *
 */
public class HibernateCrudDao implements CrudDao {

    /* (non-Javadoc)
     * @see CrudDao#inserir(java.lang.Object)
     */
    public void inserir(Object objeto) {
        
        Session sessao = null;
        Transaction tx = null;
        
        try {
        
        sessao = HibernateUtility.getSession();
        tx = sessao.beginTransaction();
        
        sessao.save(objeto);
        
        tx.commit();
        
        } catch (HibernateException e) {
            e.printStackTrace();
            tx.rollback();
            throw e;
        } finally {
            sessao.close();            
        }
        

    }

    /* (non-Javadoc)
     * @see CrudDao#listar(java.lang.Class)
     */
    public List listar(Class clazz) {
        Session sessao = null;
        Transaction tx = null;
        List lista = null;
        
        try {
        
        sessao = HibernateUtility.getSession();
        tx = sessao.beginTransaction();
        
        lista = sessao.createCriteria(clazz).list();
        
        tx.commit();
        
        } catch (HibernateException e) {
            e.printStackTrace();
            tx.rollback();
            throw e;
        } finally {
            sessao.close();            
        }    
        
        return lista;

    }

    /* (non-Javadoc)
     * @see CrudDao#atualizar(java.lang.Object)
     */
    public void atualizar(Object objeto) {
        Session sessao = null;
        Transaction tx = null;
        
        try {
        
        sessao = HibernateUtility.getSession();
        tx = sessao.beginTransaction();
        
        sessao.update(objeto);
        
        tx.commit();
        
        } catch (HibernateException e) {
            e.printStackTrace();
            tx.rollback();
            throw e;
        } finally {
            sessao.close();            
        }

    }

    /* (non-Javadoc)
     * @see CrudDao#deletar(java.lang.Object)
     */
    public void deletar(Object objeto) {
        Session sessao = null;
        Transaction tx = null;
        
        try {
        
        sessao = HibernateUtility.getSession();
        tx = sessao.beginTransaction();
        
        sessao.delete(objeto);
        
        tx.commit();
        
        } catch (HibernateException e) {
            e.printStackTrace();
            tx.rollback();
            throw e;
        } finally {
            sessao.close();            
        }

    }

    /* (non-Javadoc)
     * @see CrudDao#carregar(java.lang.Integer)
     */
    public Object carregar(Class clazz, Integer id) {
        Session sessao = null;
        Transaction tx = null;
        Object objeto = null;
        
        try {
        
        sessao = HibernateUtility.getSession();
        tx = sessao.beginTransaction();
        
        objeto = sessao.get(clazz, id);
        
        tx.commit();
        
        } catch (HibernateException e) {
            e.printStackTrace();
            tx.rollback();
            throw e;
        } finally {
            sessao.close();            
        }    
        
        return objeto;
        
    }


}

Vê se isso funciona com o Struts aí.