You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Matt Benson (JIRA)" <ji...@apache.org> on 2007/12/22 19:32:43 UTC
[jira] Resolved: (JXPATH-110) When JXPathContext.newContext(object)
holds a collection of Hibernate proxy entities, and search performed,
LazyInitializationException illegal access to loading collection
[ https://issues.apache.org/jira/browse/JXPATH-110?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Matt Benson resolved JXPATH-110.
--------------------------------
Resolution: Invalid
I could simply say "this looks like a problem with Hibernate" and leave it at that. However, since I myself have worked for some years with Hibernate (and like it, I might add), I'll go into a little more detail:
The javadoc for LazyInitializationException confirms, as I suspected from reading your summary, that you are trying (via JXPath in this case) to access parts of the object graph that have been set for lazy retrieval (and this is the important part) _outside_of_ an active Session. Since I don't know what type of application you're working with, I couldn't very well say what strategy you need to use to be sure that your JXPath access is taking place within an active Session scope, but that's probably what you need to do. Other options might include not using lazy loading (not sure how to accomplish that with annotation-based Hibernate, or indeed whether there is some annotation trickery that would alleviate your scoping issues). Finally, you might also try making a deep copy of your object graph into a non-Hibernated structure inside your session scope, then using JXPath on that copy outside of a session. You can email me personally if you need info on how I do that (when I want to take a Hibernated graph and serialize it in fully-populated, non-Hibernated form).
> 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.