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]

Reply via email to