olá pessoal
gostaria de saber qual a melhor forma de se controlar transações do hibernate junto com o vraptor se é do modo que foi apresentado no capitulo 8 da apostila fj-28 da caelum implementando uma classe ComponentFactory, ou se é como o código abaixo (apostila exemplo do guj) ou de alguma outra forma diferente dessas?
gostaria de opniões.
obrigado
package br.com.guj.hibernateTransaction;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
public class HibernateHelper {
private static final SessionFactory sessionFactory;
private static final ThreadLocal sessionThreadLocal = new ThreadLocal();
private static final ThreadLocal transactionThreadLocal = new ThreadLocal();
static {
try {
sessionFactory = new Configuration().configure()
.buildSessionFactory();
} catch (RuntimeException e) {
e.printStackTrace();
throw e;
}
}
public static Session currentSession() {
if (sessionThreadLocal.get() == null) {
Session session = sessionFactory.openSession();
sessionThreadLocal.set(session);
}
return (Session) sessionThreadLocal.get();
}
private static void closeSession() {
Session session = (Session) sessionThreadLocal.get();
if (session != null) {
session.close();
}
sessionThreadLocal.set(null);
}
static void beginTransaction() {
if (transactionThreadLocal.get() == null) {
Transaction transaction = currentSession().beginTransaction();
transactionThreadLocal.set(transaction);
}
}
static void commitTransaction() {
Transaction transaction = (Transaction) transactionThreadLocal.get();
if (transaction != null && !transaction.wasCommitted()
&& !transaction.wasRolledBack()) {
transaction.commit();
transactionThreadLocal.set(null);
}
closeSession();
}
static void rollbackTransaction() {
Transaction transaction = (Transaction) transactionThreadLocal.get();
if (transaction != null && !transaction.wasCommitted()
&& !transaction.wasRolledBack()) {
transaction.rollback();
transactionThreadLocal.set(null);
}
closeSession();
}
}