Java - Hilfe benötigt MBean erstellen

7

Ich versuche, eine Klasse dazu zu bringen, eine MBean-Schnittstelle zu implementieren, damit ich die Eigenschaften zur Laufzeit abfragen kann. Die Klasse, die ich abfragen möchte, ist wie folgt:

%Vor%

Die Schnittstelle sieht so aus

%Vor%

Und ich starte die MBean so

%Vor%

Wie auch immer, ich bekomme immer die folgende Ausnahme und bin mir nicht sicher, was ich ändern muss

%Vor%

Ich denke, möglicherweise weil es eine Map zurückgibt? Bitte könnte jemand helfen?

Danke

    
Biscuit128 14.08.2014, 13:04
quelle

6 Antworten

15

Nachdem ich gerade auf diese Ausnahme gestoßen bin und mir sowohl die aktuellen Antworten als auch Ссылка angesehen habe, dachte ich mir, dass es hilfreich sein könnte betonen und verdeutlichen das bereits aufgezeigte:

  1. Die NotCompliantMBeanException wird unter anderem dadurch verursacht, dass diese Konvention nicht eingehalten wird. "ConcreteClassName" implementiert "ConcreteClassNameMBean"

  2. Ich habe dies gelöst, indem ich den ursprünglichen Namen meiner mbean-Schnittstelle von 'OrignalNameMBean' auf 'OriginalNameMXBean' aktualisiert habe, damit die mbean registriert werden kann, ohne der Konvention zu folgen

  3. Eine andere Lösung wäre, der Konvention zu folgen.

Bjorn Sayers 08.05.2015, 17:15
quelle
7

Ich hatte das gleiche Problem ("implementiert nicht DynamicMBean, und keines folgt den Standard-MBean-Konventionen") und dieser Artikel half mir, das Problem zu lösen (siehe Abschnitt StandardMBean verwenden: Ссылка ).

Ich muss explizit ein

%Vor%

Registrieren Sie dann die mbean:

%Vor%

Es funktioniert.

Wenn ich mBeanImpl mit dem mbServer registriere, habe ich die obige Ausnahme bekommen.

    
user3044236 04.11.2014 15:50
quelle
3

Die implementierende mbean-Klasse kann beliebig viele Methoden deklarieren, die nicht in der mbeans-Schnittstelle definiert sind ... Es ist nicht erforderlich, dass die implementierende Klasse nur die Schnittstellenmethoden implementiert.

In vielen Fällen wird dieses Problem verursacht, weil die mbean-Schnittstelle und die Implementierungsklasse nicht im selben Paket enthalten sind !

    
Kim Zeevaarders 13.05.2017 07:03
quelle
1

Ändern Sie einfach den Namen Ihrer Implementierungsklasse von ProfileCache in ProfileCacheInterface. Es sollte jetzt funktionieren. Außerdem kann Ihre Implementierungsklasse eine beliebige Anzahl eigener Methoden haben, und diese Methoden müssen nicht in der MBean-Schnittstelle erwähnt werden.

JMX's standard mbean Namenskonvention ist wie folgt

%Vor%     
deenfirdoush 26.01.2015 02:57
quelle
1

Sie können den Namen der Schnittstelle von SomethingMBean zu SomethingM X Bean ändern, z. B. HelloMBean zu HelloMXBean, aus dem Quellcode von jdk habe ich Folgendes gesehen:

%Vor%

Wenn nicht endetMit "MXBean" wird false zurückgegeben und dann illegalArgumentException ausgelöst.

jdk-Version: 1.8.0_25

class ist "JMX", Zeile 376

    
flahsy 10.07.2017 08:30
quelle
0

Ich stimme zu, TJ trolling für rep .......

In all den Beispielen, die ich für MBean-Implementierungen gesehen habe, habe ich nie gesehen, dass eine Klasse eine Methode definiert, die nicht in der Schnittstelle definiert wurde. Zum Beispiel hat ProfileCache die Methode updateCache, aber ProfileCacheInterfaceMBean nicht. Versuchen Sie, die updateCache-Methode von ProfileCache zu entfernen, und prüfen Sie, ob sie funktioniert.

    
jdb1015 14.08.2014 14:05
quelle

Tags und Links