Estou tentando usar CDI + Hibernate no meu projeto.
Quero controlar as transações dentro de um Interceptor, até ai tudo bem, abro a transação no Interceptor, mas quanto tento dar um session.save no meu dao retorna o seguinte erro: org.hibernate.HibernateException: save is not valid without active transaction.
Meu dao
@Inject
private SessionFactory factory;
@Override
@Transactional
public void save(Produto produto) {
factory.getCurrentSession().save(produto);
}
Meu Interceptor:
@Inject
private SessionFactory factory;
@AroundInvoke
public Object invoke(InvocationContext context) throws Exception {
Session session = factory.openSession();
session.beginTransaction();
Object methodResult = context.proceed();
session.getTransaction().commit();
return methodResult;
}
Meu producer
@Produces
@RequestScoped
public SessionFactory createSessionFactory() {
return HibernateUtil.getSessionFactory();
}