[ 
https://issues.apache.org/jira/browse/CAMEL-6452?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13684235#comment-13684235
 ] 

Sanjay Deshmukh commented on CAMEL-6452:
----------------------------------------

Awesome - that gives me a lot more context and definitely sounds like the way 
to go. I like the per-context or per-streamcache temp dir that gets removed 
when the context or cache shuts down.

In the meantime, in case anyone else runs into this issue, here's the 
workaround (i.e. hack) that I added to the cleanup routine of our project:

{code}
    public void cleanShutdownHook() throws Exception {
        Class<?> klass = Class.forName("java.lang.ApplicationShutdownHooks");
        Field field = klass.getDeclaredField("hooks");
        field.setAccessible(true);

        @SuppressWarnings("unchecked")
        Map<Thread, Thread> hooks = (Map<Thread, Thread>) field.get(null);
        Thread target = null;
        for(Thread thread: hooks.values()) {
            if 
(thread.getClass().getName().equals("org.apache.camel.util.FileUtil$1")) {
                target = thread;
                break;
            }
        }

        if (target != null) {
            Runtime.getRuntime().removeShutdownHook(target);
        }
    }
{code}
                
> FileUtil.getDefaultTempDir() causes a classloader leak in webapps
> -----------------------------------------------------------------
>
>                 Key: CAMEL-6452
>                 URL: https://issues.apache.org/jira/browse/CAMEL-6452
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.10.4
>         Environment: tomcat 7, spring 3.2
>            Reporter: Sanjay Deshmukh
>             Fix For: 2.10.5, 2.11.1, 2.12.0
>
>         Attachments: 
> 0001-Fixed-CAMEL-6452-by-adding-a-cleanup-routine-to-remo.patch
>
>
> FileUtil.getDefaultTempDir() registers a JVM shutdown hook to delete the 
> temporary directory it creates. We are using camel in a web application in 
> Tomcat that gets dynamically reloaded as updates are available, so the JVM is 
> normally never shut down. This is causing 'camel-tmp-*' directories to linger 
> in $CATALINA_HOME/temp, and - more importantly - classloader leaks, which are 
> a major problem for us.
> If the thread that gets registered as the shutdown hook were stored in a 
> class variable, I could unregister it when the application is being unloaded.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to