Lazy loading bizarre behavior

29 views
Skip to first unread message

Dahn

unread,
Jun 15, 2011, 7:28:49 PM6/15/11
to Granite Data Services Forum
I have a View entity with a lazy loaded association of Details:
view.details

private Map<Long, Details> details ;
@OneToMany(mappedBy="view", fetch=FetchType.LAZY,
cascade=CascadeType.ALL)
@MapKey(name="detailsId")
public Map<Long, Details> getDetails() {
return details;
}
public void setDetails(Map<Long, Details> details) {
this.details = details;
}

In the UI (Flex side) I check the details collections for
initialization. If not initialized I call length on it and Granite
initializes it for me. The bizarre part is that the server throws a
LazyInitializationException but the map still gets initialized
apparently in a correct fashion (not sure how it would work with
multiple concurrent users).

Here is the error:

19:17:50,550 ERROR [LazyInitializationException] could not initialize
proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy
- no Session
at
org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:
167)
at
org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:
215)
at
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:
191)
at com.maierinc.stylect.model.view.CompanyPageUnit_$
$_javassist_0.toString(CompanyPageUnit_$$_javassist_0.java)
at
org.granite.logging.DefaultLoggingFormatter.convert(DefaultLoggingFormatter.java:
152)
at
org.granite.logging.DefaultLoggingFormatter.format(DefaultLoggingFormatter.java:
54)
at org.granite.logging.Log4jLogger.debug(Log4jLogger.java:93)
at
org.granite.messaging.amf.io.AMF3Serializer.addToStoredObjects(AMF3Serializer.java:
449)
at
org.granite.messaging.amf.io.AMF3Serializer.writeAMF3Object(AMF3Serializer.java:
349)
at
org.granite.messaging.amf.io.AMF3Serializer.writeObject(AMF3Serializer.java:
149)
at
org.granite.hibernate.HibernateExternalizer.writeExternal(HibernateExternalizer.java:
331)
at
org.granite.messaging.amf.io.AMF3Serializer.writeAMF3Object(AMF3Serializer.java:
384)
at
org.granite.messaging.amf.io.AMF3Serializer.writeObject(AMF3Serializer.java:
149)
at
org.granite.messaging.amf.io.AMF3Serializer.writeAMF3Object(AMF3Serializer.java:
401)
at
org.granite.messaging.amf.io.AMF3Serializer.writeObject(AMF3Serializer.java:
149)
at
org.granite.messaging.amf.io.AMF3Serializer.writeAMF3Object(AMF3Serializer.java:
401)
at
org.granite.messaging.amf.io.AMF3Serializer.writeObject(AMF3Serializer.java:
149)
at
org.granite.messaging.amf.io.AMF0Serializer.writeAMF3Data(AMF0Serializer.java:
533)
at
org.granite.messaging.amf.io.AMF0Serializer.writeData(AMF0Serializer.java:
163)
at
org.granite.messaging.amf.io.AMF0Serializer.writeBody(AMF0Serializer.java:
149)
at
org.granite.messaging.amf.io.AMF0Serializer.serializeMessage(AMF0Serializer.java:
111)
at org.granite.messaging.webapp.AMFEndpoint.service(AMFEndpoint.java:
85)
at org.granite.seam21.FlexFilter.doFilter(FlexFilter.java:242)
at org.jboss.seam.servlet.SeamFilter
$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter
$FilterChainImpl.doFilter(SeamFilter.java:73)
at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206)
at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:
96)
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:
230)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
175)
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:
182)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:
432)
at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:
84)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
102)
at
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:
157)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
262)
at
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:
856)
at org.apache.coyote.http11.Http11AprProtocol
$Http11ConnectionHandler.process(Http11AprProtocol.java:566)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:
1508)
at java.lang.Thread.run(Unknown Source)

What's even stranger is that I get the same error if I try to
initialize the view.getDetails() collection manually:

View mergedView = entityManager.merge(view) ;
Hibernate.initialize(mergedView.getDetails());

or entityManager.createQuery("FROM View v WHERE v.id = :viewId")
etc...
this should start a whole new session but it doesn't.

At the same time I have other instances in the application where this
works without an error with other entities mapped identically (I do
not use conversations).

The question is - why is this happening and can I just ignore the
server error? (seems worrisome).

Thanks in advance,
Dahn
Reply all
Reply to author
Forward
0 new messages