Problemas em fechar e abrir a session

Olá pessoal bom dia.

Estou tentando fechar a session do meu método salvar(), mas estou tendo um problema.

O método está assim:

public String salva() { System.out.println("Adicionando: " + funcionario.getNome()); Session session = HibernateUtil.openSession(); try { //... //... } finally { if (session != null) { try { System.out.println("finalizando a session"); session = HibernateUtil.currentSession(); //pego a session atual; session.clear(); //limpo session.close(); //depois fecho Session session2 = HibernateUtil.openSession(); //abro uma nova session funcionario = new Funcionario(); } catch (HibernateException e) { System.err.println("Hibernate Exception" + e.getMessage()); throw new RuntimeException(e); } }

Quando eu dou o openSession, o hibernate me diz que tem uma sessão aberta (session.get != null), e não grava o registro. Se eu retiro o openSession, ele me dá uma exception dizendo que a session já foi fechada…

Eae pessoal, alguma dica??
Obrigado.

Esqueci de postar:
No meu HibernateUtil , o método openSession está assim:

public static Session openSession() { if (sessions.get() != null) { logger.error("Alguem nao fechou uma j� aberta!!"); // grave, alguem nao fechou uma j� aberta! } sessions.set(sessionFactory.openSession()); return sessions.get(); }

Vlw.

Posta seu código ineteiro de HuibernateUtils.
Outra vc tem a instancia na sua varivel de instancia session, não precisa ir no HibernateUtils, para pegar novamente na finalização.

[quote=yoshikichi]Posta seu código ineteiro de HuibernateUtils.
Outra vc tem a instancia na sua varivel de instancia session, não precisa ir no HibernateUtils, para pegar novamente na finalização.[/quote]

Olá yoshikichi,
Segue o codigo:

[code]package br.gov.rr.setrabes.util;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

//import org.postgresql.core.Logger;

public class HibernateUtil {

private static Logger logger = Logger.getLogger(HibernateUtil.class);

private static SessionFactory sessionFactory;

// ajuda a guardar as coisas na thread
private static ThreadLocal<Session> sessions = new ThreadLocal<Session>();

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

public static Session openSession() {
	if (sessions.get() != null) {
		logger.error("Alguem nao fechou uma j&#65533; aberta!!");
		// sessions.get().close(); //PENSEI EM FECHAR CASO A SESSION AINDA ESTIVESSE ABERTA, MAS NÃO ADIANTOU...
		// sessions.set(null);
		// grave, alguem nao fechou uma j&#65533; aberta!
	}
	sessions.set(sessionFactory.openSession());
	return sessions.get();
}

public static Session currentSession() {
	return sessions.get();
}

public static void closeCurrentSession() {
	sessions.get().close();
	sessions.set(null);
}

public static SessionFactory getSessionFactory() {
	return sessionFactory;
}

}
[/code]

Tenta comentar a linha: session = HibernateUtil.currentSession(); //pego a session atual;
pq e fecha a isntancia que está na varivel de isntancia
session.

se qrer temos um grupo de hibernate tb:
http://groups.google.com/group/hibernate-brasil

abs

[quote=yoshikichi]Tenta comentar a linha: session = HibernateUtil.currentSession(); //pego a session atual;
pq e fecha a isntancia que está na varivel de isntancia
session.[/quote]

Já tinha tentado, mesmo assim não resolve…
:frowning:
QUanto ao grupo, vou entrar lá.

Obrigado.