2008-12-22 14 views
7

Empecé a jugar con MBeans por exponer información sobre una aplicación. Prácticamente la totalidad de HOWTOs/Tutorials/Blog posts/Samples en línea le enseñan cómo implementar un MBean y registrarlo en un MBean Server, pero nunca mencionar (o solo de forma aproximada) anular el registro del MBean del servidor.¿Es necesario anular el registro de un MBean del servidor Platform MBean?

Me preocupa un MBean que necesita tener una referencia a un objeto bastante pesado para proporcionar información de estado sobre ese objeto.

¿Mantiene el servidor de MBean de plataforma una referencia débil al MBean, u otro truco de ese tipo, para asegurarse de que eventualmente reciba GC si su aplicación ya no guarda ninguna referencia al mismo? ¿El registro es generalmente innecesario, por lo que se explica por qué nadie está hablando de ello en los tutoriales de JMX?

Respuesta

5

No se puede "débilmente" registrar un MBean con un servidor (aún), por lo que se espera que se GCed cuando no existen otras referencias a él.

Dicho esto, definitivamente debe leer algunas publicaciones de Eamonn McManus sobre el tema.

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

Se ha sugerido que la API JMX podría tener algún apoyo explícito a "MBeans débil" como este. No estoy seguro de que haya suficiente uso para justificar incluyéndolos en la API, y estoy también no estoy seguro de cómo sería una API de propósito general para Weak MBeans. Pero lo anterior muestra cómo puede crear sus propios MBeans Débiles si es necesario.

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

MBeans "débil". Un MBean con frecuencia administra otro objeto Java que es el "recurso" que se va a supervisar o controlado. Pero ¿y si la única referencia de ese recurso es del MBean ? ¿Podríamos de alguna manera arreglar que el MBean desaparezca si el recurso ya no es referenciado por nadie más?

Activación y desactivación de MBeans caros. Algunos MBeans pueden exportar información que se muestrea continuamente y que es costoso de recopilar. No necesita necesariamente quiere que esos MBeans sean ejecutándose todo el tiempo. Las soluciones ad hoc son fáciles, por ejemplo, el método setThreadContentionMonitoringEnabled en java.lang.management.ThreadMXBean. Pero quizás podría haber una convención más general , como un método setDetailLevel (int).

Cuestiones relacionadas