Galera,
Tenho uma aplicação desenvolvida em JSF 2 utilizando Hibernate 3.5. Ocorre que uma parte da aplicação precisou ser feita sem JSF, utilizando apenas JSP e Servlet. Porém ao chamar os métodos de persistência da minhas classes DAO de dentro do Servlet, está ocorrendo o seguinte erro:
org.hibernate.HibernateException: createCriteria is not valid without active transaction
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:340)
at $Proxy34.createCriteria(Unknown Source)
Porém este erro ocorre apenas dentro do Servlet. Sabem porque?
* Obs.: estou utilizando o “Open Session in View”, que já intercepta as requisições e realiza as operações de banco dentro de uma transaction
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filter) throws IOException, ServletException {
try {
this.sessionFactory.getCurrentSession().beginTransaction();
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
filter.doFilter(request, response);
this.sessionFactory.getCurrentSession().getTransaction().commit();
this.sessionFactory.getCurrentSession().close();
} catch (Throwable ex) {
try {
if (this.sessionFactory.getCurrentSession().getTransaction().isActive()) {
this.sessionFactory.getCurrentSession().getTransaction().rollback();
}
} catch (Throwable t) {
t.printStackTrace();
}
throw new ServletException(ex);
}
}

