Verwaltungsclientprogramm entwickeln

Sie können ein Verwaltungsclientprogramm entwickeln, das die Verwaltungs-APIs von WebSphere Application Server und Java™ Management Extensions (JMX) verwendet.

Informationen zu diesem Vorgang

Mit den Verwaltungs-APIs des Produkts können Sie nicht nur den Betrieb Ihres verteilten Systems steuern, sondern auch die Konfiguration aktualisieren. Informationen zur Schnittstelle "AdminClient" finden Sie in der Dokumentation zu den Anwendungsprogrammierschnittstellen.

Sehen Sie sich die Beispiele für MBean-Operationen an. Informationen zur Programmierung von MBeans finden Sie in der MBean-Java-API-Dokumentation. Klicken Sie in diesem Information Center auf Referenz > Programmierschnittstellen > MBean-Schnittstellen.

Vorgehensweise

  1. Erstellen Sie eine AdminClient-Instanz.

    Ein Verwaltungsclientprogramm muss Methoden für das AdminService-Objekt aufrufen, das im Deployment Manager bzw. bei der Basisinstallation im Anwendungsserver aktiv ist.

    Die Klasse "AdminClient" stellt über einen der unterstützten JMX-Connectors einen Proxy zum fernen AdminService-Objekt bereit.
    • Das folgende Beispiel veranschaulicht, wie eine AdminClient-Instanz für den SOAP-Connector (Simple Object Access Protocol) erstellt wird:
      Properties connectProps = new Properties();
      connectProps.setProperty(
      AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
      
      connectProps.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
      connectProps.setProperty(AdminClient.CONNECTOR_PORT, "8879");
      connectProps.setProperty(AdminClient.USERNAME, "test2");
      connectProps.setProperty(AdminClient.PASSWORD, "user24test");
      	AdminClient adminClient = null;
      try
      {
             adminClient = AdminClientFactory.createAdminClient(connectProps);
      }
      catch (ConnectorException e)
      {
             System.out.println("Ausnahme beim Erstellen des Admin-Client: " + e);
      }
      1. Konfigurieren Sie ein Properties-Objekt.

        Das Beispiel konfiguriert ein Properties-Objekt mit den Eigenschaften, die für die Verbindungsherstellung zum Server erforderlich sind. In diesem Fall verwenden Sie den SOAP-Connector, um den Server zu erreichen. Verwenden Sie für den Connectortyp den Wert AdminClient.CONNECTOR_TYPE_SOAP.

      2. [AIX Solaris HP-UX Linux Windows][IBM i]Führen Sie der Einfachheit halber das Clientprogramm auf derselben Maschine aus wie den Server. Verwenden Sie als Hostnamen localhost.

        Wenn Sie auf einen fernen und nicht auf den lokalen Host zugreifen möchten, verwenden Sie einen im Netz auflösbaren Namen für diesen Host.

      3. Konfigurieren Sie die Nummer des Port, an dem der SOAP-Connector des Servers empfangsbereit ist.

        In einer Einzelserverinstallation ist die Standardportnummer für den SOAP-Connector des Anwendungsservers 8880. In einer Installation von WebSphere Application Server Network Deployment ist die Standardportnummer für den SOAP-Connector des Deployment Manager 8879.

      4. Nachdem Sie die Verbindungseigenschaften definiert haben, erstellen Sie mit der Klasse AdminClientFactory und dem Properties-Objekt ein AdminClient-Objekt, das mit dem ausgewählten Server verbunden ist.

        Je nach Protokoll und Sicherheitsumgebung müssen Sie unter Umständen weitere Eigenschaften definieren. Wenn Sie beispielsweise die Sicherheit für Ihr Anwendungsclientprogramm aktivieren, schließen Sie die Eigenschaften "javax.net.ssl.*" ein. Ausführlichere Informationen "AdminClient", den Eigenschaften "javax.net.ssl.*" und weitere Erstellungsbeispiele finden Sie in der API-Dokumentation zur Schnittstelle "AdminClient".

    • Das folgende Beispiel veranschaulicht, wie eine AdminClient-Instanz für den RMI-Connector (Remote Method Invocation) erstellt wird. Einige Befehle sind aus Gründen der besseren Lesbarkeit auf mehrere Zeilen verteilt.
      Properties connectProps = new Properties();
      connectProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_RMI);
      connectProps.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
      connectProps.setProperty(AdminClient.CONNECTOR_PORT, "2809");
      connectProps.setProperty(AdminClient.USERNAME, "test2");
      connectProps.setProperty(AdminClient.PASSWORD, "user24test");
      System.setProperty("com.ibm.CORBA.ConfigURL", 
       "file:C:/AA/cf010839.26/profiles/AppSrv02/properties/sas.client.props");
      System.setProperty("com.ibm.SSL.ConfigURL", 
       "file:C:/AA/cf010839.26/profiles/AppSrv02/properties/ssl.client.props");
      	AdminClient adminClient = null;
      try
      {
             adminClient = AdminClientFactory.createAdminClient(connectProps);
      }
      catch (ConnectorException e)
      {
             System.out.println("Ausnahme beim Erstellen des Admin-Client: " + e);
      }
      Unterstützte Konfigurationen Unterstützte Konfigurationen: Wenn Sie die Methode createAdminClient im Anwendungscode verwenden, der auf einem Anwendungsserver ausgeführt wird, wie z. B. in Servlets und JSP-Dateien, müssen Sie die Eigenschaft CACHE_DISABLED auf "true" setzen. Beispiel:
      connectProps.setProperty(AdminClient.CACHE_DISABLED, "true");
      sptcfg
      1. Konfigurieren Sie ein Properties-Objekt.

        Das Beispiel konfiguriert ein Properties-Objekt mit den Eigenschaften, die für die Verbindungsherstellung zum Server erforderlich sind. In diesem Fall verwenden Sie den RMI-Connector, um den Server zu erreichen. Verwenden Sie für den Connectortyp den Wert AdminClient.CONNECTOR_TYPE_RMI.

      2. [AIX Solaris HP-UX Linux Windows][IBM i]Führen Sie der Einfachheit halber das Clientprogramm auf derselben Maschine aus wie den Server. Verwenden Sie als Hostnamen localhost.

        Wenn Sie auf einen fernen und nicht auf den lokalen Host zugreifen möchten, verwenden Sie einen im Netz auflösbaren Namen für diesen Host.

      3. Konfigurieren Sie die Nummer des Ports, an dem der RMI-Connector des Servers empfangsbereit ist.

        In einer Einzelserverinstallation ist die Standardportnummer für den RMI-Connector des Anwendungsservers 2809. In einer Installation von WebSphere Application Server Network Deployment ist die Standardportnummer für den RMI-Connector des Deployment Manager 9809.

      4. Nachdem Sie die Verbindungseigenschaften definiert haben, erstellen Sie mit der Klasse AdminClientFactory und dem Properties-Objekt ein AdminClient-Objekt, das mit dem ausgewählten Server verbunden ist.

        Je nach Protokoll und Sicherheitsumgebung müssen Sie unter Umständen weitere Eigenschaften definieren. Wenn Sie beispielsweise die Sicherheit für Ihr Anwendungsclientprogramm aktivieren, müssen Sie eine Systemeigenschaft setzen, um auf die Dateien "ssl.client.props" und "sas.client.props" zu zeigen. Wenn Sie auf einer lokalen Maschine arbeiten, können Sie auf die tatsächliche Position zeigen. Wenn Sie auf einer fernen Maschine arbeiten, können Sie diese Eigenschaftendateien von der Servermaschine kopieren, an einer beliebigen Position ablegen, deren Pfad Sie angeben.

        Sie können in der Datei "sas.client.props" einen Benutzernamen und ein Kennwort angeben. Verwenden Sie hierfür com.ibm.CORBA.loginSource=properties. Wenn Sie den Benutzernamen und das Kennwort in Ihrem Clientprogramm festlegen möchten, geben Sie com.ibm.CORBA.loginSource=none in der Datei "sas.client.props" an.

  2. Suchen Sie eine MBean.

    Sobald Sie eine AdminClient-Instanz angefordert haben, können Sie mit dieser auf verwaltete Ressourcen der Administrationsserver und Anwendungsserver zugreifen. Jede verwaltete Ressource registriert beim AdminService eine MBean, über die Sie auf die Ressource zugreifen können. Die MBean wird durch eine ObjectName-Instanz repräsentiert, die die MBean bezeichnet. Eine ObjectName-Instanz besteht aus einem Domänennamen und einem oder mehreren Schlüsseleigenschaften in beliebiger Reihenfolge. Die Syntax für den Domänennamen ist wie folgt:

    [Domänenname]:Eigenschaft=Wert[,Eigenschaft=Wert]*
    Für WebSphere Application Server lautet der Domänenname WebSphere. Für die Administration sind die folgenden Schlüsseleigenschaften definiert:
    Tabelle 1. Beschreibungen der Schlüsseleigenschaften. Die Schlüsseleigenschaften sind: type, name, cell, node, process.
    Schlüsseleigenschaft Beschreibung
    type Der Typ der MBean. Beispiel: Server, TraceService, Java Virtual Machine (JVM).
    name Der Namensbezeichner für die individuelle Instanz der MBean.
    cell Der Name der Zelle, in der die MBean ausgeführt wird.
    node Der Name des Knotens, auf dem die MBean ausgeführt wird.
    process Der Name des Prozesses, in dem die MBean ausgeführt wird.

    Einige MBeans in WebSphere Application Server verwenden weitere Schlüsseleigenschaften. Eine MBean ohne Schlüsseleigenschaften kann bei einem MBean-Server in einem Prozess von WebSphere Application Server registriert werden. Eine solche MBean kann jedoch nicht an den verteilten Erweiterungen teilhaben, die das Produkt hinzufügt, z. B. Anforderungsweiterleitung, verteilte Ereignisbenachrichtigung usw.

    Wenn Sie den vollständigen Satz der Schlüsseleigenschaften für eine ObjectName-Instanz kennen, können Sie diesen verwenden, um die MBean zu suchen. Praktischer und bequemer ist es jedoch, MBeans suchen zu können, ohne alle Schlüsseleigenschaften kennen zu müssen. Verwenden Sie das Platzhalterzeichen * für alle Schlüsseleigenschaften, für die Sie keine exakte Entsprechung benötigen. Die folgende Tabelle enthält verschiedene Beispiele für Objektnamen mit Platzhalterzeichen für Schlüsseleigenschaften, die einer oder mehreren MBeans entsprechen.
    Tabelle 2. Beispielobjektnamen mit Schlüsseleigenschaften mit Platzhaltern. Schließen Sie Sterne (*) ein, wenn Sie Schlüsseleigenschaften für Platzhalterzeichen angeben möchten.
    Objektname Beschreibung
    *:type=Server,* Alle MBeans des Typs Server
    *:node=Node1,type=Server,* Alle MBeans des Typs Server auf Node1
    *:type=JVM,process=server1,node=Node1,* Die JVM-MBean im Server server1 auf Knoten Node1
    *:process=server1,* Alle MBeans in allen Servern mit dem Namen server1
    *:process=server1,node=Node1,* Alle MBeans im Server server1 auf Node1

    Sie können nach einer MBean suchen, indem Sie für die Abfrage Objektnamen verwenden, die den Schlüsseleigenschaften entsprechen. Das folgende Beispiel veranschaulicht die Suche nach der MBean für den Node Agent des Knotens MyNode:

    String nodeName = "MyNode";
    String query = "WebSphere:type=NodeAgent,node=" + nodeName + ",*";
    ObjectName queryName = new ObjectName(query);
    ObjectName nodeAgent = null;
    	Set s = adminClient.queryNames(queryName, null);
    if (!s.isEmpty())
        nodeAgent = (ObjectName)s.iterator().next();
    else
        System.out.println("Die MBean nodeAgent wurde nicht gefunden");
    1. Erstellen Sie eine ObjectName-Instanz mit einer Abfragezeichenfolge, die die Schlüsseleigenschaften Typ und Knoten definiert.

      Wenn Sie für die verbleibenden Schlüsseleigenschaften ein Platzhalterzeichen verwenden, ermittelt dieses Muster die Objektnamen aller MBeans des Typs NodeAgent auf dem Knoten MyNode. Da pro Knoten nur ein Node Agent vorhanden ist, reichen diese Informationen aus, um die gewünschte MBean zu identifizieren.

    2. Übergeben Sie diese ObjectName-Instanz an die Methode queryNames der Schnitttstelle AdminClient.

      Die Schnittstelle "AdminClient" setzeinen fernen Aufruf an die Schnittstelle "AdminService" ab, um die Objektnamen der MBeans abzurufen, die der Abfrage entsprechen. Der leere zweite Parameter für diese Methode ist ein Abfrageausdruck (QueryExp-Objekt), das Sie als zusätzliche Abfrage für die MBeans verwenden können, die dem ObjectName-Muster im ersten Parameter entsprechen.

    3. Verwenden Sie den Iterator set, um das erste und in diesem Fall einzige Element anzufordern.

      Das Element ist die MBean-ObjectName-Instanz des Node Agent.

  3. MBean verwenden.

    Welche Aufgaben eine bestimmte MBean ausführen kann, richtet sich nach der Verwaltungsschnittstelle dieser MBean. Eine MBean kann Folgendes deklarieren:

    • Attribute, die Sie abrufen und definieren können
    • Operationen, die Sie aufrufen können
    • Benachrichtigungen, für die Sie Listener registrieren können
    Informationen zu den von WebSphere Application Server bereitgestellten MBeans finden Sie in der Dokumentation zu den unterstützten Schnittstellen in der MBean-API-Dokumentation. Das folgende Beispiel ruft eine der Operationen auf, die in der oben gefundenen MBean NodeAgent verfügbar ist. Das folgende Beispiel startet den Anwendungsserver MyServer:
    String opName = "launchProcess";
    String signature[] = { "java.lang.String" };
    String params[] = { "MyServer" };
    try
    {
         adminClient.invoke(nodeAgent, opName, params, signature);
    }
    catch (Exception e) 
    {
         System.out.println("Ausnahme beim Aufrufen von launchProcess: " + e);
    }
    Die Methode AdminClient.invoke ist ein generisches Verfahren für das Aufrufen einer Operation für eine MBean. Die folgenden Parameter können verwendet werden:
    • der Objektname der Ziel-MBean, nodeAgent,
    • der Name der Operation, opName,
    • ein Objekt-Array, das die Operationsparameter, params, enthält,
    • ein Zeichenfolge-Array, das die Operationssignatur, signature, enthält.
    Die Operation launchProcess in diesem Beispiel hat einen einzigen Parameter, der eine Zeichenfolge ist, die den zu startenden Server angibt.

    Die invoke-Methode gibt eine Objektinstanz zurück, die der aufrufende Code verwenden kann, um den Rückgabetyp für die aufgerufene Operation korrekt umzusetzen. Die Operation launchProcess ist mit void deklariert, sodass Sie den Rückgabewert in diesem Beispiel ignorieren können.

  4. Registrierung für Ereignisse.

    Neben der Verwaltung von Ressourcen unterstützt die JMX-API (Java Management Extensions) auch die Überwachung von Anwendungen auf bestimmte Administrationsereignisse. Bestimmte Ereignisse generieren Benachrichtigungen. Dies gilt beispielsweise für das Starten eines Servers. Verwaltungsanwendungen können sich als Listener für die Benachrichtigungen registrieren lassen. WebSphere Application Server implementiert das JMX-Benachrichtigungsmodell vollständig und bietet zusätzliche Funktionen an, sodass Sie Benachrichtigungen in einer verteilten Umgebung empfangen können. Eine vollständige Liste der Benachrichtigungen, die von Produkt-MBeans ausgegeben werden, finden Sie in der Beschreibung der Klasse "com.ibm.websphere.management.NotificationConstants" in der MBean-API-Dokumentation.

    Das folgende Beispiel zeigt, wie sich ein Objekt für Ereignisbenachrichtigungen registrieren kann, die von einer MBean mit dem ObjektName nodeagent ausgegeben werden:

    adminClient.addNotificationListener(nodeAgent, this, null, null);

    In diesem Beispiel ist der erste Parameter der ObjectName für die Node-Agent-MBean. Der zweite Parameter gibt das Listenerobjekt an, das die Schnittstelle NotificationListener implementieren muss. In diesem Fall ist das aufrufende Objekt der Listener. Der dritte Parameter ist ein Filter, mit dem Sie angeben können, welche Benachrichtigungen Sie empfangen möchten. Wenn Sie den Wert null übernehmen, erhalten Sie alle Benachrichtigungen von dieser MBean. Der letzte Parameter ist ein Handback-Objekt, mit dem Sie die JMX-API anweisen können, zurückzukehren, falls sie eine Benachrichtigung ausgibt.

    Wenn sich Ihre MBean in einem anderen Server in der Zelle befindet, können Sie ihre Benachrichtigungen selbst dann empfangen, wenn Ihr Verwaltungsclientprogramm nicht mit dem Deployment-Manager-Server verbunden ist. Alle Benachrichtigungen werden an den übergeordneten Server gesendet. Beispielsweise wird eine Benachrichtigung eines Anwendungsservers zuerst an den lokalen Node Agent und anschließend an den Deployment Manager gesendet.

    Als weiteres Feature bietet Application Server die Möglichkeit, sich mit einem Aufruf als Listener für Benachrichtigungen mehrerer MBeans zu registrieren. Die Registrierung wird mit der Methode addNotificationListenerExtended der Schnitttstelle AdminClient, einer Erweiterung der JMX-Standardmethode addNotificationListener durchgeführt. Mit dieser Erweiterungsmethode können Sie sich selbst für MBeans registrieren, die derzeit nicht aktiv sind. Diese Registrierung ist wichtig, wenn Sie Ereignisse von Ressourcen überwachen möchten, die während der Ausführung des Verwaltungsclientprogramms gestoppt und erneut gestartet werden können.

  5. Ereignisse behandeln.

    Objekte empfangen JMX-Ereignisbenachrichtigungen über die Methode handleNotification, die von der Schnittstelle NotificationListener definiert wird und vom Empfänger implementiert werden muss. Das folgende Beispiel zeigt eine Implementierung der Methode handleNotification, die empfangene Benachrichtigungen meldet:

    public void handleNotification(Notification n, Object handback)
    {
         System.out.println("***************************************************");
         System.out.println("* Benachrichtigung empfangen am " + new Date().toString());
         System.out.println("* type      = " + ntfyObj.getType());
         System.out.println("* message   = " + ntfyObj.getMessage());
         System.out.println("* source    = " + ntfyObj.getSource());
         System.out.println(
         "* seqNum    = " + Long.toString(ntfyObj.getSequenceNumber()));
         System.out.println("* timeStamp = " + new Date(ntfyObj.getTimeStamp()));
         System.out.println("* userData  = " + ntfyObj.getUserData());
         System.out.println("***************************************************");
    }

