Deploy and managing a custom Java administrative client program with multiple Java 2 Platform, Enterprise Edition application servers

This section describes how to connect to a Java 2 Platform, Enterprise Edition (J2EE) server, and how to manage multiple vendor servers.

 

Before you begin

The WAS completely implements the J2EE Management specification, also known as JSR-77 (Java Specification Requests 77). However, some differences in details between the J2EE specification and the WAS implementation are important for you to understand when you develop a Java administrative client program to manage multiple vendor servers. For information, see the Java Platform, Enterprise Edition (J2EE) Management Specification and the MBean application programming interface (API) documentation.

 

Overview

When your administrative client program accesses WebSphere Application Servers exclusively, use the Java APIs and WebSphere Application Server-defined MBeans to manage them. If your program needs to access both WebSphere Application Servers and other J2EE servers, use the API defined in the J2EE Management specification.

 

Procedure

  1. Connect to a J2EE server.

    Connect to a server by looking up the Management enterprise bean from the Java Naming and Directory Interface (JNDI). The Management enterprise bean supplies a remote interface to the MBean server that runs in the application server. The Management enterprise bean works almost exactly like the WebSphere Application Server administrative client, except that it does not provide WebSphere Application Server specific functionality. The following example shows how to look up the Management enterprise bean

    import javax.management.j2ee.ManagementHome;
    import javax.management.j2ee.Management;
    
    Properties props = new Properties();
    
    props.setProperty(Context.PROVIDER_URL, "iiop://myhost:2809");
    Context ic = new InitialContext(props);
    Object obj = ic.lookup("ejb/mgmt/MEJB");
    ManagementHome mejbHome = (ManagementHome)
            PortableRemoteObject.narrow(obj, ManagementHome.class);
    Management mejb = mejbHome.create();
    
    
    The example gets an initial context to an application server by passing the host and port of the RMI connector. You must explicitly code the RMI port, in this case 2809. The lookup method looks up the ejb/mgmt/MEJB path, which is the location of the Management enterprise bean home. The example then creates the mejb stateless session bean, which you use in the next step.

  2. Manage multiple vendor application servers.

    After you create the mejb stateless session bean, use it to manage your application servers. Components from the application servers appear as MBeans, which the specification defines. These MBeans all have the j2eeType key property. This key property is one of a set of types that the specification defines. All of these types have a set of exposed attributes.

    Use the following example to guide you in managing multiple vendor application servers. The example uses the Java virtual machine (JVM) MBean to determine what the current heap size is for the application server.

    ObjectName jvmQuery = new ObjectName("*:j2eeType=JVM,*");
    Set s = mejb.queryNames(jvmQuery, null);
    ObjectName jvmMBean = (ObjectName) s.iterator().next();
    boolean hasStats = ((Boolean) mejb.getAttribute(jvmMBean,
            "statisticsProvider")).booleanValue();
    if (hasStats) {
        JVMStats stats = (JVMStats) mejb.getAttribute(jvmMBean,
                                                      "stats");
        String[] statisticNames = stats.getStatisticNames();
        if (Arrays.asList(statisticNames).contains("heapSize")) {
            System.out.println("Heap size: " + stats.getHeapSize());
        }
    }
    
    

    The queryNames() method first queries the JVM MBean. The getAttribute method gets the statisticsProvider attribute and determine if this MBean provides statistics. If the MBean does, the example accesses the stats attribute, and then invokes the getHeapSize() method to get the heap size.

 

Result

The strength of this example is that the example can run on any vendor application server. It demonstrates that an MBean can optionally implement defined interfaces, in this case the StatisticsProvider interface. If an MBean implements the StatisticsProvider interface, one can see if an application server supports a particular statistic, in this case the heap size. The specification defines the heap size, although this value is optional. If the application server supports the heap size, one can display the heap size for the JVM.


 

See Also


Developing administrative programs for multiple Java 2 Platform, Enterprise Edition application servers