Andrus,
that is a rather large amount of work, since I use TextWrangler Editor (i.e. no
IDE and not debugger). If you have a recommendation for an opensource
debugger, then I will give it a shot. (I am one of the few people who thinks
Eclipse is annoying. :) )
In the interim, here is my web.xml code (which I added a *long* time ago -
which appears to me to be the current methodology)
<filter>
<filter-name>CayenneFilter</filter-name>
<filter-class>org.apache.cayenne.conf.WebApplicationContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CayenneFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
What in your experience would lead to the filter destroy method not being
called? Is there another library that could be holding on to a reference?
Thanks,
Joe
On Mar 14, 2012, at 1:44 PM, Andrus Adamchik wrote:
> I didn't know how you start/stop Cayenne so I was giving a general answer. If
> you are using WebApplicationContextFilter, it should stop Cayenne event
> threads. Maybe you can run your web app in debugger locally, put a breakpoint
> in WebApplicationContextFilter.destroy() and see if it is invoked at all, and
> when it is called - that the threads stop.
>
> Andrus
>
>
> On Mar 14, 2012, at 12:43 PM, Joe Baldwin wrote:
>
>> Andrus,
>>
>>> You will need something similar.
>>
>>
>> I was following you until you said this. The link you sent is code for the
>> cayenne filter that is intended to be placed in the web.xml file for tomcat.
>> I have already done this. So is your comment meant to imply that I need to
>> *add* the filter, or *write* one myself.
>>
>> Whats more, if I have implemented your filter, then why would I need to
>> create another one.
>>
>> Also, are these objects that hold on to my data objects? If so, then this is
>> a rather important issue.
>>
>> Thanks
>> Joe
>>
>>
>>
>> On Mar 14, 2012, at 9:59 AM, Andrus Adamchik wrote:
>>
>>> Ok. Now you are on to something. The remaining Cayenne event threads is an
>>> indicator that the old version of the app was not undeployed.
>>>
>>> You need to ensure that you shut down your Cayenne Configuration (in 3.0)
>>> or ServerRuntime (in 3.1) when your web application stops. Here is an
>>> example of how Cayenne does it in WebApplicationContextFilter.destroy() :
>>>
>>> http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/WebApplicationContextFilter.java?view=markup
>>>
>>> You will need something similar.
>>>
>>> Andrus
>>>
>>>
>>> On Mar 14, 2012, at 9:51 AM, Joe Baldwin wrote:
>>>
>>>> Andrus,
>>>>
>>>> After watching the video you suggested, I tried one of the "tricks". I
>>>> started up tomcat, with the cayenne enabled app. Then took a snapshot with
>>>> VisualVM. There appear to be 5 instances of
>>>> org.apache.cayenne.event.EventManager$DispatchThread.run()
>>>>
>>>> This may or may not be normal, however when I redeployed the application
>>>> (via ant-tomcat command) there were then 10 instances. Each time I
>>>> redeployed the app, another 5 instances were displayed with VisualVM
>>>> snapshot.
>>>>
>>>> I then tried another test, in which I restarted Tomcat (to get 5 instances
>>>> of the EventManager) used Tomcat manager to undeploy the app (which
>>>> ostensibly wipes the app from the tomcat dir structure), however, the 5
>>>> instances of the EventManager were still showing up in VisualVM snapshot.
>>>>
>>>> Mark Thomas (the video lecturer), said that this all *might* indicate a
>>>> leak. However, since I am unfamiliar with the intended behavior, I cannot
>>>> be sure. On the other hand, having these 5 instance multiply each time
>>>> the app is redeployed does not seem like it is standard behavior.
>>>>
>>>> Thomas described an on behavior in which just adding a JDBC jar file to
>>>> your WEB-INF/lib dir could cause a leak. The reasoning behind how the
>>>> class loaders work was a bit convoluted, but I am wondering if these
>>>> behaviors are related.
>>>>
>>>> So my question is what behavior would you expect, and what should my next
>>>> test be?
>>>>
>>>> Joe
>>>>
>>>>
>>>> On Mar 13, 2012, at 4:47 PM, Andrus Adamchik wrote:
>>>>
>>>>>
>>>>> On Mar 13, 2012, at 4:03 PM, Mike Kienenberger wrote:
>>>>>
>>>>>> 2) Modern app servers restart and redeploy applications without
>>>>>> restarting the app server. Thus, the memory leak might be from a
>>>>>> previous application instance or application deployment. I think
>>>>>> someone reported a possible Cayenne issue for that recently.
>>>>>
>>>>> I keep recommending to people this presentation by Mark Thomas from
>>>>> Tomcat project:
>>>>>
>>>>> Video with slides:
>>>>> http://www.infoq.com/presentations/Diagnosing-Memory-Leaks
>>>>> Slides in PDF:
>>>>> people.apache.org/~markt/presentations/2010-11-04-Memory-Leaks-60mins.pdf
>>>>>
>>>>> Even if you are not using Tomcat, but curious what happens to your
>>>>> memory, I still recommend it :) It is applicable to any Java app server
>>>>> and was an eye opener to me back in the day.
>>>>>
>>>>> Andrus
>>>>>
>>>>
>>>>
>>>
>>
>>
>