Example: Administrative client program
The following examples are complete administrative client program. The second examples uses a RMI connector.
Copy the contents to a file named AdminClientExample.java. After changing the node name and server name to the appropriate values for our configuration, we can compile and run it using the instructions from Create a custom Java administrative client program using WAS administrative Java APIs
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(); // Create an AdminClient ace.createAdminClient(); // Find a NodeAgent MBean ace.getNodeAgentMBean("timmieNode07"); // Invoke launchProcess ace.invokeLaunchProcess("server1"); // Register for NodeAgent events ace.registerNotificationListener(); // Run until interrupted ace.countNotifications(); } private void createAdminClient() { // Set up a Properties object for the JMX connector attributes 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"); // Get an AdminClient based on the connector properties try { adminClient = AdminClientFactory.createAdminClient(connectProps); } catch (ConnectorException e) { System.out.println("Exception creating admin client: " + e); System.exit(-1); } System.out.println("Connected to DeploymentManager"); } private void getNodeAgentMBean(String nodeName) { // Query for the ObjectName of the NodeAgent MBean on the given node 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) { // Use the launchProcess operation on the NodeAgent MBean to start // the given server 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("Exception invoking launchProcess: " + e); } } private void registerNotificationListener() { // Register this object as a listener for notifications from the // NodeAgent MBean. Don't use a filter and don't use a handback // object. 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) { // Each notification that the NodeAgent MBean generates will result in // this method being called ntfyCount++; System.out.println("***************************************************"); System.out.println("* Notification received at " + 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() { // Run until killed try { while (true) { Thread.currentThread().sleep(60000); System.out.println(ntfyCount + " notification have been received"); } } catch (InterruptedException e) { } } }The following example uses a RMI connector. The connector type and port value are different from what appears in the preceding example.
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(); // Create an AdminClient ace.createAdminClient(); // Find a NodeAgent MBean ace.getNodeAgentMBean("timmieNode07"); // Invoke launchProcess ace.invokeLaunchProcess("server1"); // Register for NodeAgent events ace.registerNotificationListener(); // Run until interrupted ace.countNotifications(); } private void createAdminClient() { // Set up a Properties object for the JMX connector attributes 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"); // Get an AdminClient based on the connector properties try { adminClient = AdminClientFactory.createAdminClient(connectProps); } catch (ConnectorException e) { System.out.println("Exception creating admin client: " + e); System.exit(-1); } System.out.println("Connected to DeploymentManager"); } private void getNodeAgentMBean(String nodeName) { // Query for the ObjectName of the NodeAgent MBean on the given node 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) { // Use the launchProcess operation on the NodeAgent MBean to start // the given server 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("Exception invoking launchProcess: " + e); } } private void registerNotificationListener() { // Register this object as a listener for notifications from the // NodeAgent MBean. Don't use a filter and don't use a handback // object. 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) { // Each notification that the NodeAgent MBean generates will result in // this method being called ntfyCount++; System.out.println("***************************************************"); System.out.println("* Notification received at " + 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() { // Run until killed try { while (true) { Thread.currentThread().sleep(60000); System.out.println(ntfyCount + " notification have been received"); } } catch (InterruptedException e) { } } }
Developing an administrative client program