Problemas com Hibernate: Quebra de conexão [Resolvido]

9 respostas
JotaJota

Galera estou com o seguinte erro em hibernate
TEnho uma aplicaçao web na net rolando…
a persistencia é feita por uma classe HibernateUtil que faz o pool de conexão

na hora de consultar ele consulta perfeitamente…

mas na hora de inserirr ele gera o seguinte erro:

Hibernate: insert into cadastro (nome, dataNascimento, email, profissao, endereco, numero, complemento, bairro, cidade, estado, cep, telefone01, telefone02) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
22/08/2008 21:08:53 com.sun.faces.application.ActionListenerImpl processAction
SEVERE: org.hibernate.TransactionException: JDBC rollback failed
javax.faces.el.EvaluationException: org.hibernate.TransactionException: JDBC rollback failed
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)

...

	at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.TransactionException: JDBC rollback failed
	at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:170)
	at br.com.gabriel.persistencia.DAOCadastro.salvarCadastro(DAOCadastro.java:23)
	at br.com.gabriel.controle.BOCadastro.salvarCadastro(BOCadastro.java:12)
	at br.com.gabriel.visao.ControladorCadastro.comandoSalvarCadastro(ControladorCadastro.java:59)
	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)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:152)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
	... 28 more
Caused by: java.sql.SQLException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:


** BEGIN NESTED EXCEPTION ** 

com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: Software caused connection abort: socket write error

STACKTRACE:

java.net.SocketException: Software caused connection abort: socket write error
	at java.net.SocketOutputStream.socketWrite0(Native Method)
	at java.net.SocketOutputStream.socketWrite(Unknown Source)
	at java.net.Socket


...

	at java.lang.Thread.run(Unknown Source)


** END NESTED EXCEPTION **



Last packet sent to the server was 0 ms ago.
	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2708)
	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2619)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1552)

alguem tem ideia do que pode ser???

se puder me ajudar eu agradeço

atenciosamente

9 Respostas

marciogreison

opa, vc já tentou inserir manualmente via sql ?
faz um teste, pois pode ser um problema no seu banco.

JotaJota

Ja simm

inserir dados no bando funciona perfeitamente

:cry:

S

mostre um pouco de seu codígo.

JotaJota

vamos lá
eu vou mostrar a estrutura:

site jsf

eu tenho uma classe qeu eh a imgem da tela:

ClasseBean.java

package br.com.gabriel.visao;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.component.UIData;
import javax.faces.model.SelectItem;

import org.apache.commons.collections.set.CompositeSet.SetMutator;

import br.com.gabriel.controle.BOManterAgenda;
import br.com.gabriel.modelo.Agenda;
import br.com.gabriel.negocio.Elemento;
import br.com.gabriel.negocio.PesquisaAgendaDefinido;
import br.com.gabriel.negocio.StatusMensagemDefinido;
import br.com.gabriel.negocio.Utils;

public class ControladorManterAgenda {
	private Agenda agenda;
	private List<Agenda> listaAgenda;
	private BOManterAgenda boAgenda;
	 private List<Elemento> listaParaPesquisa;
	 private String mensagem;
	 private UIData objetoDataTableAgenda;
	 private String tituloFluxo;
	private List<Agenda> listaAgendaVisitante;
	 
	 private String conteudoPesquisa;
	 private String campoPesquisa;

	public Agenda getAgenda() {
		if (agenda == null) {
			agenda = criaInstanciaAgenda();
			
		}

		return agenda;
	}

	private Agenda criaInstanciaAgenda() {
		Agenda agenda = new Agenda();
		return agenda;
	}

	public void setAgenda(Agenda agenda) {
		this.agenda = agenda;
	}

	public List<Agenda> getListaAgenda() {
		if (listaAgenda == null) {
			listaAgenda = recuperaCompromissos();			
		}
		return listaAgenda;
	}
	
	public List<Agenda> getListaAgendaAtualizada() {
		if (listaAgenda == null) {
			listaAgenda = recuperaCompromissos();			
		}
		return listaAgenda;
	}

	private List<Agenda> recuperaCompromissos() {		
		return getBoAgenda().recuperaAgenda();
	}

	public void setListaAgenda(List<Agenda> listaAgenda) {
		this.listaAgenda = listaAgenda;
	}

	public BOManterAgenda getBoAgenda() {
		if (boAgenda == null) {
			boAgenda = new BOManterAgenda();			
		}

		return boAgenda;
	}

	public void setBoAgenda(BOManterAgenda boAgenda) {
		this.boAgenda = boAgenda;
	}
	
	public String comandoIncluiCompromissoAgenda(){
		String direcao = null;		
		direcao = getBoAgenda().salvaCompromisso(getAgenda());
		setAgenda(null);
		setListaAgenda(null);
		return direcao;
	}
	
