Tomcat no proporciona ningún mecanismo para volver a cargar un solo JAR. Sin embargo, todo el contexto se puede volver a cargar.
sólo tiene que decirle a Tomcat para observar su JAR en context.xml, de esta manera,
<?xml version="1.0" encoding="UTF-8"?>
<Context override="true" swallowOutput="true" useNaming="false">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/lib/your.jar</WatchedResource>
<Manager pathname=""/>
</Context>
Hacemos esto en la producción. Tomcat solía tener algunas pérdidas de memoria, pero no hemos encontrado ningún problema con Tomcat 5.5 o posterior.
No sé si todavía es necesario. Tenemos que hacer las siguientes llamadas para evitar la pérdida de memoria durante la implementación en caliente.
public void contextDestroyed(ServletContextEvent sce) {
// To fix the known memory leaks during re-deploy
ClassLoader contextClassLoader =
Thread.currentThread().getContextClassLoader();
LogFactory.release(contextClassLoader);
java.beans.Introspector.flushCaches();
...
}
+1 para la llamada a LogFactory.release(). Aunque no utilizo Apache Commons Logging, es un código como este que aumenta la confianza en una aplicación. Más información @http: //wiki.apache.org/jakarta-commons/Logging/UndeployMemoryLeak –
Gracias chicos ... por favor revisen la edición en OP. –