[Resolvido] VRaptor + SiteMesh + Spring + Hibernate - LazyInitializationException

2 respostas
jrdalpra

Pessoal,

Estava com um problema de LIE em uma aplicação que estou desenvolvendo. Tentei usar o HibernateTransactionInterceptor do VRaptor, mas não tive sucesso. Ele continua dando LIE, não importa em qual posição eu coloque ele.

Então decidi ativar o OpenSessionInViewFilter do Spring. Mas agora estou recebendo uma NPE que vem do VRaptor. Segue o stack:

java.lang.NullPointerException
	at br.com.caelum.vraptor.http.DefaultResourceTranslator.translate(DefaultResourceTranslator.java:48)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:66)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:23)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:49)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
	at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:662)

O Controlador está assim:

@Resource
@Path("/veiculo")
public class VeiculoController {

	@Restrito
	@Path("/edita/{objeto.id}")
	public void edita(Veiculo objeto) {
		resultado.forwardTo(	this)
					.formulario(servico.load(objeto));
	}

	@Restrito
	public void formulario(Veiculo objeto) {
		resultado.include("marcas", marcaService.buscaTodosOrdenadosPeloNome());
		resultado.include("objeto", objeto);
	}
	
}

O JSP está assim

<c:forEach items="${objeto.fotos}" var="foto" varStatus="status">
			<label for="foto_${status.index}">Foto ${status.index}</label>
			<c:if test="${foto.temArquivo}">
				<input id="foto_${status.index}" name="objeto.fotos[${status.index}].arquivo" type="checkbox"/>					
			</c:if>
			<c:if test="${!foto.temArquivo}">
				<input id="foto_${status.index}" name="objeto.fotos[${status.index}].arquivo" type="file"/>
			</c:if>
		</c:forEach>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp"
	xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">

	<display-name>Site de Caminhões</display-name>

	<!-- encoding e prelude pros jsps -->
	<jsp-config>
		<jsp-property-group>
			<url-pattern>*.jsp</url-pattern>
			<page-encoding>UTF-8</page-encoding>
			<scripting-invalid>true</scripting-invalid>
			<include-prelude>/WEB-INF/jsp/common.jsp</include-prelude>
		</jsp-property-group>
	</jsp-config>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<listener>
		<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
	</listener>
	<filter>
		<filter-name>openSessionInView</filter-name>
		<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>openSessionInView</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!-- SiteMesh - Templates -->
	<filter>
		<filter-name>sitemesh</filter-name>
		<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>sitemesh</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- SiteMesh - Templates -->

	<error-page>
		<error-code>404</error-code>
		<location>/WEB-INF/jsp/page-not-found.jsp</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/WEB-INF/jsp/error-in-server.jsp</location>
	</error-page>

	<!-- VRaptor - MVC -->
	<filter>
		<filter-name>vraptor</filter-name>
		<filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>vraptor</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>REQUEST</dispatcher>
	</filter-mapping>
	<context-param>
		<param-name>br.com.caelum.vraptor.scanning</param-name>
		<param-value>true</param-value>
	</context-param>
	<!-- VRaptor - MVC -->

</web-app>

Alguém sabe o que tem de errado nesta junção ?

Versões
VRaptor 3.3.0
Spring 3.0.2
Hibernate 3.3.2
SiteMesh 2.4.2

Agradeço pela ajuda.

2 Respostas

Lucas_Cavalcanti

tire esse listener:

<listener>  
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>  
    </listener>

o VRaptor já faz isso, e dá esse erro se tiver os dois

jrdalpra

Ok. Funcionou. Muito obrigado.

Criado 10 de fevereiro de 2011
Ultima resposta 10 de fev. de 2011
Respostas 2
Participantes 2