	public String comandoPesquisar(){		
		if (getConteudoPesquisa() != null && getCampoPesquisa() != null){
			setListaAgenda(getBoAgenda().pesquisaCompromisso(getConteudoPesquisa(), getCampoPesquisa()));
		}else{
		}
		return null;
	}
	

	public List<Elemento> getListaParaPesquisa() {
		if (this.listaParaPesquisa == null){
			if (getParametrosDePesquisa() != null){
				this.listaParaPesquisa = new ArrayList<Elemento>(getParametrosDePesquisa().getElementos());
			}else{
				this.listaParaPesquisa = new ArrayList<Elemento>();
			}
		}
		return listaParaPesquisa;

	}

	public void setListaParaPesquisa(List<Elemento> listaPesquisaAgenda) {
		this.listaParaPesquisa = listaPesquisaAgenda;
	}
	
	public PesquisaAgendaDefinido getParametrosDePesquisa(){
		return PesquisaAgendaDefinido.getInstance();		
	}

    public List<SelectItem> getParametrosSelectItem() {
	List<SelectItem> lista = new ArrayList<SelectItem>();
	for (Elemento d : getListaParaPesquisa()) {	    
	    lista.add(new SelectItem(d.getChave(), d.getDescricao().toString()));
	}
	return lista;
    }

	public String getConteudoPesquisa() {
		if (conteudoPesquisa == null) {
			conteudoPesquisa = "";
		}
		return conteudoPesquisa;
	}

	public void setConteudoPesquisa(String conteudoPesquisa) {
		this.conteudoPesquisa = conteudoPesquisa;
	}

	public String getCampoPesquisa() {
		return campoPesquisa;
	}

	public void setCampoPesquisa(String campoPesquisa) {
		this.campoPesquisa = campoPesquisa;
	}

	public String getMensagem() {
		if (mensagem == null) {
			mensagem = "";
		}
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public UIData getObjetoDataTableAgenda() {
		return objetoDataTableAgenda;
	}

	public void setObjetoDataTableAgenda(UIData objetoDataTableAgenda) {
		this.objetoDataTableAgenda = objetoDataTableAgenda;
	} 
	
	public String comandoExcluirCompromissoDaLista(){
		Agenda a = (Agenda)objetoDataTableAgenda.getRowData();		
		return getBoAgenda().excluirCompromissoAgenda(a);
	}
	
	public String comandoLimparCompromisso(){
		Agenda a = new Agenda();
		a.setId(getAgenda().getId());
		setAgenda(a);
		return null;		
	}
	
	public String alterarCompromissoAgenda(){
		setAgenda((Agenda) getObjetoDataTableAgenda().getRowData());
		return "cadastroAgenda";		
	}

	public String getTituloFluxo() {
		if (getAgenda().getId() == null) {
			tituloFluxo = "Novo Compromisso";
		} else {
			tituloFluxo = "Alterar Compromisso";
		}
		return tituloFluxo;
	}

	public void setTituloFluxo(String tituloFluxo) {
		this.tituloFluxo = tituloFluxo;
	}

	public List<Agenda> getListaAgendaVisitante() throws Exception {
		if (listaAgendaVisitante == null) {
			listaAgendaVisitante = recuperaAgendaParaVisitante();			
		}

		return listaAgendaVisitante;
	}

	private List<Agenda> recuperaAgendaParaVisitante() throws ParseException {	
		List<Agenda> lista = new ArrayList<Agenda>();  
		lista = getBoAgenda().recuperaAgendaVisitante();
		if (lista == null){
			lista = new ArrayList<Agenda>();
		}
		return lista;
	}

	public void setListaAgendaVisitante(List<Agenda> listaAgendaVisitante) {
		this.listaAgendaVisitante = listaAgendaVisitante;
	}
	
	

}
JotaJota

continuação...
Minha classe de BO (Business Object) classe qeu vai cuidar de regras de negocio... por exemplo

package br.com.gabriel.controle;

import java.text.ParseException;
import java.util.List;

import br.com.gabriel.modelo.Agenda;
import br.com.gabriel.persistencia.DAOManterAgenda;

public class BOManterAgenda {
	private DAOManterAgenda dao;
	
	

	public String salvaCompromisso(Agenda agenda) {		
		return getDao().salvarCompromissoNaAgenda(agenda);
	}



	public DAOManterAgenda getDao() {
		if (dao == null) {
			dao = new DAOManterAgenda();		
		}
		return dao;
	}



	public void setDao(DAOManterAgenda dao) {
		this.dao = dao;
	}



	public List<Agenda> recuperaAgenda() {	
		return getDao().recuperaAgendaAtual();
	}



