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]