Quantcast
Channel: Programação - GUJ
Viewing all articles
Browse latest Browse all 33093

JAVA + Hibernate - Problema com sessão (session is closed)

$
0
0

@FellipeBotelho escreveu:

Pessoa, estou com um problema que não consigo resolver de forma alguma. É o seguinte: estou criando uma aplicação desktop, usando JAVA + Hibernate + PostgreSQL em que somente a operação de exclusão não está funcionando. Já tentei usar vários tipos de soluções, só que nenhuma resolveu.
HibernateUtil.java

package util;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.SessionFactory;
public class HibernateUtil{
    private static final SessionFactory sessionFactory = buildSessionFactory();
    private static SessionFactory buildSessionFactory(){
        try{
            Configuration cfg = new Configuration();
            cfg.configure("hibernate.cfg.xml");
            StandardServiceRegistryBuilder registradorServico = new StandardServiceRegistryBuilder();
            registradorServico.applySettings(cfg.getProperties());
            StandardServiceRegistry servico = registradorServico.build();
            return cfg.buildSessionFactory(servico);
        }catch(Throwable e){
            System.out.println("Criacao inicial do objeto SessionFactory falhou. Erro: " + e);
            throw new ExceptionInInitializerError(e);
        }
    }
    public static SessionFactory getSessionFactory(){
        return sessionFactory;
    }
}

DAOFactory.java

package util;
// Importação da classe ProdutoDAOHibernate
import produto.ProdutoDAOHibernate;
// Importação da classe ProdutoDAO
import produto.ProdutoDAO;
public class DAOFactory{
    /*
     * Método que cria uma sessão para trabalhar com os produtos
     * É do tipo ProdutoDAO
     * Retorna um objeto do tipo ProdutoDAO
     */
    public static ProdutoDAO criarProdutoDAO(){
        // Instancia um objeto do tipo ProdutoDAOHibernate
        ProdutoDAOHibernate produtoDAO = new ProdutoDAOHibernate();
        // Seta a sessão
        produtoDAO.setSession(HibernateUtil.getSessionFactory().getCurrentSession());
        // retorna o objeto
        return produtoDAO;
    }
}

ProdutoDAOHibernate.java

package produto;
import java.util.ArrayList;
import util.HibernateUtil;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
public class ProdutoDAOHibernate implements ProdutoDAO{
    private SessionFactory sf;
    Transaction transaction;
    Session currentSession;
    private Session session;

/*
 *
 */
public ProdutoDAOHibernate(){
    this.sf = HibernateUtil.getSessionFactory();
    this.currentSession = this.sf.getCurrentSession();
    this.transaction = null;
}

/*
 *
 */
public void setSession(Session session){
    this.session = session;
}

/*
 *
 */
public void salvarProduto(Produto produto){
    try{
        transaction = currentSession.beginTransaction();
        this.session.save(produto);	
        transaction.commit();
        
        if(currentSession.isOpen()){
            currentSession.close();
        }
    }catch(Throwable ex){
        try{
            if(transaction.isActive()){
                transaction.rollback();
            }
        }catch(Throwable t){
            t.printStackTrace();
        }			
    }
}

/*
 *
 */
@Override
public void atualizarProduto(Produto produto){
    this.transaction = currentSession.beginTransaction();
    this.session.update(produto);
    this.transaction.commit();
}

@Override
public void excluirProduto(Integer codigo){
    this.transaction = currentSession.beginTransaction();
    String hql = "DELETE FROM Produto p WHERE p.codigo_produto = :"+codigo;
    Query query = this.session.createQuery(hql);
    query.setInteger("codigo_produto", codigo);
    query.executeUpdate();
    this.transaction.commit();
}

/*
 *
 */
@Override
public Produto carregarProduto(Integer codigo){
    
    return (Produto) this.session.get(Produto.class, codigo);
}

/*
 *
 */  
@Override
public List<Produto> listarProdutos(){
    currentSession.beginTransaction();
    
    List produto = new ArrayList();
    produto = this.session.createCriteria(Produto.class).addOrder(Order.asc("codigo_produto")).list();
    currentSession.close();
    return produto;
}
}

hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="connection.driver_class">org.postgresql.Driver</property>
        <property name="connection.url">jdbc:postgresql://localhost:5432/acougue</property>
        <property name="connection.username">postgres</property>
        <property name="connection.password">5557975</property>
        <property name="current_session_context_class">thread</property>
        <property name="hibernate.hbm2ddl.auto">none</property>
        <property name="show_sql">true</property>
        <mapping class="produto.Produto"/>
    </session-factory>
</hibernate-configuration>

Tem um botão na tela que pega o código e leva para ProdutoRN, de lá é chamada o método excluirProduto de ProdutoDAOHibernate passando como argumento o código.

Quando tento excluir o produto, dá esse erro no console:

Exception in thread "AWT-EventQueue-0" org.hibernate.SessionException: Session is closed!
	at org.hibernate.internal.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:133)
	at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1469)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:356)
	at com.sun.proxy.$Proxy8.beginTransaction(Unknown Source)
	at produto.ProdutoDAOHibernate.excluirProduto(ProdutoDAOHibernate.java:70)
	at produto.ProdutoRN.excluirProduto(ProdutoRN.java:43)
	at visao.TelaProduto.btnExcluirActionPerformed(TelaProduto.java:358)
	at visao.TelaProduto.access$100(TelaProduto.java:10)
	at visao.TelaProduto$2.actionPerformed(TelaProduto.java:155)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6533)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6298)
	at java.awt.Container.processEvent(Container.java:2236)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2294)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
	at java.awt.Container.dispatchEventImpl(Container.java:2280)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.awt.EventQueue$4.run(EventQueue.java:729)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Alguém sabe como resolver? Att.

Mensagens: 23

Participantes: 3

Ler tópico completo


Viewing all articles
Browse latest Browse all 33093


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>