Marius,

In Hibernate when you use Lazy initialization it means no attempt is made to
read your data from the database UNTIL you ask for a component of the
object.  So, if you save your object to a scope (request, session, tile,
application) and close your "session" object.  You might get around this
problem if you put your Session object into the client's session scope but
that would eat up connections.  I recommend you check out hibernate.org's
suggestions on this in their documentation.  Offhand, I would suggest
loading the object directly before putting it in the scope.  How are you
"lazily" loading it?

Regards,
David

-----Original Message-----
From: Marius Botha [mailto:[EMAIL PROTECTED]
Sent: Monday, December 20, 2004 9:56 AM
To: [EMAIL PROTECTED]
Subject: Struts-EL with Hibernate and LazyInitializationException (no
session)


Hi there,

I'm hoping someone out there have some experience with struts and Hibernate
and can point me in the right direction. I'm fairly new to struts and have
actually been using JSF, Hibernate and JBoss for the last couple of months
so this was my only reference point. In JSF using the EL is quite powerful
and I believed I would have the same functionality in struts but must be
missing something somewhere....

My Hibernate and JBoss experience is also very limited so please excuse me
if I'm not technically correct. I use Hibernate, which Lazily initializes
the objects and collections as required all running in JBoss. I created my
own JSTL calendar tag to use with struts, the parameters of which is
populated using the standard expression language. For example:

<c:myTag name="myDay" formatPattern="${user.dateFormat}"/>

The "user" object is of type Resource.class (my own class) which contains a
collection (lazily initialized by Hibernate) called "userProperties". The
getDateFormat() method reads from this collection and is supposed to return
the user's date format preference.

This works perfectly if I use any other normal String property for example
like ${user.name}, which is initialized when the object is added to the
session (I think...?). Using JSF this also works perfectly as faces seems to
manage the EL and Lazily initialization of objects differently (i.e. without
any problems). However when I use struts, this fails and I get the exception
below. I think it indicates that the tag cannot find the Hibernate session
associated with the current user at runtime. I had a similar problem with
ActionForms, however I created a servlet filter which wraps the request in a
user transaction, but it doesn't seem to work...

Any help or hints will be much appreciated.

Thanks,

Marius Botha


net.sf.hibernate.LazyInitializationException: Failed to lazily initialize a
collection - no session or session was closed
        at
net.sf.hibernate.collection.PersistentCollection.initialize(PersistentCollec
tion.java:209)
        at
net.sf.hibernate.collection.PersistentCollection.write(PersistentCollection.
java:84)
        at net.sf.hibernate.collection.Bag.add(Bag.java:281)
        at
com.workpool.resource.AbstractResource.addUserProperty(AbstractResource.java
:234)
        at com.workpool.resource.Resource.getProperty(Resource.java:316)
        at com.workpool.resource.Resource.getDateFormat(Resource.java:406)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at
org.apache.taglibs.standard.lang.jstl.ArraySuffix.evaluate(ArraySuffix.java:
278)
        at
org.apache.taglibs.standard.lang.jstl.ComplexValue.evaluate(ComplexValue.jav
a:107)
        at
org.apache.taglibs.standard.lang.jstl.ELEvaluator.evaluate(ELEvaluator.java:
204)
        at
org.apache.taglibs.standard.lang.jstl.ELEvaluator.evaluate(ELEvaluator.java:
163)
        at
org.apache.taglibs.standard.lang.jstl.Evaluator.evaluate(Evaluator.java:101)
        at
org.apache.taglibs.standard.lang.jstl.Evaluator.evaluate(Evaluator.java:129)
        at
org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager.evaluate
(ExpressionEvaluatorManager.java:75)
        at
org.apache.strutsel.taglib.utils.EvalHelper.evalString(EvalHelper.java:74)
        at
com.workpool.struts.component.calendar.CalendarMonthPopupTag.setFormatPatter
n(CalendarMonthPopupTag.java:28)
        at
org.apache.jsp.notebook.note_005flist_jsp._jspx_meth_c_monthViewPopup_0(note
_005flist_jsp.java:176)
        at
org.apache.jsp.notebook.note_005flist_jsp._jspService(note_005flist_jsp.java
:106)
        at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
        at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:3
11)
        at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:284)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:204)
        at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.
java:742)
        at
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDis
patcher.java:506)
        at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatch
er.java:443)
        at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher
.java:359)
        at
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:10
56)
        at
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcesso
r.java:261)
        at
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProces
sor.java:388)
        at
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequ
estProcessor.java:316)
        at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
        at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1158)
        at
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:284)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:204)
        at
com.workpool.webapp.WorkpoolFilter.doFilter(WorkpoolFilter.java:80)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:233)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:204)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:256)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:151)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
        at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContext
Valve.java:245)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:199)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:151)
        at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase
.java:594)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:149)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195
)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:151)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164
)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:149)
        at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:578)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:149)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:156)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:151)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
        at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:211)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:805)
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConne
ction(Http11Protocol.java:696)
        at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:605)
        at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav
a:677)
        at java.lang.Thread.run(Thread.java:534)





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to