2011-12-08 10 views
5

Estoy usando JAMon, y quiero usar el jamon.war para monitorear mi aplicación. Sin embargo, mi aplicación y la aplicación jamon.war tienen diferentes cargadores de clases y, por lo tanto, no ven las variables estáticas de las otras (donde los datos están almacenados, por lo que yo entiendo). Obtengo los datos correctos cuando llamo al MonitorFactory.getReport() en mi aplicación.Usando jamon.war en tomcat

¿Cómo funciona?

Respuesta

4

El problema era que tenía jamon-xx.jar en mi WEB-INF/lib. Cuando lo elimino (y lo tengo solo en el directorio lib de tomcat), lo carga el cargador de clases tomcat (que supongo que es el padre de todos los cargadores de clases de aplicaciones), por lo que las dos aplicaciones pueden compartir los campos estáticos.

+0

Derecho, si comparte un contenedor entre diferentes aplicaciones, debe hacerlo a través del directorio tomcat/lib. Cada aplicación web tiene de hecho su propio cargador de clases, pero puede ponerlas en comunicación a través del cargador de clases común. Eche un vistazo [aquí] (http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html). – javanna

+0

Puede observar el mismo problema con EhCache shared 'CacheManager' (el mismo administrador para todos los WAR en Tomcat) - si el' ehcache.jar' se incluye con cada aplicación, cada uno tendrá su propio 'CacheManager' ya que EhCache usa' static' field para compartir manager ... Una vez que 'ehcache.jar' se coloca en el directorio'/lib', ambas aplicaciones comparten el mismo 'CacheManager' y las cachés. –