Kummulieren von Informationen zu Mule-Applikationen per JMX

Keine Kommentare

In meinem letzten Post habe ich erklärt, wie man per JMX Maven-Build-Informationen von Mule Applikationen veröffentlichen kann. Wenn man nun mehrere solcher Applikationen installiert hat, die alle diese Informationen bereitstellen, könnte man dies nutzen um eine Informationsseite zu erstellen, die diese Informationen kummuliert darstellt.

Die Erstellung dieser Mule Applikation soll in diesem Tutorial gezeigt werden.

Um die Informationen per JMX aus den anbietenden Mule Applikationen auf einer HTML-Seite zusammenzustellen bedarf es eines HTTP-Endpoints, der den HTTP-Request des Browsers entgegen nimmt und eines Transformers, der die Aufbereitung des HTMLs vornimmt. Beispielhaft möchte ich das im Folgenden zeigen.

Mule Flow-Konfiguration

Für die Beantwortung des Browser-Requests ist folgender Flow in der Mule Applikation einzurichten:

<flow name="info">
    <http:inbound-endpoint address="http://localhost:55555/info"
        contentType="text/html" exchange-pattern="request-response">
    </http:inbound-endpoint>
    <custom-transformer class="de.codecentric.foo.InfoHTMLTransformer" />
</flow>

Verantwortlich für das Auslesen und Zusammenstellen der Informationen der Applikations-MBeans als HTML ist der definierte InfoHTMLTransformer, der nun im folgenden detailierter dargestellt wird.

HTML Message-Transformer

Im Mule wird für die Darstellung der Informationen in HTML ein MessageTransformer implementiert, der den MBeanServer nach InfoMBeans durchsucht und an diesen dann die per JMX exportieren Attribute Name und Version ausliest. Das HTML kann natürlich verschönert werden und ggf. per Template-Maschine (z.B. freemarker) konstruiert werden. Es geht mir hier nur um das generelle Vorgehen zum Auslesen der MBean-Attribute.

package de.codecentric.foo;
 
import javax.management.MBeanServer;
import javax.management.ObjectName;
 
import org.mule.api.MuleMessage;
import org.mule.api.transformer.TransformerException;
import org.mule.transformer.AbstractMessageTransformer;
import org.springframework.jmx.support.JmxUtils;
 
public class InfoHTMLTransformer extends AbstractMessageTransformer {
 
    @Override
    public Object transformMessage(MuleMessage message, String outputEncoding)
            throws TransformerException {
        MBeanServer mBeanServer = JmxUtils.locateMBeanServer();
        String apps = "";
        for (String domain : mBeanServer.getDomains()) {
            try {
                if (domain.startsWith("Mule.")) {
                    String name = (String) mBeanServer.getAttribute(
                            new ObjectName(domain + ":name=InfoMBean"), "Name");
                    String version = (String) mBeanServer.getAttribute(
                            new ObjectName(domain + ":name=InfoMBean"), "Version");
                    apps += "<tr><td>" + name + "</td><td>" + version + "</td>";
                }
            } catch (Exception e) {
                // behandle Exception !!!
            }
        }
        return "<html><body><table>" + apps + "</table></body></html>";
    }
}

Wichtig hierbei ist natürlich, dass die MBeans so implementiert sind, wie ich im meinem vorangegangenen Post beschrieben hatte, ansonsten können die Attribute nicht gefunden werden und wir landen ständig im catch-Block.

Ergebnis

Wenn man diese Mule Applikation nun installiert und aufruft, so wird folgendes angezeigt:

firefox

Es ist also kein Hexenwerk, Daten von JMX-Beans auszulesen und in eine Mule Applikation einzubetten.

Weitere Teile dieser Artikelserie

  1. Was ist ein ESB und wofür kann man ihn nutzen?
  2. Tutorial “Enterprise Service Bus mit Mule ESB”: Hello World/Bus
  3. Tutorial “Enterprise Service Bus mit Mule ESB”: MuleMessage und Java-Komponenten
  4. Tutorial „Enterprise Service Bus mit Mule ESB“: Nachrichten mit Java transformieren
  5. Tutorial „Enterprise Service Bus mit Mule ESB“: Integration von CICS Programmen
  6. Tutorial “Enterprise Service Bus mit Mule ESB”: Transport, Connector, Endpoint: Ein paar Grundlagen…
  7. Tutorial “Enterprise Service Bus mit Mule ESB”: Performance und Threads
  8. Tutorial “Enterprise Service Bus mit Mule ESB”: Steuerung und Kontrolle per JMX
  9. Veröffentlichen von Informationen zu Mule Applikationen im Maven-Umfeld
  10. Tutorial “Enterprise Service Bus mit Mule ESB”: Exceptions und Email
  11. Veröffentlichen von Informationen zu Mule Applikationen im Maven-Umfeld

Nach seinem Studium der Informatik stieß er direkt im Anschluss, im Jahr 2007, auf codecentric und ist seitdem begeisterter Arbeitnehmer.
In seinen Projekten bei der codecentric war er für diverse Versicherungen tätig und hat darin Systeme und Lösungen für Versicherungsprodukte geschaffen.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.