	public List<Agenda> pesquisaCompromisso(String conteudoPesquisa,
			String campoPesquisa) {
		return getDao().pesquisaCompromisso(conteudoPesquisa, campoPesquisa);
	}



	public String excluirCompromissoAgenda(Agenda a) {
		return getDao().excluirCompromissoAgenda(a);
	}



	public List<Agenda> recuperaAgendaVisitante() throws ParseException {		
		return getDao().recuperaAgendaVisitante();
	}
	


}

minha classe DAO que faz persistencia:

package br.com.gabriel.persistencia;



import java.text.ParseException;
import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import br.com.gabriel.modelo.Agenda;
import br.com.gabriel.modelo.Usuario;
import br.com.gabriel.negocio.PesquisaAgendaDefinido;
import br.com.gabriel.negocio.PesquisaCadastroDefinido;
import br.com.gabriel.negocio.Utils;

public class DAOManterAgenda {
	
	public String salvarCompromissoNaAgenda(Agenda agenda){
		String persistencia = null;
		Session s = HibernateUtil.currentSession();
		Transaction t = s.beginTransaction();
		try{
			s.merge(agenda);
			t.commit();
			persistencia = "novoCompromisso";
		}catch (Exception e) {
			t.rollback();
			e.printStackTrace();
		}finally{
//			s.close();
		}
		return persistencia;		
	}

	public List<Agenda> recuperaAgendaAtual() {
		Date d = Utils.atualDateByCalendar();
		Session s = HibernateUtil.currentSession();
		StringBuilder sb = new StringBuilder();
		sb.append(" from Agenda a ");
		sb.append(" where a.data > :data ");
		sb.append("or  a.data = :data ");
		Query q = s.createQuery(sb.toString());
		q.setParameter("data", d);	
		return q.list();
	}
	
	public String excluirCompromissoAgenda(Agenda agenda){
		String persistencia = null;
		Session s = HibernateUtil.currentSession();
		Transaction t = s.beginTransaction();
		try{
			s.delete(agenda);
			t.commit();
			persistencia = "novoCompromisso";
		}catch (Exception e) {
			t.rollback();
			e.printStackTrace();
		}finally{
//			s.close();
		}
		return persistencia;		
	}

	public List<Agenda> pesquisaCompromisso(String conteudoPesquisa,
			String campoPesquisa) {
		Session s = HibernateUtil.currentSession();
		StringBuilder sb = new StringBuilder();
		
		sb.append(" from Agenda a ");
		sb.append(" where a." +getParametrosDePesquisa().getInstance().getDescricao(campoPesquisa)+
				" like '%"+conteudoPesquisa+"%'");		
		Query q = s.createQuery(sb.toString());		
		return q.list();

	}
	
	public PesquisaAgendaDefinido getParametrosDePesquisa(){
		return PesquisaAgendaDefinido.getInstance();		
	}

	public List<Agenda> recuperaAgendaVisitante() throws ParseException {
		Date d = Utils.recuperaDataAtualFormatada();
		Session s = HibernateUtil.currentSession();
		StringBuilder sb = new StringBuilder();
		sb.append(" from Agenda a ");
		sb.append(" where a.data >= :data ");
		sb.append(" order by a.data, a.hora ");	
		Query q = s.createQuery(sb.toString());
		q.setParameter("data", d);	
		return q.list();
	}
	


}
minha classe HibernateUtil que pega a Session para conexão com o banco
package br.com.gabriel.persistencia;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {
	
	public static final SessionFactory sessionFactory;

	static {
		try {
			sessionFactory = new AnnotationConfiguration().configure()
					.buildSessionFactory();

		} catch (Throwable ex) {
			System.out.println("Initial SessionFactory creation failed" + ex);
			throw new ExceptionInInitializerError(ex);
		}
	}

	public static final ThreadLocal thread = new ThreadLocal();

	public static Session currentSession() throws HibernateException {
		Session s = (Session) thread.get();
		if (s == null) {
			s = sessionFactory.openSession();
			thread.set(s);
		}
		return s;
	}

	public static void closeSession() throws HibernateException {
		Session s = (Session) thread.get();
		if (s != null)
			s.close();
		thread.set(null);
	}
}
JotaJota

VO; Value Object : ou entao meu proprio Objeto::

package br.com.gabriel.modelo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

import br.com.gabriel.negocio.Utils;

@Entity
@Table(name = "AGENDA")
public class Agenda {
	@Id
	@GeneratedValue
	private Integer id;
	private Date data;

	@Column(length = 5)
	private String hora;

	@Column(length = 300)
	private String descricao;

	@Column(length = 300)
	private String local;

