2008-12-22 6 views
7

J'ai commencé à jouer avec MBeans pour exposer des informations sur une application. Presque la totalité des HOWTOs/Tutoriels/Blog posts/Samples en ligne vous apprend à implémenter un MBean et à l'enregistrer avec un serveur MBean, mais ne mentionne jamais (ou seulement de manière informelle) l'annulation de l'enregistrement du MBean sur le serveur.Est-il nécessaire de désinscrire un MBean du serveur Platform MBean?

Je suis préoccupé par un MBean qui doit avoir une référence à un objet assez lourd afin de fournir des informations d'état sur cet objet. Le serveur Platform MBean conserve-t-il une faible référence au MBean ou à une autre astuce de ce type, pour s'assurer qu'il finira par recevoir un message GC si votre application ne contient plus de références? Le désenregistrement est-il généralement inutile, expliquant pourquoi personne n'en parle dans les tutoriels JMX?

Répondre

5

Vous ne pouvez pas "faiblement" enregistrer un MBean avec un serveur (pour l'instant), attendez-vous à ce qu'il soit GCed quand aucune autre référence n'existe. Cela étant dit, vous devriez certainement lire quelques articles d'Eamonn McManus sur le sujet.

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

Il a été suggéré que l'API JMX pourrait avoir un soutien explicite pour "MBeans faibles" comme celui-ci. Je ne suis pas sûr il y a assez d'utilisation pour eux de justifier en les incluant dans l'API, et je suis aussi ne sais pas à quoi ressemblerait une API à usage général pour les MBeans faibles. Mais ce qui précède montre comment créer vos propres MBeans faibles si besoin est.

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

MBeans "faible". Un MBean fréquemment gère un autre objet Java qui est la "ressource" à surveiller ou contrôlée. Mais que se passe-t-il si la seule référence à cette ressource provient du MBean ? Pourrions-nous en quelque sorte organiser le MBean à disparaître si la ressource n'est plus référencée par personne autrement?

Allumer et éteindre des MBeans coûteux. Certains MBeans peuvent exporter des informations qui sont continuellement échantillonnées et que est coûteux à collecter. Vous ne voulez pas nécessairement que ces MBeans soient en cours d'exécution tout le temps. Les solutions ad hoc sont faciles, par exemple la méthode setThreadContentionMonitoringEnabled dans java.lang.management.ThreadMXBean. Mais peut-être il pourrait y avoir une convention plus générale , comme une méthode setDetailLevel (int).

Questions connexes