[Hibernate] Ajuda para entender problema (RESOLVIDO)

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);
		}
	}

Seu open session in view é utilizado em um filtro certo?

Se for, verifique se ao chamar o servlet se o filtro está sendo chamado. Parece que não, pois a mensagem diz que não há transação ativa:
createCriteria is not valid without active transaction

[quote=jakefrog]Seu open session in view é utilizado em um filtro certo?

Se for, verifique se ao chamar o servlet se o filtro está sendo chamado. Parece que não, pois a mensagem diz que não há transação ativa:
createCriteria is not valid without active transaction [/quote]
Olá jakefrog!

Realmente não está passando pelo filtro… Tem idéia de como eu faço para estas requisições do servlet passarem pelo filtro?

Do mesmo modo como foi feito para o JSF.

Como foi feito? Como você está chamando o JSF? e o JSP?

[quote=jakefrog]Do mesmo modo como foi feito para o JSF.

Como foi feito? Como você está chamando o JSF? e o JSP?[/quote]
Pois é… o estranho é que chamo exatamente da mesma forma, ou seja, tenho as classes de Regra de Negócio, que por sua vez chamam as classes DAO…

Acho que é alguma coisa relativa ao Servlet mesmo :frowning:

Olha como está o mapeamento do filter no web.xml e como você está chamando na url tanto o sevlet e o JSF.

Valeu Jakefrog.

Era o mapeamento mesmo! Estava assim:

<filter>
		<filter-name>conexaoFilter</filter-name>
		<filter-class>br.com.aie.web.filter.ConexaoHibernateFilter</filter-class>
	</filter>
<filter-mapping>
		<filter-name>conexaoFilter</filter-name>
		<url-pattern>*.jsf</url-pattern>
	</filter-mapping>

Alterei para ficar assim:

<filter>
		<filter-name>conexaoFilter</filter-name>
		<filter-class>br.com.aie.web.filter.ConexaoHibernateFilter</filter-class>
	</filter>
<filter-mapping>
		<filter-name>conexaoFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

Muito obrigado :wink:

Olá, JakeFrog, tudo bem?
Pode me ajudar agora com um problema?

[quote=smnj]Olá, JakeFrog, tudo bem?
Pode me ajudar agora com um problema?[/quote]smnj, tudo bem comigo e com você?

Posso sim, mas faça o seguinte. Abra um novo tópico com sua dúvida, caso eu não possa te ajudar alguém irá te ajudar.

Até mais! \o_