Ergebnisse

Der Verwaltungsclient kann Ereignisbenachrichtigungen verarbeiten, die von einer MBean ausgegeben werden.

Fehler vermeiden Fehler vermeiden: Wenn ein Clientprogramm einen Listener für Benachrichtigungen über einen RMI- oder JSR160RMI-Connector registriert und der ORB-Thread nicht gestoppt wird, was die Beendigung der Java Virtual Machine verhindert, fügen Sie dem Clientprogramm eine Anweisung System.exit() hinzu. Der ORB startet einen Thread für die Verarbeitung der Benachrichtigungsweitergabe an den Client. Dieser Thread wird nicht automatisch mit dem Clienthauptthread beendet, es sei denn, der Hauptthread enthält eine Anweisung System.exit(). Fügen Sie eine Anweisung System.exit() an einer Position im Clientprogramm hinzu, die die Beendigung der Verarbeitung des ORB-Threads und des Hauptthreads ermöglicht. Sie könnten beispielsweise die Anweisung System.exit() in eine Klausel catch oder finally des Hauptblocks try im Clientprogramm einfügen. gotcha

Beispiel: Verwaltungsclientprogramm

Kopieren Sie den Inhalt in eine Datei mit dem Namen AdminClientExample.java. Nachdem Sie den Knotennamen und den Servernamen in die für Ihre Konfiguration geeigneten Werte geändert haben, können Sie eine Kompilierung durchführen und die Anweisungen im Artikel Angepassten Java-Verwaltungsclient mit Java-Administrations-APIs von WebSphere Application Server erstellen verwenden.
import java.util.Date;
import java.util.Properties;
import java.util.Set;

