When JXPathContext.newContext(object) holds a collection of Hibernate proxy
entities, and search performed, LazyInitializationException illegal access to
loading collection
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key: JXPATH-110
URL: https://issues.apache.org/jira/browse/JXPATH-110
Project: Commons JXPath
Issue Type: Bug
Affects Versions: 1.2 Final
Environment: Windows XP Professional, Java 5, Tomcat 5.5.20,
hibernate-annotations 3.3.0.ga, hibernate core 3.2.2.ga, springframework 2.0.7
Reporter: eliot clingman
In the O/R model The entity WirelessDevice has all its properties with fetch =
FetchType.LAZY
First, using annotation style Hibernate, I find all wirelessDevices (proxies)
with a named query, with some but not all of the collection properties fetched.
What this means is that a property xyz must be accessed from the
wirelessDevice proxy as follows getXyz(), NOT by invoking xyz directly.
Because accessing the latter way will result in the exception
"LazyInitializationException: illegal access to loading collection." However,
when getXyz() is invoked, the proxy will return the correct value (because it
is attached to a live Hibernate session).
FYI, here is the named Hibernate query: "select d from WirelessDevice d left
join fetch d.marketData marketData left join fetch d.wirelessTechnologyTypes
left join fetch d.anatomy anatomy left join fetch anatomy.geometry".
Any way when I do the following in JxPath , a LazyInitializationException
occurs presumable because properties are not being accessed via getters, but
rather directly:
JXPathContext context = JXPathContext.newContext(blah blah);
Iterator<T> i =
context.iterate("/wirelessDevices[marketData/operators/address/countryType/regionType/id='8']");
HEre is the exact stack trace:
org.hibernate.LazyInitializationException 2007-12-21 18:52:07,915 -- ERROR --
illegal access to loading collection
org.hibernate.LazyInitializationException: illegal access to loading collection
at
org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:341)
at
org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
at
org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:109)
at org.hibernate.collection.PersistentBag.size(PersistentBag.java:225)
at
org.apache.commons.jxpath.util.ValueUtils.getLength(ValueUtils.java:141)
at
org.apache.commons.jxpath.ri.model.beans.BeanPropertyPointer.getLength(BeanPropertyPointer.java:196)
at
org.apache.commons.jxpath.ri.model.beans.PropertyIterator.getLength(PropertyIterator.java:295)
at
org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPositionIndividualProperty(PropertyIterator.java:148)
at
org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPosition(PropertyIterator.java:127)
at
org.apache.commons.jxpath.ri.axes.ChildContext.setPosition(ChildContext.java:106)
at
org.apache.commons.jxpath.ri.axes.ChildContext.nextNode(ChildContext.java:89)
at
org.apache.commons.jxpath.ri.EvalContext.nextSet(EvalContext.java:322)
at
org.apache.commons.jxpath.ri.EvalContext.nextSet(EvalContext.java:321)
at
org.apache.commons.jxpath.ri.EvalContext.nextSet(EvalContext.java:321)
at
org.apache.commons.jxpath.ri.EvalContext.nextSet(EvalContext.java:321)
at
org.apache.commons.jxpath.ri.EvalContext.performIteratorStep(EvalContext.java:159)
at
org.apache.commons.jxpath.ri.EvalContext.hasNext(EvalContext.java:118)
at
org.apache.commons.jxpath.ri.compiler.CoreOperationCompare.contains(CoreOperationCompare.java:86)
at
org.apache.commons.jxpath.ri.compiler.CoreOperationCompare.equal(CoreOperationCompare.java:73)
at
org.apache.commons.jxpath.ri.compiler.CoreOperationEqual.computeValue(CoreOperationEqual.java:33)
at
org.apache.commons.jxpath.ri.axes.PredicateContext.nextNode(PredicateContext.java:81)
at
org.apache.commons.jxpath.ri.EvalContext.performIteratorStep(EvalContext.java:155)
at
org.apache.commons.jxpath.ri.EvalContext.hasNext(EvalContext.java:118)
at
org.apache.commons.jxpath.ri.compiler.Expression$ValueIterator.hasNext(Expression.java:128)
at
com.qualcomm.crowd.dao.InMemoryQueryEngine.findInMemoryEntitysByCriteria(InMemoryQueryEngine.java:50)
at
com.qualcomm.crowd.service.WirelessDeviceManagerImpl.findInMemoryWirelessDevicesByCriteria(WirelessDeviceManagerImpl.java:99)
at
com.qualcomm.crowd.service.WirelessDeviceManagerImpl.findOperatorAliasesByRegionType(WirelessDeviceManagerImpl.java:140)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy40.findOperatorAliasesByRegionType(Unknown Source)
at
com.qualcomm.crowd.controller.WirelessDeviceController.findOperatorAliasesByRegionType(WirelessDeviceController.java:298)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:446)
at
org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:384)
at
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at sun.reflect.GeneratedMethodAccessor176.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at
org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:50)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:160)
at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy42.handleRequest(Unknown Source)
at
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:858)
at
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
at
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
at
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
at
org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
at
org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at
org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:166)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at
org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at
org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at
org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at
org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at
org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
at
org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Unknown Source)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.