Comment obtenir des données via MBean
Je me suis mise en œuvre d'une servlet comme un JMX gestionnaire qui s'exécute dans la même instance de Tomcat que tous les suivis servlets sont en cours d'exécution. Je peux voir les données de surveillance des servlets quand j'ouvre JConsole. À partir de l'intérieur de mon gestionnaire de servlet je peux énumérer toutes les MBeans standard, y compris ceux que j'ai créé dans le suivi des servlets, à l'aide de ce code comme ceci:
JMXServiceURL url = new JMXServiceURL( "service:jmx:rmi://localhost:1099/jndi/rmi://localhost:1099/jmxrmi" );
mConnector = JMXConnectorFactory.connect( url );
mMBSC = mConnector.getMBeanServerConnection();
mObjectName = new ObjectName( "com.blahCompany.blah.blah:type=BlahBlah" );
//just looking for one specific bean
Set<ObjectName> myMbean = mMBSC.queryNames( mObjectName, null );
if( myMBean.size() == 1 ) //I know it exists
{
MBeanInfo mbeanInfo = mMBSC.getMBeanInfo( <ObjectName extracted from Set> );
MBeanAttributeInfo[] mbeanAttributeInfos = mbeanInfo.getAttributes();
for( MBeanAttributeInfo attribInfo : mbeanAttributeInfos )
{
if( attribInfo.isReadable() )
{
String attribName = attribInfo.getName();
String attribReturnType = attribInfo.getType();
//The data's somewhere ... where????
//In the MBeanInfo?
//In the MBeanAttributeInfo??
}
}
}
Le problème est que je ne sais pas comment extraire la données de ces MBeans. La réponse doit être godawful évident parce que personne ne semble avoir posé la question, mais j'ai un cadeau pour donnant sur l'évidence. Votre aide sera grandement appréciée.
Projet de loi
OriginalL'auteur joe7pak | 2012-03-05
Vous devez vous connecter pour publier un commentaire.
Tout ce que vous devez faire est de quelque chose comme ci-dessous:
Ou créer un objet proxy qui obtient une instance de l'interface de MBean et vous permet d'y accéder de cette façon. Un tutoriel sur la façon de le faire est ici: http://docs.oracle.com/javase/tutorial/jmx/remote/custom.html
Une remarque, c'est en supposant une connexion à distance, mais à partir de votre question, il semble que votre accès à la haricots localement? Si c'est le cas, alors vous pouvez utiliser la plate-forme.getMBeanServer() pour obtenir l'accès à la MBeanServer plus directement. E. g.
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
Je suis accédant à la Haricots localement ... manager et les haricots sont tous dans la même JVM. Je vais essayer de le MBeanServer méthode qu'il ressemble beaucoup plus direct. Merci encore.
OriginalL'auteur Trevor Freeman