To clean out a hibernate session: s.clear();
That will clean everything out of it. Be warned though that it clears *everything* out of it, not just the stuff you recently loaded. A safer way is to evict each object one at a time as you load it e.g. Sesison s = HibHelper.getSession(); Query q = s.createQuery("from bigList"); List l = q.list(); For (int x=0; x< l.size(); x++) s.evict(l.get(x)); > -----Original Message----- > From: seloha . [mailto:[EMAIL PROTECTED] > Sent: Monday, September 26, 2005 12:45 PM > To: tapestry-user@jakarta.apache.org > Subject: RE: OutOfMemoryError Tapestry 4.0 > > Pat, > > 1) Yes I am setting the object list to null. > > 2) I have not put a log statement in the code to check it but I have set a > break point in debug mode and each time the page was rendered the code in > pageDetached(PageEvent event) was run. > > 3) There is no other code which references the list object except the > rendering using the For component. > > 4) Subsequent to adding the pageDetached(PageEvent event) I have not run > it > on with the caching enabled. This I will do next. > > 5) I am using hibernate for the persistent layer. I have always just let > Spring look after the hibernate session using declarative transactions and > have never bypassed this mechanism. How do I evict go about evicting the > objects after the transaction which picks them up. Can I just write a > piece > of code in my DAO which after picking the objects up then has something > like: > > getHibernateTemplate().evict(objects); > > As you can see I am fairly nieve about use of hibernate too. > > > Thanks, > > Paul > > > Patrick Casey <[EMAIL PROTECTED]> wrote: > > Well, it really smells to me like a leak, largely because 5,000 > objects, while a pain in the posterior to scroll through, is mouse nuts > from > a memory use standpoint (say each object is 10k (a whopper of an object), > we're only looking at 50 M of memory here. Most object though are at least > an order of magnitude smaller than that. > > Just to reinterate though: > > It loads once fine. > If you keep loading the page, eventually you get an EOM error, > right? > > Some other things to look at: > > 1) Unless Howard changed things or I'm remembering wrong, initial-value > *does not* reset object to that state. Rather it's the value at page > creation, not the value that something gets set to when a page goes into > or > out of the pool. So to null something out after render, you need to > explicitly set it to null in the detach code (as it appears you are > doing). > > 2) Can you put a log statement or something similar in your page detatch > listener to make sure it's being called? I don't know how many times I got > bit by adding PageBeginRender methods to Tap 3 forms without remembering > to > add implements PageEventListener to the class. > > 3) Are there any other object (statics, the visit object, some other > property on the page) which reference your object chain? > > 4) Do you still get the EOM with tapestry's cache turned off? If so, it's > not your tapestry code that's hanging onto a reference. If not, then the > problem lies in not re-iniitalizing something properly before a page goes > back into the pool. > > 5) Are you using Hibernate as your persistence layer? If so, are you > evicting these objects out of the session and/or loading them in a temp > session which you are subsequently closing? Objects loaded in a Hibernate > session have the lifespan of the session, regardless of whether or not > your > code holds a reference to them. > > > > >-----Original Message----- > >From: seloha . [mailto:[EMAIL PROTECTED] > >Sent: Monday, September 26, 2005 11:55 AM > >To: tapestry-user@jakarta.apache.org > >Subject: RE: OutOfMemoryError Tapestry 4.0 > > > >Thanks Pat, > > > >One thing I was not doing which you pointed out was setting the list to > >null > >in pageDetached(PageEvent event) so I added this and also included > >System.gc(). This unfortunately had no affect. The list uses abstract > >getter > >and setter and is initialized in the .page spec with > >initial-value="ognl:null". > > > >I have a number of selection models for PropertySelection components > which > >are initialized lazily which I am not resetting to null each time (but > >there > >are only about 100 total items in these objects). Could these have any > >affect. > > > >I am really poking around in the dark. Similar Spring and Hibernate > >mechanism that I wrote using Tapestry 3.0.3 is on a production system and > >has run with no problems for months. Admittedly I never go and display > >5000 > >objects at once though! > > > >I cannot see that I am inadvertently holding onto any objects in the code > >but you never know? > > > >Thanks again for your help, > > > >Paul > > > > > >Patrick Casey <[EMAIL PROTECTED]> wrote: > > > > It sounds like a memory leak, but it could just be a slow garbage > >collector as well. Try adding: > > > > System.gc() to the end of your transaction to guarantee the garbage > >collector runs after each page render. Then see if repeated page renders > >still blow out your memory. If they do, then I suspect that somehow you > >(or > >tapestry, or spring) is hanging onto a reference to those object after > >page > >completion. > > > > --- Pat > > > > PS You *are* resetting your page properties to null (and nulling out > >the list of 5000 items) on the page's post-render cleanup phase, right? > > > > >-----Original Message----- > > >From: seloha . [mailto:[EMAIL PROTECTED] > > >Sent: Monday, September 26, 2005 3:11 AM > > >To: tapestry-user@jakarta.apache.org > > >Subject: OutOfMemoryError Tapestry 4.0 > > > > > >I have a page which allows a user to search the database based on > various > > >criteria. I have restricted the number of returned items to 5000. I > > >display > > >the items in the same search page using the @For component with > > >volatile="ognl:true" . Repeated searches which return 5000 items will > > >result > > >in an OutOfMemoryError exception. If I leave the page and then return > or > > >stay on the page I will ultimately get an OutOfMemoryError exception. > > > > > >I can view other pages after this exception but a repeat of trying to > > >display 5000 items on this page will display an OutOfMemory exception. > > > > > >The only way to clear this problem is to restart the servlet container. > > >This > > >fails using either Jetty or Tomcat in both development and production > > >environments (using different operating systems). > > > > > >All the variables displaying the list are explicitly declared in the > >.page > > >specification and using initial-value set to null. > > > > > >I am using Tapestry 4.0 beta 8. > > > > > >The data is retrieved using Spring and Hibernate (no fancy patterns, > > >standard Spring declarative transactions and using > >getHibernateTemplate()) > > >and mapped to Tapestry using hivemodule.xml: > > > > > > <implementation service- > > >id="hivemind.lib.DefaultSpringBeanFactoryHolder"> > > > <invoke-factory> > > > <construct autowire-services="false" > > >class="uk.co.cymbol.tair.tapestry.AppSpringBeanFactoryHolderImpl"> > > > <event-listener service-id="hivemind.ShutdownCoordinator" /> > > > <set-object property="context" > > >value="service:tapestry.globals.WebContext" /> > > > </construct> > > > </invoke-factory> > > > </implementation> > > > > > >and injecting the appropriate Spring bean. > > > > > >I am completely confused as to how to tie down the problem and isolate > > >which > > >section of code is causing the problem. > > > > > >Any help would be much appreciated. > > > > > >Paul > > > > > > > > > > > >--------------------------------------------------------------------- > > >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] > > > > > > > >--------------------------------------------------------------------- > >To unsubscribe, e-mail: [EMAIL PROTECTED] > >For additional commands, e-mail: [EMAIL PROTECTED] > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: > > > > --------------------------------------------------------------------- > 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]