3 Stimmen

Bewährte Verfahren für die Übermittlung von JMX-Benachrichtigungen

Ich suche nach Richtlinien für die Definition einer MBean, die Benachrichtigungen ausgibt, insbesondere für die Art der Benachrichtigungen. Die JMX-Best-Practices auf der Oracle-Website steht Folgendes. Aber es ist ein bisschen alt und vor Java6.

Benachrichtigungen sollten Instanzen von javax.management.Notification oder einer der Unterklassen aus dem javax.management-Namespace sein. Informationen, die nicht in eine dieser Unterklassen passen, sollten durch Anhängen eines CompositeData an die Benachrichtigung mithilfe der Methode setUserData übermittelt werden.

Auf der Oracle-Website sehe ich auch, dass Weblogic einige seiner eigenen Unterklassen definiert, z. B. WebLogicLogNotification. Seine Bewährte Praktiken Staaten:

Alle JMX-Benachrichtigungsobjekte erweitern den Objekttyp javax.management.Notification. JMX und WebLogic Server definieren zusätzliche Benachrichtigungsobjekttypen, wie z. B. javax.management.AttributeChangeNotification. Die zusätzlichen Objekttypen enthalten spezialisierte Informationssätze, die für verschiedene Arten von Ereignissen geeignet sind.

Unsere Benachrichtigungen passen nicht in eine der Standard-Unterklassen, so dass wir wie WLS in Erwägung ziehen, unsere eigene Unterklasse mit benutzerdefinierten Gettern für die Informationen zu definieren, die wir mit den Benachrichtigungen übermitteln möchten. Oder wäre es besser, bei der Basis javax.management.Notification zu bleiben und unsere Informationen einfach mit dem generischen setUserData(Object) anzuhängen? In letzterem Fall müsste das Objekt wohl ein JMX-Typ wie CompositeData sein, was nicht so schön wäre. Was wäre aus Sicht des Verbrauchers besser?

EDIT: Aus der Sicht der Verbraucher ist der Nachteil einer benutzerdefinierten Unterklasse wohl, dass sie diese in ihre Anwendung/Klassenpfad aufnehmen müssen.

4voto

jtahlborn Punkte 51903

Es ist fast immer eine schlechte idee, benutzerdefinierte datentypen in jmx zu verwenden. es ist sehr Halten Sie sich an die offenen Typen, und Ihre Daten können von jedem JMX-Client (Java oder anders) genutzt werden.

Beachten Sie, dass Sie immer einige Hilfsklassen bereitstellen können, die eine Art "benutzerdefinierte Bean"<-> "offener Typ"-Konvertierung durchführen. Klassen, die Zugriff auf die Hilfsklassen haben, können diese Komfortmethoden nutzen (z.B. ThreadInfo.from() ), während externer und Nicht-Java-Code die Daten weiterhin abrufen kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X