	@Transient
	private String status;
	@Transient
	private Integer dia;
	@Transient
	private Integer mes;
	@Transient
	private Integer ano;
	@Transient
	private String diaSemana;

	public int recuperaMinutos() {
		int hora = 0;
		if (getData() != null) {
			hora = getData().getHours();
		}
		return hora;
	}

	public Integer getDia() {
		if (getData() != null) {
			dia = getData().getDay();
		}
		return dia;
	}

	public void setDia(Integer dia) {
		this.dia = dia;
	}

	public Integer getMes() {
		if (getData() != null) {
			mes = getData().getMonth();
		}
		return mes;
	}

	public void setMes(Integer mes) {
		this.mes = mes;
	}

	public Integer getAno() {
		if (getData() != null) {
			ano = getData().getYear();
		}
		return ano;
	}

	public void setAno(Integer ano) {
		this.ano = ano;
	}

	public String getHora() {
		return hora;
	}

	public void setHora(String hora) {
		this.hora = hora;
	}

	public String getLocal() {
		return local;
	}

	public void setLocal(String local) {
		this.local = local;
	}

	public String getStatus() {
		status = verificaStatus();
		return status;
	}

	private String verificaStatus() {

		return null;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getDescricao() {

		return descricao;
	}

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

	public Integer getId() {
		return id;
	}

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

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public String getDataFormatada() {
		return Utils.formatDate(getData());
	}

	public String getDiaSemana() {
		diaSemana = verificaDiaSemana();
		return diaSemana;
	}

	private String verificaDiaSemana() {
		return Utils.recuperaDiaDaSemana(getData());
	}

	public void setDiaSemana(String diaSemana) {
		this.diaSemana = diaSemana;
	}

}

ERRO:

java.sql.SQLException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:


** BEGIN NESTED EXCEPTION ** 

com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: Broken pipe

STACKTRACE:

java.net.SocketException: Broken pipe
	at java.net.SocketOutputStream.socketWrite0(Native Method)

...

	at java.lang.Thread.run(Thread.java:619)


** END NESTED EXCEPTION **



Last packet sent to the server was 1 ms ago.

STACKTRACE:

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: Broken pipe

STACKTRACE:

java.net.SocketException: Broken pipe
	at java.net.SocketOutputStream.socketWrite0(Native Method)
	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
	at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
	at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
	at com.mysql.jdbc.MysqlIO.send
...

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:686)
	at java.lang.Thread.run(Thread.java:619)


** END NESTED EXCEPTION **



Last packet sent to the server was 1 ms ago.
	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2708)
	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2619)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java

...

[b]
Galera é o seguinte
esta todo meu codigo aqui…
eu acho que o problema pode estar na Classe Hibernate Util…
como vimos
aparece bastante no log de erro
mas isso somente acontece quando eu faço isso no host… no site
quando rodo minha aplicação local (no meu pc…) ele executa perfeitamente…

desde ja agradeço quem puder ajudar…

Vlw galera… abraços

[/b]

JotaJota

olhaa aqui… o mesmo problema

http://www.guj.com.br/posts/list/53079.java

marciogreison

Olá amigo,

dei uma verificada no seu codigo, parece estar tudo certo, mas não tem como saber o ponto exato do erro com o codigo que vc passou, mas pelo que acompanhei parece que a conexão esta sendo fechada antes do comando de inserir. não sei qual IDE vc esta utilizando para o desenvolvimento, mas tenho uma dica pra vc, que tal vc debugar até o ponto onde ocorre o erro ?, com o Netbeans eu já consegui resolver alguns problemas deste tipo debugando. Muitas vezes fica dificil saber realmente o ponto do erro somente analisando codigos, o ideal é debugar e acompanhar os resultados.

Flws[].

JotaJota

Problema resolvido galera

seguinte
o meu problema aconteceu em dois pontos fundamentais

1º Ponto:
A classe HibernateUtil …

Quando voces utilizarem al classe HibernateUtil por favor vá até a documentação do hibernate que voce utiliza e pega a classe HibernateUtil desta documetnação

como eu estou usando o HibernateAnnotation… …temn um HibernateUtil especifico pra ele…

2º Ponto
o erro consequente desse acontece na minha classe DAO…
Ele usa um Transaction, incompativel para o hibernate…
verifiquei a documetnação do Hibernate annotation e vi como é o esquema lá de recuperar. salvar, alterar. criar, consultar …
estava bem diferente.

Bom espero que este erro possa corrigir o seu problema de voce que está lendo procurando por algo parecido
abraços para todos!!

Agradecimento especial:
marciogreison
securitynews

vlw galera forte abraço pra voces!

Criado 22 de agosto de 2008
Ultima resposta 25 de ago. de 2008
Respostas 9
Participantes 3