2011-12-08 8 views
5

Sto utilizzando JAMon e desidero utilizzare lo jamon.war per monitorare la mia app. Tuttavia, la mia app e l'app jamon.war hanno caricatori di classi diversi, pertanto non vedono le rispettive variabili statiche (dove sono archiviati i dati, per quanto ho capito). Ricevo i dati corretti quando chiamo MonitorFactory.getReport() nella mia app.Utilizzo di jamon.war su tomcat

Come ottenere questo funzionamento?

risposta

4

Il problema era che avevo jamon-xx.jar nel mio WEB-INF/lib. Quando lo rimuovo (e lo ho solo nella cartella lib di tomcat), viene caricato dal classloader tomcat (che suppongo sia un genitore di tutti i programmi di caricamento delle applicazioni), e quindi le due applicazioni possono condividere i campi statici.

+0

Se si condivide un jar tra diverse applicazioni, è necessario farlo tramite la directory tomcat/lib. Ogni webapp ha infatti un proprio classloader, ma puoi metterli in comunicazione attraverso il classloader Common. Dai un'occhiata [qui] (http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html). – javanna

+0

È possibile osservare lo stesso problema con 'CacheManager' condiviso da EhCache (lo stesso gestore per tutti i WAR in Tomcat) - se' ehcache.jar' è fornito in bundle con ciascuna applicazione, ognuna avrà il suo 'CacheManager' dal momento che EhCache usa' campo statico' per condividere il gestore ... Una volta che 'ehcache.jar' è collocato nella directory'/lib' entrambe le applicazioni condividono lo stesso 'CacheManager' e le cache. –