Im eigenen Tab in der JConsole habe ich keinen Zugriff auf meine eigenen MBeans

SyncIT

Mitglied
Hallo,

ich verzweifele gerade ein wenig... Hier mein Problem:

Ich habe eine Java Anwendung, die lokal bei mir läuft. In dieser werden einige MBeans von mir erstellt und beim PlattformMBeanServer registriert.

Code:
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
mbs.registerMBean(<MBean Instanz>, <MBean ObjectName>);
...

In der JConsole unter dem MBeans-Tab kann ich die auch alle schön unter meiner Domain sehen. Jetzt habe ich aber einen eigenen, zusätzlichen Tab für die JConsole geschrieben. Funktioniert auch super, allerdings nur soweit... Ich habe nämlich keinen Zugriff auf meine MBeans und weiss einfach nicht woran es liegt. In meinem neuen Tab hole ich mir den MBeanserver genauso wie oben mit

Code:
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

Wenn ich jetzt versuche eine MBean, die ich in der laufenden Anwendung registriert habe abzufragen klappt das nicht. Die Liste meiner MBeans ist immer leer. Abfragen tue ich die so:

Code:
Set<ObjectInstance> mbeanInstances = mbs.queryMBeans(new ObjectName("<Meine Domain>:*"), null);

Jedenfalls ist das Set das da zurückkommt leer und ich habe keine Ahnung warum. Es ist ja der gleiche MBeanserver, oder? Und das witzige ist ja auch dass meine eigenen MBeans in dem MBeans-Tab der JConsole zu sehen sind, in meinem eigenen, zusätzlichen Tab aber nicht.

Ich habe bisher noch nichts hilfreiches gefunden, vielelicht würde es auch helfen wenn man den Code der JConsole sehen könnte...

Vielen Dank schonmal für eure Hilfe!
 
Hallo,

schade eigentlich dass mir keiner geholfen hat, hätte eigentlich gedacht das man hier Hilfe findet. Naja, vielleicht kennt sich nur niemand mit diesem Thema aus, wobei ich mir das irgendwie nicht vorstellen kann...

Jedenfalls ist hier die Lösung. Mit dem Code der JConsole konnte ich herausfinden wie ich das machen muss.
In der Klasse, die von JConsolePlugin erbt gibt es eine Methode
Code:
getContext()
Mit dieser Methode bekommt man den Kontext in dem sich die JConsole aktuell befindet. Jetzt kann man sich mit den Kontext die MBeanServerConnection mit
Code:
getMBeanServerConnection()
holen. Mit diesem Kontext kann man dann die MBeans abfragen. Dazu gibt es 2 Möglichkeiten:
1. Möglichkeit queryNames(Objectname, QueryExp), damit bekommt man ein Set das die Ergebnisse enthält
2. Möglichkeit: getAttribute(ObjectName, String), damit bekommt man den Wert eines speziellen Attributs.
 
Was bitte soll das denn für ne Ansage sein ? Nach nich mal 24h "rumheulen" das hier keiner hilfsbereit wäre und sich hier keiner damit auskennen würde. Bei so nem speziellem Thema muss man halt auch mal Geduld haben ... unsere Profis sind auch nicht all-wissend ... und auch nicht jeden Tag online. Ganz nebenbei wäre das im EE-Forum besser aufgehoben gewesen ...
 
Also ich finde nicht dass ich in irgendeiner Weise "rumgeheult" habe. Und das hier niemand hilfsbereit ist hab ich schonmal gar nciht damit sagen wollen... Ich hätte nur schneller mit ner Antwort gerechnet, aber ist ja egal, habs ja wie gesagt auch so hinbekommen. ich habe ja auch immerhin die Lösung für das Problem gepostet, nur mal so am Rande...

Das sollte im übrigen auch keine Beschwerde sein, es ist mir nur aufgefallen. Und klar, natürlich ist es ein spezielles Thema mit dem sich nciht jeder auskennt.

Naja, wie auch immer, falls ich jemandem "auf die Füße getreten bin" tut mir das leid.

Zum Forum, ja sorry, war wohl ein Fehler von mir, das EE-Forum wäre sicherlich richtiger gewesen :)
 
Zurück