import javax.management.InstanceNotFoundException;
import javax.management.MalformedObjectNameException;
import javax.management.Notification;
import javax.management.NotificationListener;
import javax.management.ObjectName;

import com.ibm.websphere.management.AdminClient;
import com.ibm.websphere.management.AdminClientFactory;
import com.ibm.websphere.management.exception.ConnectorException;

public class AdminClientExample implements NotificationListener
{

    private AdminClient adminClient;
    private ObjectName nodeAgent;
    private long ntfyCount = 0;

    public static void main(String[] args)
    {
       AdminClientExample ace = new AdminClientExample();

       // Einen AdminClient erstellen
       ace.createAdminClient();

       // Eine NodeAgent-MBean lokalisieren
       ace.getNodeAgentMBean("ellington");

       // launchProcess aufrufen
       ace.invokeLaunchProcess("server1");

       // Registrierung für NodeAgent-Ereignisse durchführen
       ace.registerNotificationListener();
        
       // Ausführen bis Unterbrechung
       ace.countNotifications();
    }

    private void createAdminClient()
    {
        // Properties-Objekt für die Attribute des JMX-Connector konfigurieren
        Properties connectProps = new Properties();
        connectProps.setProperty(
        AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
        connectProps.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
        connectProps.setProperty(AdminClient.CONNECTOR_PORT, "8879");
        
        // AdminClient basierend auf den Connector-Eigenschaften abrufen
        try
        {
            adminClient = AdminClientFactory.createAdminClient(connectProps);
        }
        catch (ConnectorException e)
        {
            System.out.println("Ausnahme beim Erstellen des Admin-Client: " + e);
            System.exit(-1);
        }
        
        System.out.println("Connected to DeploymentManager");
    }
    
    
    private void getNodeAgentMBean(String nodeName)
    {
        // ObjectName von NodeAgent-MBean auf angegebenem Knoten abfragen
        try
        {
            String query = "WebSphere:type=NodeAgent,node=" + nodeName + ",*";
            ObjectName queryName = new ObjectName(query);
            	Set s = adminClient.queryNames(queryName, null);
            if (!s.isEmpty())
                nodeAgent = (ObjectName)s.iterator().next();
            else
            {
                System.out.println("Node agent MBean was not found");
                System.exit(-1);
            }
        }
        catch (MalformedObjectNameException e)
        {
            System.out.println(e);
            System.exit(-1);
        }
        catch (ConnectorException e)
        {
            System.out.println(e);
            System.exit(-1);
        }
        
        System.out.println("Found NodeAgent MBean for node " + nodeName);
    }
    
    private void invokeLaunchProcess(String serverName)
    {
        // launchProcess-Operation auf NodeAgent-MBean ausführen, um
        // den angegebenen Server zu starten
        String opName = "launchProcess";
        String signature[] = { "java.lang.String" };
        String params[] = { serverName };
        boolean launched = false;
        try
        {
            Boolean b = (Boolean)adminClient.invoke(
            
nodeAgent, opName, params, signature);
            launched = b.booleanValue();
            if (launched)
                System.out.println(serverName + " was launched");
            else
                System.out.println(serverName + " was not launched");

        }
        catch (Exception e) 
        {
            System.out.println("Ausnahme beim Aufrufen von launchProcess: " + e);
        }
    }
    
    private void registerNotificationListener()
    {
        // Dieses Objekt als Listener für Benachrichtigungen der
        // NodeAgent-MBean registrieren.  Keinen Filter und kein
        // Handback-Objekt verwenden.
        try
        {
            adminClient.addNotificationListener(nodeAgent, this, null, null);
            System.out.println("Registered for event notifications");
        }
        catch (InstanceNotFoundException e)
        {
            System.out.println(e);
            e.printStackTrace();
        }
        catch (ConnectorException e)
        {
            System.out.println(e);
            e.printStackTrace();
        }
    }
    
    public void handleNotification(Notification ntfyObj, Object handback)
    {
        // Jede Beachrichtigung, die von der NodeAgent-MBean generiert wird,
        // führt dazu, dass diese Methode aufgerufen wird.
        ntfyCount++;
        System.out.println("***************************************************");
        System.out.println("* Benachrichtigung empfangen am " + new Date().toString());
        System.out.println("* type      = " + ntfyObj.getType());
        System.out.println("* message   = " + ntfyObj.getMessage());
        System.out.println("* source    = " + ntfyObj.getSource());
        System.out.println(
        "* seqNum    = " + Long.toString(ntfyObj.getSequenceNumber()));
        System.out.println("* timeStamp = " + new Date(ntfyObj.getTimeStamp()));
        System.out.println("* userData  = " + ntfyObj.getUserData());
        System.out.println("***************************************************");

    }
    
    private void countNotifications()
    {
        // Ausführen, bis Abbruch mit Befehl KILL erfolgt
        try
        {
            	while (true)
            {
                Thread.currentThread().sleep(60000);
                System.out.println(ntfyCount + " notification have been received");
            }
        }
        catch (InterruptedException e)
        {
        }
    }
    
}

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjmx_develop
Dateiname:tjmx_develop.html