Beispiel: Verwaltungsclientprogramm
Die folgenden Beispiel bilden ein vollständiges Verwaltungsclientprogramm. Das zweite Beispiel verwendet einen RMI-Connector (Remote Method Invocation).
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 Angepasstes Java-Verwaltungsclientprogramm mit den Java-Verwaltungs-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 AdminClientExampleSoap implements NotificationListener
{
private AdminClient adminClient;
private ObjectName nodeAgent;
private long ntfyCount = 0;
public static void main(String[] args)
{
AdminClientExampleSoap ace = new AdminClientExampleSoap();
// Einen AdminClient erstellen
ace.createAdminClient();
// Eine NodeAgent-MBean lokalisieren
ace.getNodeAgentMBean("timmieNode07");
// 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, "timmie");
connectProps.setProperty(AdminClient.CONNECTOR_PORT, "8886");
System.setProperty("com.ibm.SSL.ConfigURL", "file:C:/MyThinClient/70properties/ssl.client.props");
System.setProperty("com.ibm.SOAP.ConfigURL", "file:C:/MyThinClient/70properties/soap.client.props");
// 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);
} catch (Exception e) {
e.printStackTrace();
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);
}
catch (ConnectorException e)
{
System.out.println(e);
}
}
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)
{
}
}
}
Das folgende Beispiel verwendet einen RMI-Connector: Der Connectortyp und der Portwert unterscheiden sich von den Angaben im vorherigen Beispiel.
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 AdminClientExampleSoap implements NotificationListener
{
private AdminClient adminClient;
private ObjectName nodeAgent;
private long ntfyCount = 0;
public static void main(String[] args)
{
AdminClientExampleSoap ace = new AdminClientExampleSoap();
// Einen AdminClient erstellen
ace.createAdminClient();
// Eine NodeAgent-MBean lokalisieren
ace.getNodeAgentMBean("timmieNode07");
// 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, "timmie");
connectProps.setProperty(AdminClient.CONNECTOR_PORT, "8886");
System.setProperty("com.ibm.SSL.ConfigURL", "file:C:/MyThinClient/70properties/ssl.client.props");
System.setProperty("com.ibm.SOAP.ConfigURL", "file:C:/MyThinClient/70properties/soap.client.props");
// 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);
} catch (Exception e) {
e.printStackTrace();
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);
}
catch (ConnectorException e)
{
System.out.println(e);
}
}
public void handleNotification(Notification ntfyObj, Object handback)
{
// Jede Benachrichtigung, 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)
{
}
}
}