Wie bekomme ich Daten per MBean
Ich bin Implementierung einer servlet als JMX-manager, der läuft in der gleichen Instanz von Tomcat zu, dass alle von der überwachten servlets ausgeführt werden. Ich kann sehen, dass die Daten der überwachten servlets, wenn ich offen JConsole. Aus meiner manager-servlet kann ich aufzählen, die alle verfügbaren standard-MBeans, auch die, die ich erstellt habe in den überwachten servlets, mit diesem code wie dieser:
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??
}
}
}
Das problem ist, ich weiß nicht, wie Sie tatsächlich extrahieren Sie die Daten von diesen MBeans. Die Antwort muss sein godawful der Hand, weil sonst niemand zu haben scheint gefragt, aber ich habe ein Geschenk für den Blick auf das offensichtliche. Ihre Hilfe wird dankbar geschätzt.
Bill
InformationsquelleAutor joe7pak | 2012-03-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alles, was Sie tun müssen, ist so etwas wie die folgenden:
Oder erstellen Sie eine proxy-Objekt wird eine Instanz der MBean-Schnittstelle und ermöglicht es auf diese Weise zugreifen. Ein tutorial dazu ist hier: http://docs.oracle.com/javase/tutorial/jmx/remote/custom.html
Einem Hinweis, dies wird vorausgesetzt, Sie eine remote-Verbindung, aber aus Ihrer Frage, es scheint Ihr Zugriff auf die Bohnen direkt vor Ort? Wenn das der Fall ist, dann können Sie Plattform.getMBeanServer() auf, um Zugang zu den MBeanServer mehr direkt. E. g.
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
Ich bin der Zugriff auf die Beans lokal ... - manager und die Bohnen sind alle in der gleichen JVM. Ich werde versuchen, den MBeanServer Methode, wie es aussieht, viel direkter. Nochmals vielen Dank.
InformationsquelleAutor Trevor Freeman