Estou tentando Sobrescrever o Session factory do vraptor hibernate. mas ele não reconhece a classe. tento refazer a sessão, ele cria mas quando chega no DAO, ele fecha a sessão.
package br.com.caelum.vraptor.hibernate;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.inject.Inject;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
public class SessionCreatorMysql extends SessionCreator{
@Inject
private SessionFactoryCreatorMysql sessionFactoryCreator;
@Inject
private BeanManager beanManager;
private Session session;
private Transaction transaction;
@PostConstruct
public void create() {
SessionFactory sessionFactory = sessionFactoryCreator.getInstance();
session = sessionFactory.getCurrentSession();
if (session == null || !session.isOpen()) {
session = sessionFactory.openSession();
}
if (transaction == null && !session.getTransaction().isActive()) {
transaction = session.beginTransaction();
}
}
@Produces
@SessionMysql
public Session getSession() {
return this.session;
}
@PreDestroy
public void destroi(@Disposes @SessionMysql Session session) {
this.session.getTransaction().commit();
}
public void recreate(
@Observes SessionFactoryCreatorMysql sessionFactoryCreatorMysql) {
BeanManager bm = beanManager;
Bean<?> bean = bm.getBeans(SessionCreatorMysql.class).iterator().next();
CreationalContext<?> ctx = bm.createCreationalContext(bean);
((SessionCreatorMysql) bm.getReference(bean, SessionCreatorMysql.class,
ctx)).create();
}
}