2008-12-22 8 views
7

Ho iniziato a giocare con gli MBean per esporre alcune informazioni su un'app. Praticamente la totalità degli HOWTO/Tutorials/Blog post/Samples online ti insegnano come implementare un MBean e registrarlo con un MBean Server, ma non menzionare mai (o solo in modo alterato) l'annullamento della registrazione dell'MBean dal server.È necessario annullare la registrazione di un MBean dal Platform MBean Server?

Sono preoccupato per un MBean che deve avere un riferimento a un oggetto abbastanza pesante per fornire informazioni sullo stato di quell'oggetto.

Il Platform MBean Server mantiene un debole riferimento all'MBean, o qualche altro trucco del genere, per assicurare che alla fine riceva GC se l'applicazione non contiene più alcun riferimento? Generalmente l'annullamento della registrazione non è necessario, spiegando in tal modo perché nessuno ne sta parlando nei tutorial di JMX?

risposta

5

Non è possibile "debolmente" registrare un MBean con un server (ancora), quindi aspettarsi che sia GCed quando non esistono altri riferimenti.

Detto questo, dovresti assolutamente leggere alcuni post di Eamonn McManus sull'argomento.

https://web.archive.org/web/20120207140653/http://weblogs.java.net/blog/emcmanus/archive/2005/07/cleaning_up_an_1.html

E 'stato suggerito che l'API JMX potrebbe avere un po' di supporto esplicito per "MBeans deboli" come questo. Non sono sicuro che ci sia abbastanza da usare per giustificare includendoli nell'API, e io sono anche non so che aspetto avrebbe un'API generica per MBeans deboli. Ma quanto sopra mostra come è possibile creare i propri MBea Se necessario.

https://web.archive.org/web/20090114131740/http://weblogs.java.net/blog/emcmanus/archive/2005/07/javaone_feedbac.html

MBeans "debole". Un MBean frequentemente gestisce un altro oggetto Java che è la "risorsa" da monitorare o controllata. Ma cosa succede se il solo riferimento a quella risorsa proviene dall'MBean ? Potremmo in qualche modo organizzare l'MBean a scomparire se la risorsa non viene più referenziata da nessuno altro?

Accensione e spegnimento di MBeans costosi. Alcuni MBeans possono esportare le informazioni che viene continuamente campionata e che è costoso da raccogliere. Non è necessario che lo desideri che gli MBean siano in esecuzione tutto il tempo. Le soluzioni ad hoc sono semplici, ad esempio il metodo setThreadContentionMonitoringEnabled in java.lang.management.ThreadMXBean. Ma forse potrebbe esserci una convenzione più generale , come ad esempio un metodo setDetailLevel (int) .

Problemi correlati