Caros colegas, estou tentando desenvolver uma aplicação com CDI Tomcat e Hibernate, seguindo as dicas de CDI deste artigo http://blog.caelum.com.br/use-cdi-no-seu-proximo-projeto-java
Nesse artigo ele explica como utilizar o Weld com Tomcat, até aí tudo bem, configurei daquela forma subi o Tomcat e não deu nenhum erro, porém no artigo ele mostrar como injetar em um EntityManager mas eu trabalho com o Session do Hibernate. Quando faço a injeção no session ele não me permite dizendo que aquele ponto não serve para injeção.
Alguém sabe como e se é possível usar CDI assim?
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
Configuration cfg = new Configuration().configure();
return cfg.buildSessionFactory();
} catch (Throwable e) {
System.out.println("Criação da SessionFactory falou. Erro: " + e);
throw new ExceptionInInitializerError(e);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
public class HibernateFilter implements Filter {
private SessionFactory sf;
public void init(FilterConfig config) throws ServletException {
this.sf = HibernateUtil.getSessionFactory();
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain chain) throws ServletException {
try {
this.sf.getCurrentSession().beginTransaction();
chain.doFilter(servletRequest, servletResponse);
this.sf.getCurrentSession().getTransaction().commit();
this.sf.getCurrentSession().close();
} catch (Throwable ex) {
try {
if (this.sf.getCurrentSession().getTransaction().isActive()) {
this.sf.getCurrentSession().getTransaction().rollback();
}
} catch (Throwable e) {
e.printStackTrace();
}
throw new ServletException(ex);
}
}
public void destroy() { }
}
public class EspecialidadeService {
@Inject private Session session;
public void excluir(Especialidade especialidade) {
this.session.delete(especialidade);
}