Creating and configuring a JDBC provider and data source using the JMX API

If your application requires access to a Java Database Connectivity (JDBC) connection pool from a Java 2 Platform, Enterprise Edition (J2EE) 1.3 or 1.4, or Java Platform Enterprise Edition (Java EE) level WebSphere® Application Server component, you can create the necessary JDBC provider and data source objects using the Java Management Extensions (JMX) API exclusively.

About this task

Alternatively, you can use the JMX API in combination with the wsadmin scripting tool.
Best practice Best practice: If you are using the JMX API to create a data source, you should use one of the product-provided templates if one exists for your specific JDBC provider. The product provides a template for every supported JDBC provider. See the topic Data source minimum required settings, by vendor for a list of all of the supported JDBC providers. When you use the administrative console to select one of the provided templates, the administrative console prompts you for values for all of the required properties for that data source. See the topic, Configuring a JDBC provider and data source, for more information on how to use the administrative console to create a data source. If you decide to use the wsadmin scripting tool to create a data source, see the topic Data source minimum required settings, by vendor for a list of the required settings. bprac
These steps outline the general procedure for using the JMX API to create a JDBC provider and data source, on WebSphere Application Server running on Windows® platforms.

Procedure

  1. Put the appropriate JAR files in your classpath. You need the com.ibm.ws.admin.client_6.1.0.jar JAR file in your classpath.
    [AIX Solaris HP-UX Linux Windows] The following command is an example for setting your classpath:
    set classpath=%classpath%;install_root\runtime\com.ibm.ws.admin.client_6.1.0.jar
    [z/OS] The following command is an example for setting your classpath:
    export CLASSPATH=$CLASSPATH:/WebSphere/V7R1M0/AppServer/runtime/com.ibm.ws.admin.client_6.1.0.jar
    
  2. Look up the host and get an administration client handle.
  3. Get a configuration service handle.
  4. Update the resource.xml file using the configuration service as wanted.
    1. Add a JDBC provider.
    2. Add the data source.
    3. Add the connection factory. This step is necessary only for data sources that must support container-managed persistence.
  5. Reload the resource.xml file to bind the newly created data source into the JNDI namespace. Perform this step if you want to use the newly created data source right away without restarting the application server.
    1. Locate the DataSourceConfigHelper MBean using the name.
    2. Put together the signature and parameters for the call.
    3. Invoke the reload() call.
  6. Attention: If you modify the class path or native library path of an existing JDBC provider, you must restart every application server within the scope of that JDBC provider for the new configuration to work. Otherwise, you receive a data source failure message.

Example

Example: Using the Java Management Extensions API to create a JDBC driver and data source for a CMP bean. This code sample demonstrates how to configure a JDBC provider and data source, designate the data source for use with CMP beans, set an authorization alias for the data source, and reload the Mbean to make configuration changes.

[AIX Solaris HP-UX Linux Windows]
//
// "This program may be used, executed, copied, modified and distributed 
// without royalty for the purpose of developing, using, marketing, or 
// distributing."
//
// Product 5630-A36,  (C) COPYRIGHT International Business Machines 
// Corp., 2008
// All Rights Reserved * Licensed Materials - Property of IBM
//
import java.util.*;
import javax.sql.*;
import javax.transaction.*;
import javax.management.*;

import com.ibm.websphere.management.*;
import com.ibm.websphere.management.configservice.*;
import com.ibm.ws.exception.WsException;


/**
 * Creates a node scoped resource.xml entry for a DB2 XA data source.
 * The data source created is for CMP use.
 * 
 * Set the following for the program to run:
 * set classpath=%classpath%;install_root\runtime\com.ibm.ws.admin.client_6.1.0.jar
 * install_root/lib/bootstrap.jar;install_root/lib/j2ee.jar; 
 * install_root/plugins/com.ibm.ws.bootstrap_6.1.0.jar;install_root/plugins/com.ibm.ws.emf_2.1.0.jar; 
 * install_root/plugins/com.ibm.ws.runtime_6.1.0.jar;install_root/plugins/org.eclipse.emf.common_2.2.1.v200609210005.jar; 
 * install_root/plugins/org.eclipse.emf.ecore_2.2.1.v200609210005.jar; 
 */
public class CreateDataSourceCMP {

   String dsName = "markSection"; // the display name for the data source,
                                  // the JNDI name, and the connection factory name
   String dbName = "SECTION";     // the database name
   String authDataAlias = "db2admin"; // an authentication data alias
   String uid = "db2admin";           // user ID
   String pw  = "db2admin";           //  password
   String dbclasspath = "D:/SQLLIB/java/db2java.zip"; // path to the database driver




   /**
    * Main method.
    */
   public static void main(String[] args) {
      CreateDataSourceCMP cds = new CreateDataSourceCMP();

      try {
         cds.run(args);
      } catch (com.ibm.ws.exception.WsException ex) {
         System.out.println("Caught this " + ex   );
         ex.printStackTrace();
         //ex.getCause().printStackTrace();
      } catch (Exception ex) {
         System.out.println("Caught this " + ex );
         ex.printStackTrace();
      }
   }


   /**
    * This method creates the data source using JMX.
    * The data source created here is only written into resources.xml. 
    * It is not bound into namespace until the server is restarted or 
    * an application is started
    */
   public void run(String[] args) throws Exception {

      try {
         // Initialize the AdminClient.
         // Specify the SOAP_CONNECTOR_ADDRESS port of your server configuration.
         Properties adminProps = new Properties();
         adminProps.setProperty(AdminClient.CONNECTOR_TYPE, +
          AdminClient.CONNECTOR_TYPE_SOAP);
         adminProps.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
         adminProps.setProperty(AdminClient.CONNECTOR_PORT, "8880");
         AdminClient adminClient = +
              AdminClientFactory.createAdminClient(adminProps);

         // Get the ConfigService implementation.			
         com.ibm.websphere.management.configservice.ConfigServiceProxy
           configService =
         new com.ibm.websphere.management.configservice.ConfigServiceProxy(adminClient);

         Session session = new Session();

         // Use this group to add to the node scoped resource.xml.
         ObjectName node1 = ConfigServiceHelper.createObjectName(null,"Node",
            null);
         ObjectName[] matches = configService.queryConfigObjects(session, null,
            node1, null);
         node1 = matches[0];     // use the first node found

         // Use this group to add to the server1 scoped resource.xml.
         ObjectName server1 = ConfigServiceHelper.createObjectName(null,
                 "Server", "server1");
         matches = configService.queryConfigObjects(session, null, server1,
                null);
         server1 = matches[0];   // use the first server found

         // Create the JDBCProvider
         String providerName = "DB2 JDBC Provider (XA)";
         System.out.println("Creating JDBCProvider " + providerName );

         // Prepare the attribute list
         AttributeList provAttrs = new AttributeList();
         provAttrs.add(new Attribute("name", providerName));
         provAttrs.add(new Attribute("implementationClassName",
                 "com.ibm.db2.jdbc.DB2XADataSource"));
         provAttrs.add(new Attribute("description","DB2 JDBC2-compliant
                  + XA Driver"));

         //create the provider 
         ObjectName jdbcProv = configService.createConfigData(session,node1,
               "JDBCProvider", "JDBCProvider",provAttrs);
         // now plug in the classpath
         configService.addElement(session,jdbcProv,"classpath",dbclasspath,-1);


         // Search for RRA so we can link it to the data source 
         ObjectName rra = null;
         ObjectName j2cra = ConfigServiceHelper.createObjectName(null, "J2CResourceAdapter", null);
         matches = configService.queryConfigObjects(session, node1, j2cra, null);
         for (int i = 0; i < matches.length; i++) {
           if ( matches[i].getKeyProperty("_Websphere_Config_Data_Display_Name").equals("WebSphere Relational 
             Resource Adapter") ) {
             rra = matches[i];
             break;
           }
         }

         // Prepare the attribute list
         AttributeList dsAttrs = new AttributeList();
         dsAttrs.add(new Attribute("name", dsName));
         dsAttrs.add(new Attribute("jndiName", "jdbc/" + dsName));
         dsAttrs.add(new Attribute("datasourceHelperClassname",
              "com.ibm.websphere.rsadapter.DB2DataStoreHelper"));
         dsAttrs.add(new Attribute("statementCacheSize", new Integer(10)));
         dsAttrs.add(new Attribute("relationalResourceAdapter", rra)); 
         // this is where we make the link to "builtin_rra"
         dsAttrs.add(new Attribute("description", "JDBC data source for
              + mark section CMP 2.0 test"));
         dsAttrs.add(new Attribute("authDataAlias",authDataAlias));

         // Create the data source
         System.out.println("  **  Creating data source");
         ObjectName dataSource = 
             configService.createConfigData(session,jdbcProv,"DataSource",
                "DataSource",dsAttrs);

         // Add a propertySet.
         AttributeList propSetAttrs = new AttributeList();
         ObjectName resourcePropertySet =
           configService.createConfigData(session,dataSource,"propertySet",
                "",propSetAttrs);

         // Add resourceProperty databaseName
         AttributeList propAttrs1 = new AttributeList();
         propAttrs1.add(new Attribute("name", "databaseName"));
         propAttrs1.add(new Attribute("type", "java.lang.String"));
         propAttrs1.add(new Attribute("value", dbName));

         configService.addElement(session,resourcePropertySet,
              "resourceProperties",propAttrs1,-1);


         // Create the corresponding J2CResourceAdapter Connection Factory object.
         ObjectName jra = ConfigServiceHelper.createObjectName(null,
             "J2CResourceAdapter",null);

         // Get all the J2CResourceAdapter, and add the data source 
         System.out.println("  **  Get all J2CResourceAdapters");
         ObjectName[] jras = configService.queryConfigObjects(session, node1,
               jra, null);

         int i=0;

         for (;i< jras.length;i++) {
            System.out.println(ConfigServiceHelper.getConfigDataType(jras[i])
                    + " " + i + " = " 
                    + jras[i].getKeyProperty(SystemAttributes.
                    + _WEBSPHERE_CONFIG_DATA_DISPLAY_NAME)
                    + "\nFrom scope =" 
                    + jras[i].getKeyProperty(SystemAttributes.
                    + _WEBSPHERE_CONFIG_DATA_ID));
            // quit on the first builtin_rra
            if (jras[i].getKeyProperty(SystemAttributes.
                               + _WEBSPHERE_CONFIG_DATA_DISPLAY_NAME)
                .equals("WebSphere Relational Resource Adapter")) {
               break;
            }
         }


         if (i >= jras.length) { 
            System.out.println("Did not find builtin_rra; the J2CResourceAdapter object is
               + creating connection factory anyway" );
            break; 
         } else { 
            System.out.println("Found builtin_rra J2CResourceAdapter object at index 
               + " + i + " creating connection factory" );
         }

         // Prepare the attribute list
         AttributeList cfAttrs = new AttributeList();
         cfAttrs.add(new Attribute("name", dsName + "_CF"));
         cfAttrs.add(new Attribute("authMechanismPreference","BASIC_PASSWORD"));
         cfAttrs.add(new Attribute("authDataAlias",authDataAlias));
         cfAttrs.add(new Attribute("cmpDatasource", dataSource ));  
         // Make the link to data source's xmi:id
         ObjectName cf = configService.createConfigData(session,jras[i],
            "CMPConnectorFactory", "CMPConnectorFactory",cfAttrs);


         // ===== start Security section
         System.out.println("Creating an authorization data alias " + authDataAlias);

         // Find the parent security object
         ObjectName security = ConfigServiceHelper.createObjectName(null, 
             "Security", null);
         ObjectName[] securityName = configService.queryConfigObjects(session,
             null, security, null);
         security=securityName[0];

         // Prepare the attribute list
         AttributeList authDataAttrs = new AttributeList();
         authDataAttrs.add(new Attribute("alias", authDataAlias));
         authDataAttrs.add(new Attribute("userId", uid));
         authDataAttrs.add(new Attribute("password", pw));
         authDataAttrs.add(new Attribute("description","Auto created alias for data source"));

         //create it 
         ObjectName authDataEntry = configService.createConfigData(session,security,"authDataEntries",
				    "JAASAuthData",authDataAttrs);
         // ===== end Security section

         // Save the session
         System.out.println("Saving session" );
         configService.save(session, false);

         // reload resources.xml
         reload(adminClient,true);
      } catch (Exception ex) {
         ex.printStackTrace(System.out);
         throw ex;
      }
   }

   /**
    * Get the DataSourceConfigHelperMbean and call reload() on it
    * 
    * @param adminClient
    * @param verbose true - print messages to stdout
    */
   public void reload(AdminClient adminClient,boolean verbose) {
      if (verbose) {
         System.out.println("Finding the Mbean to call reload()");
      }

      // First get the  Mbean
      ObjectName handle = null;
      try {
         ObjectName queryName = new ObjectName("WebSphere:type=DataSourceCfgHelper,*");
         Set s = adminClient.queryNames(queryName, null);
         Iterator iter = s.iterator();
         if (iter.hasNext()) handle = (ObjectName)iter.next();
      } catch (MalformedObjectNameException mone) {
         System.out.println("Check the program variable queryName" + mone);
      } catch (com.ibm.websphere.management.exception.ConnectorException ce) {
         System.out.println("Cannot connect to the application server" + ce);
      }

      if (verbose) {
         System.out.println("Calling reload()");
      }
      Object result = null;
      try {
         result = adminClient.invoke(handle, "reload", new Object[] {}, new String[] {});
      } catch (MBeanException mbe) {
         if (verbose) {
            System.out.println("\tMbean Exception calling reload" + mbe);
         }
      } catch (InstanceNotFoundException infe) {
         System.out.println("Cannot find reload ");
      } catch (Exception ex) {
         System.out.println("Exception occurred calling reload()" + ex);
      }

      if (result==null && verbose) {
         System.out.println("OK reload()");
      }
   }
}
[z/OS]
//
// "This program may be used, run, copied, modified and distributed 
// without royalty for the purpose of developing, using, marketing, or 
// distributing."
//
// Product 5630-A36,  (C) COPYRIGHT International Business Machines Corp., 2008
// All Rights Reserved * Licensed Materials - Property of IBM
//

import java.util.*;
import javax.sql.*;
import javax.transaction.*;
import javax.management.*;
import java.io.*;

import com.ibm.websphere.management.*;
import com.ibm.websphere.management.configservice.*;
import com.ibm.ws.management.*;
import com.ibm.ws.exception.*;

/**
 * Creates a node-scoped resource.xml entry for a
 * DB2 for zOS Local JDBC Provider (RRS) data source
 * when WebSphere security is not enabled
 *
 * The data source created is for CMP use.
 *
 * To run this example, the following must be done:
 *
 * 1)  Set the WAS_HOME environment variable to the location of
 *     your WebSphere Application Server for z/OS Configuration
 *     directory
 *
 *     Example:  export WAS_HOME=/install_root
 *
 * 2)  Set the following environment variables:
 *
 *     export WAS_LIB=$WAS_HOME/lib
 *     export WAS_CLASSPATH=[DIRECTORY_CONTAINING_THIS_FILE]
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_LIB/admin.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_LIB/bootstrap.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_LIB/j2ee.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_LIB/jmxc.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/java/jre/lib/ext/mail.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/plugins/com.ibm.ws.bootstrap_6.1.0.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/plugins/com.ibm.ws.emf_2.1.0.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/plugins/com.ibm.ws.runtime_6.1.0.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/plugins/org.eclipse.emf.common_2.2.1.v200609210005.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/plugins/org.eclipse.emf.ecore_2.2.1.v200609210005.jar 
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/runtime/admin.client_6.1.0.jar

 *
 * 3)  Execute the following commands:
 *
 *     javac -classpath $WAS_CLASSPATH CreateDataSourceCMP.java
 *     java -classpath $WAS_CLASSPATH CreateDataSourceCMP
 */
public class CreateDataSourceCMP {

    String dsName = "MyDataSourceCMP";  // the data source display name
                                        // this is also the JNDI name and connection factory name
    String dbName = "LOC1";             // database name
    String authDataAlias = "IBMUSER";   // an authentication data alias
    String uid = "IBMUSER";             // user ID
    String pw  = "IBMUSER";             // password
    String dbclasspath = "/db2beta/db2710/classes/db2j2classes.zip";  // path to the database driver
    String dblibpath = "/db2beta/db2710/lib";           // path to the native library directory for the database

    /**
     * Main method.
     */
    public static void main(String[] args) {
        CreateDataSourceCMP cds = new CreateDataSourceCMP();
        try {
            cds.run(args);
        } catch (com.ibm.ws.exception.WsException ex) {
            System.out.println("Caught this " + ex);
            ex.printStackTrace();
            ex.getCause().printStackTrace();
        } catch (Exception ex) {
            System.out.println("Caught this " + ex);
            ex.printStackTrace();
        }
    }

    /**
     * This method creates the data source using JMX.
     * The data source created here is only written into resources.xml.
     * It is not bound into namespace until the server is restarted, 
     * or an application is started
     */
    public void run(String[] args) throws Exception {
        try {
            // Initialize the AdminClient.
            // Specify the SOAP_CONNECTOR_ADDRESS port of your server configuration.
            Properties adminProps = new Properties();
            adminProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
            adminProps.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
            adminProps.setProperty(AdminClient.CONNECTOR_PORT, "8880");
            AdminClient adminClient = AdminClientFactory.createAdminClient(adminProps);

            // Get the ConfigService implementation.
            com.ibm.websphere.management.configservice.ConfigServiceProxy configService =
            new com.ibm.websphere.management.configservice.ConfigServiceProxy(adminClient);

            Session session = new Session();

            // Use this group to add to the node scoped resource.xml.
            ObjectName node1 = ConfigServiceHelper.createObjectName(null, "Node", null);
            ObjectName[] matches = configService.queryConfigObjects(session, null, node1, null);
            node1 = matches[0];     // use the first node found

            // Use this group to add to the server1 scoped resource.xml.
            ObjectName server1 = ConfigServiceHelper.createObjectName(null, "Server", "server1");
            matches = configService.queryConfigObjects(session, null, server1, null);
            server1 = matches[0];   // use the first server found

            // Create the JDBCProvider
            String providerName = "My DB2 for zOS Local JDBC Provider (RRS) 
                   for CMP";
            System.out.println("Creating JDBCProvider " + providerName );

            // Prepare the attribute list
            AttributeList provAttrs = new AttributeList();
            provAttrs.add(new Attribute("name", providerName));
            provAttrs.add(new Attribute("implementationClassName","com.ibm.db2.jcc.DB2ConnectionPoolDataSource"));
            provAttrs.add(new Attribute("description","Legacy DB2 for z/OS driver using RRS"));

            //create it
            ObjectName jdbcProv = configService.createConfigData(session,node1,"JDBCProvider",
               "JDBCProvider", provAttrs);
            // now plug in the classpath
            configService.addElement(session,jdbcProv,"classpath",dbclasspath,-1);
            configService.addElement(session,jdbcProv,"nativepath",dblibpath,-1);

            // Search for RRA so we can link it to the data source 
            ObjectName rra = null;
            ObjectName j2cra = ConfigServiceHelper.createObjectName(null, "J2CResourceAdapter", null);
            matches = configService.queryConfigObjects(session, node1, j2cra, null);
            for (int i = 0; i < matches.length; i++) {
              if ( matches[i].getKeyProperty("_Websphere_Config_Data_Display_Name").equals("WebSphere Relational 
                Resource Adapter") ) {
                rra = matches[i];
                break;
              }
            }
            // Prepare the attribute list
            AttributeList dsAttrs = new AttributeList();
            dsAttrs.add(new Attribute("name", dsName));
            dsAttrs.add(new Attribute("jndiName", "jdbc/" + dsName));
            dsAttrs.add(new Attribute("datasourceHelperClassname","com.ibm.websphere.rsadapter.DB2DataStoreHelper"));
            dsAttrs.add(new Attribute("statementCacheSize", new Integer(10)));
            dsAttrs.add(new Attribute("relationalResourceAdapter", rra)); 
             // this is where we make the link to "builtin_rra"
            dsAttrs.add(new Attribute("description", "JDBC data source for 
                   CMP usage"));
            dsAttrs.add(new Attribute("authDataAlias", authDataAlias));

            // Create the data source
            System.out.println("  **  Creating data source");
            ObjectName dataSource = configService.createConfigData(session,jdbcProv,"DataSource",
               "resources.jdbc:DataSource",dsAttrs);

            // Add a propertySet.
            AttributeList propSetAttrs = new AttributeList();
            ObjectName resourcePropertySet =configService.createConfigData(session,dataSource,
               "propertySet","",propSetAttrs);

            // Add resourceProperty databaseName
            AttributeList propAttrs1 = new AttributeList();
            propAttrs1.add(new Attribute("name", "databaseName"));
            propAttrs1.add(new Attribute("type", "java.lang.String"));
            propAttrs1.add(new Attribute("value", dbName));

            configService.addElement(session,resourcePropertySet,"resourceProperties",propAttrs1,-1);

            // Now Create the corresponding J2CResourceAdapter Connection 
            // Factory object.
            ObjectName jra = ConfigServiceHelper.createObjectName(null,
                      "J2CResourceAdapter",null);

            // Get all the J2CResourceAdapter, and I want to add my data source
            System.out.println("  **  Get all J2CResourceAdapters");
            ObjectName[] jras = configService.queryConfigObjects(session, 
                      node1, jra, null);

            int i=0;

            for (;i< jras.length;i++) {
                System.out.println(ConfigServiceHelper.getConfigDataType
                   (jras[i])+ " " + i + " = "
                    + jras[i].getKeyProperty(SystemAttributes.
                    + _WEBSPHERE_CONFIG_DATA_DISPLAY_NAME)
                    + "\nFrom scope ="
                    + jras[i].getKeyProperty(SystemAttributes.
                    + _WEBSPHERE_CONFIG_DATA_ID));
                // quit on the first builtin_rra
                if (jras[i].getKeyProperty(SystemAttributes._WEBSPHERE_CONFIG_
                     + DATA_DISPLAY_NAME).equals(
                     + "WebSphere Relational Resource Adapter")) {
                    break;
                }
            }


            if (i >= jras.length) { 
                System.out.println("Did not find builtin_rra; the J2CResourceAdapter object is
                  + creating connection factory anyway" );
                break; 
            } else { 
                System.out.println("Found builtin_rra J2CResourceAdapter object at index 
                  + " + i + " creating connection factory" );
            }


            // Prepare the attribute list
            AttributeList cfAttrs = new AttributeList();
            cfAttrs.add(new Attribute("name", dsName + "_CF"));
            cfAttrs.add(new Attribute("authMechanismPreference",
                            "BASIC_PASSWORD"));
            cfAttrs.add(new Attribute("authDataAlias",authDataAlias));
            cfAttrs.add(new Attribute("cmpDatasource", dataSource ));  
            // Make the link to data source's xmi:id
            ObjectName cf = configService.createConfigData(session,jras[i],
               "CMPConnectorFactory", "CMPConnectorFactory",
                       cfAttrs);

            // ===== start Security section
            System.out.println("Creating an authorization data alias " + authDataAlias);

            // Find the parent security object
            ObjectName security = ConfigServiceHelper.createObjectName(null, "Security",
               null);
            ObjectName[] securityName = configService.queryConfigObjects(session, null,
               security, null);
            security=securityName[0];

            // Prepare the attribute list
            AttributeList authDataAttrs = new AttributeList();
            authDataAttrs.add(new Attribute("alias", authDataAlias));
            authDataAttrs.add(new Attribute("userId", uid));
            authDataAttrs.add(new Attribute("password", pw));
            authDataAttrs.add(new Attribute("description","Auto created alias for the data source"));

            //create it
            ObjectName authDataEntry = configService.createConfigData(session,security,"authDataEntries",
               "JAASAuthData",authDataAttrs);
            // ===== end Security section

            // Save the session
            System.out.println("Saving session" );
            configService.save(session, false);

            // reload resources.xml to bind the new data source into the name
            // space
            reload(adminClient,true);
        } catch (Exception ex) {
            ex.printStackTrace(System.out);
            throw ex;
        }
    }

    /**
     * Get the DataSourceConfigHelperMbean and call reload() on it
     *
     * @param adminClient
     * @param verbose true - print messages to stdout
     */
    public void reload(AdminClient adminClient,boolean verbose) {
        if (verbose) {
            System.out.println("Finding the Mbean to call reload()");
        }

        // First get the  Mbean
        ObjectName handle = null;
        try {
            ObjectName queryName = new ObjectName("WebSphere:type=DataSourceCfgHelper,*");
            Set s = adminClient.queryNames(queryName, null);
            Iterator iter = s.iterator();
            if (iter.hasNext()) handle = (ObjectName)iter.next();
        } catch (MalformedObjectNameException mone) {
            System.out.println("Check the program variable queryName" + mone);
        } catch (com.ibm.websphere.management.exception.ConnectorException ce) {
            System.out.println("Cannot connect to the application server" + ce);
        }

        if (verbose) {
            System.out.println("Calling reload()");
        }
        Object result = null;
        try {
            result = adminClient.invoke(handle, "reload", new Object[] {}, new String[] {});
        } catch (MBeanException mbe) {
            if (verbose) {
                System.out.println("\tMbean Exception calling reload" + mbe);
            }
        } catch (InstanceNotFoundException infe) {
            System.out.println("Cannot find reload ");
        } catch (Exception ex) {
            System.out.println("Exception occurred calling reload()"  + ex);
        }

        if (result==null && verbose) {
            System.out.println("OK reload()");
        }
    }
}

Example: Using the Java Management Extensions API to create a JDBC driver and data source for BMP beans, session beans, or servlets. This code sample demonstrates how to configure a JDBC provider and data source, set an authorization alias for the data source, and reload the Mbean to make configuration changes.

[AIX Solaris HP-UX Linux Windows]
// "This program may be used, run, copied, modified and distributed without royalty for the 
// purpose of developing, using, marketing, or distributing."
//
// Product 5630-A36,  (C) COPYRIGHT International Business Machines Corp., 2001, 2002
// All Rights Reserved * Licensed Materials - Property of IBM
//
import java.util.*;
import javax.sql.*;
import javax.transaction.*;
import javax.management.*;

import com.ibm.websphere.management.*;
import com.ibm.websphere.management.configservice.*;
import com.ibm.ws.exception.WsException;


/**
 * Creates a node scoped resource.xml entry for a DB2® XA datasource.
 * The datasource created is for BMP use.
 * 
 * Set the following:
 * set classpath=%classpath%;install_root/lib/bootstrap.jar;install_root/lib/j2ee.jar;
 * install_root/plugins/com.ibm.ws.bootstrap_6.1.0.jar;install_root/plugins/com.ibm.ws.emf_2.1.0.jar;
 * install_root/plugins/com.ibm.ws.runtime_6.1.0.jar;install_root/plugins/org.eclipse.emf.common_2.2.1.v200609210005.jar;
 * install_root/plugins/org.eclipse.emf.ecore_2.2.1.v200609210005.jar;install_root/runtime/com.ibm.ws.admin.client_6.1.0.jar;
 */
public class CreateDataSourceBMP {

   String dsName = "markSection"; // the display name of the datasource
                                  // this is also the JNDI name and the connection factory
   String dbName = "SECTION";     // database name
   String authDataAlias = "db2admin"; // an authentication data alias
   String uid = "db2admin";           // user ID
   String pw  = "db2admin";           //  password
   String dbclasspath = "D:/SQLLIB/java/db2java.zip"; // path to the database driver




   /**
    * Main method.
    */
   public static void main(String[] args) {
      CreateDataSourceBMP cds = new CreateDataSourceBMP();

      try {
         cds.run(args);
      } catch (com.ibm.ws.exception.WsException ex) {
         System.out.println("Caught this " + ex   );
         ex.printStackTrace();
         //ex.getCause().printStackTrace();
      } catch (Exception ex) {
         System.out.println("Caught this " + ex );
         ex.printStackTrace();
      }
   }


   /**
    * This method creates the datasource using JMX. 
    * 
    * The datasource created here is only written into resources.xml. 
    * It is not bound into namespace until the server is restarted or an
    * application is started
    */
   public void run(String[] args) throws Exception {

      try {
         // Initialize the AdminClient.
         // Specify the SOAP_CONNECTOR_ADDRESS port of your server configuration.
         Properties adminProps = new Properties();
         adminProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
         adminProps.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
         adminProps.setProperty(AdminClient.CONNECTOR_PORT, "8880");
         AdminClient adminClient = AdminClientFactory.createAdminClient(adminProps);

         // Get the ConfigService implementation.			
         com.ibm.websphere.management.configservice.ConfigServiceProxy configService =
         new com.ibm.websphere.management.configservice.ConfigServiceProxy(adminClient);

         Session session = new Session();

         // Use this group to add to the node-scoped resource.xml.
         ObjectName node1 = ConfigServiceHelper.createObjectName(null, "Node", null);
         ObjectName[] matches = configService.queryConfigObjects(session, null, node1, null);
         node1 = matches[0];     // use the first node found

         // Use this group to add to the server1 scoped resource.xml.
         ObjectName server1 = ConfigServiceHelper.createObjectName(null, "Server", "server1");
         matches = configService.queryConfigObjects(session, null, server1, null);
         server1 = matches[0];   // use the first server found

         // Create the JDBCProvider
         String providerName = "DB2 JDBC Provider (XA)";
         System.out.println("Creating JDBCProvider " + providerName );

         // Prepare the attribute list
         AttributeList provAttrs = new AttributeList();
         provAttrs.add(new Attribute("name", providerName));
         provAttrs.add(new Attribute("implementationClassName", "com.ibm.db2.jdbc.DB2XADataSource"));
         provAttrs.add(new Attribute("description","DB2 JDBC2-compliant XA Driver"));

         //create it 
         ObjectName jdbcProv = configService.createConfigData(session,node1,"JDBCProvider",
				"JDBCProvider", provAttrs);
         // now add the classpath
         configService.addElement(session,jdbcProv,"classpath",dbclasspath,-1);



         // Search for RRA so we can link it to the datasource 
         ObjectName rra = null;
         ObjectName j2cra = ConfigServiceHelper.createObjectName(null, "J2CResourceAdapter", null);
         matches = configService.queryConfigObjects(session, node1, j2cra, null);
         for (int i = 0; i < matches.length; i++) {
              if ( matches[i].getKeyProperty("_Websphere_Config_Data_Display_Name").equals("WebSphere Relational 
                Resource Adapter") ) {
                rra = matches[i];
                break;
              }
            }

       
         // Prepare the attribute list
         AttributeList dsAttrs = new AttributeList();
         dsAttrs.add(new Attribute("name", dsName));
         dsAttrs.add(new Attribute("jndiName", "jdbc/" + dsName));
         dsAttrs.add(new Attribute("datasourceHelperClassname","com.ibm.websphere.rsadapter.DB2DataStoreHelper"));
         dsAttrs.add(new Attribute("statementCacheSize", new Integer(10)));
         dsAttrs.add(new Attribute("relationalResourceAdapter", rra)); 
				// Make the link to "builtin_rra"
         dsAttrs.add(new Attribute("description", "JDBC Datasource for mark section CMP 2.0 test"));
         dsAttrs.add(new Attribute("authDataAlias",authDataAlias));

         // Create the data source
         System.out.println("  **  Creating datasource");
         ObjectName dataSource = configService.createConfigData(session,jdbcProv,"DataSource",
			   	"resources.jdbc:DataSource",dsAttrs);

         // Add a propertySet.
         AttributeList propSetAttrs = new AttributeList();
         ObjectName resourcePropertySet =configService.createConfigData(session,dataSource,
			   	"propertySet","",propSetAttrs);

         // Add resourceProperty databaseName
         AttributeList propAttrs1 = new AttributeList();
         propAttrs1.add(new Attribute("name", "databaseName"));
         propAttrs1.add(new Attribute("type", "java.lang.String"));
         propAttrs1.add(new Attribute("value", dbName));

         configService.addElement(session,resourcePropertySet,"resourceProperties",propAttrs1,-1);


         // ===== start Security section
         System.out.println("Creating an authorization data alias " + authDataAlias);

         // Find the parent security object
         ObjectName security = ConfigServiceHelper.createObjectName(null, "Security", null);
         ObjectName[] securityName = configService.queryConfigObjects(session, null, security, null);
         security=securityName[0];

         // Prepare the attribute list
         AttributeList authDataAttrs = new AttributeList();
         authDataAttrs.add(new Attribute("alias", authDataAlias));
         authDataAttrs.add(new Attribute("userId", uid));
         authDataAttrs.add(new Attribute("password", pw));
         authDataAttrs.add(new Attribute("description","Auto created alias for datasource"));

         //create it 
         ObjectName authDataEntry = configService.createConfigData(session,security,"authDataEntries",
				   "JAASAuthData",authDataAttrs);
         // ===== end Security section

         // Save the session
         System.out.println("Saving session" );
         configService.save(session, false);

         // reload resources.xml
         reload(adminClient,true);

      } catch (Exception ex) {
         ex.printStackTrace(System.out);
         throw ex;
      }
   }

   /**
    * Get the DataSourceConfigHelperMbean and call reload() on it
    * 
    * @param adminClient
    * @param verbose true - print messages to stdout
    */
   public void reload(AdminClient adminClient,boolean verbose) {
      if (verbose) {
         System.out.println("Finding the Mbean to call reload()");
      }

      // First get the  Mbean
      ObjectName handle = null;
      try {
         ObjectName queryName = new ObjectName("WebSphere:type=DataSourceCfgHelper,*");
         Set s = adminClient.queryNames(queryName, null);
         Iterator iter = s.iterator();
         if (iter.hasNext()) handle = (ObjectName)iter.next();
      } catch (MalformedObjectNameException mone) {
         System.out.println("Check the program variable queryName" + mone);
      } catch (com.ibm.websphere.management.exception.ConnectorException ce) {
         System.out.println("Cannot connect to the application server" + ce);
      }

      if (verbose) {
         System.out.println("Calling reload()");
      }
      Object result = null;
      try {
         result = adminClient.invoke(handle, "reload", new Object[] {}, new String[] {});
      } catch (MBeanException mbe) {
         if (verbose) {
            System.out.println("\tMbean Exception calling reload" + mbe);
         }
      } catch (InstanceNotFoundException infe) {
         System.out.println("Cannot find reload ");
      } catch (Exception ex) {
         System.out.println("Exception occurred calling reload()"  + ex);
      }

      if (result==null && verbose) {
         System.out.println("OK reload()");
      }
   }
}
[z/OS]
// "This program may be used, run, copied, modified and distributed without royalty for the
// purpose of developing, using, marketing, or distributing."
//
// Product 5630-A36,  (C) COPYRIGHT International Business Machines Corp., 2001, 2002
// All Rights Reserved * Licensed Materials - Property of IBM
//
import java.util.*;
import javax.sql.*;
import javax.transaction.*;
import javax.management.*;

import com.ibm.websphere.management.*;
import com.ibm.websphere.management.configservice.*;
import com.ibm.ws.exception.WsException;

/**
 * Creates a node-scoped resource.xml entry for a
 * DB2 for zOS Local JDBC Provider (RRS) DataSource
 * when WebSphere security is not enabled
 *
 * To run this example, the following must be done:
 *
 * 1)  Set the WAS_HOME environment variable to the location of
 *     your WebSphere Application Server for z/OS® Configuration
 *     directory
 *
 *     Example:  export WAS_HOME=install_root
 *
 * 2)  Set the following environment variables:
 *
 *     export WAS_LIB=$WAS_HOME/lib
 *     export WAS_CLASSPATH=[DIRECTORY_CONTAINING_THIS_FILE]
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_LIB/admin.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_LIB/bootstrap.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_LIB/j2ee.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_LIB/jmxc.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/java/jre/lib/ext/mail.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/plugins/com.ibm.ws.bootstrap_6.1.0.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/plugins/com.ibm.ws.emf_2.1.0.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/plugins/com.ibm.ws.runtime_6.1.0.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/plugins/org.eclipse.emf.common_2.2.1.v200609210005.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/plugins/org.eclipse.emf.ecore_2.2.1.v200609210005.jar 
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/runtime/admin.client_6.1.0.jar


 *
 * 3)  Run the following commands:
 *
 *     javac -classpath $WAS_CLASSPATH CreateDataSourceBMP.java
 *     java -classpath $WAS_CLASSPATH CreateDataSourceBMP
 */
 public class CreateDataSourceBMP {

    String dsName = "MyDataSourceBMP";  // Data source display name
                                        // this is also the JNDI name and connection factory name
    String dbName = "LOC1";             // database name
    String authDataAlias = "IBMUSER";   // an authentication data alias
    String uid = "IBMUSER";             // user ID
    String pw  = "IBMUSER";             // password
    String dbclasspath = "/db2beta/db2710/classes/db2j2classes.zip";  // path to the database driver
    String dblibpath = "/db2beta/db2710/lib";       // path to the native library directory for the database

    /**
     * Main method.
     */
    public static void main(String[] args) {
        CreateDataSourceBMP cds = new CreateDataSourceBMP();
        try {
            cds.run(args);
        } catch (com.ibm.ws.exception.WsException ex) {
            System.out.println("Caught this " + ex   );
            ex.printStackTrace();
        } catch (Exception ex) {
            System.out.println("Caught this " + ex );
            ex.printStackTrace();
        }
    }

    /**
     * This method creates the datasource using JMX.
     *
     * The datasource created here is only written into resources.xml.
     * It is not bound into namespace until the server is restarted or an application started
     */
    public void run(String[] args) throws Exception {

        try {
            // Initialize the AdminClient.
            // Specify the SOAP_CONNECTOR_ADDRESS port of your server configuration.
            Properties adminProps = new Properties();
            adminProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
            adminProps.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
            adminProps.setProperty(AdminClient.CONNECTOR_PORT, "8880");
            AdminClient adminClient = AdminClientFactory.createAdminClient(adminProps);

            // Get the ConfigService implementation.
            com.ibm.websphere.management.configservice.ConfigServiceProxy configService =
            new com.ibm.websphere.management.configservice.ConfigServiceProxy(adminClient);

            Session session = new Session();

            // Use this group to add to the node scoped resource.xml.
            ObjectName node1 = ConfigServiceHelper.createObjectName(null, "Node", null);
            ObjectName[] matches = configService.queryConfigObjects(session, null, node1, null);
            node1 = matches[0];     // use the first node found

            // Use this group to add to the server1 scoped resource.xml.
            ObjectName server1 = ConfigServiceHelper.createObjectName(null, "Server", "server1");
            matches = configService.queryConfigObjects(session, null, server1, null);
            server1 = matches[0];   // use the first server found

            // Create the JDBCProvider
            String providerName = "My DB2 for zOS Local JDBC Provider (RRS) for BMP";
            System.out.println("Creating JDBCProvider " + providerName );

            // Prepare the attribute list
            AttributeList provAttrs = new AttributeList();
            provAttrs.add(new Attribute("name", providerName));
            provAttrs.add(new Attribute("implementationClassName","com.ibm.db2.jcc.DB2ConnectionPoolDataSource"));
            provAttrs.add(new Attribute("description","Legacy DB2 for z/OS driver using RRS"));

            //create it
            ObjectName jdbcProv = configService.createConfigData(session,node1,"JDBCProvider",
               "JDBCProvider", provAttrs);
            // now add the classpath
            configService.addElement(session,jdbcProv,"classpath",dbclasspath,-1);
            configService.addElement(session,jdbcProv,"nativepath",dblibpath,-1);

            // Search for RRA so we can link it to the datasource 
            ObjectName rra = null;
            ObjectName j2cra = ConfigServiceHelper.createObjectName(null, "J2CResourceAdapter", null);
            matches = configService.queryConfigObjects(session, node1, j2cra, null);
            for (int i = 0; i < matches.length; i++) {
              if ( matches[i].getKeyProperty("_Websphere_Config_Data_Display_Name").equals("WebSphere Relational 
                Resource Adapter") ) {
                rra = matches[i];
                break;
              }
            }

            // Prepare the attribute list
            AttributeList dsAttrs = new AttributeList();
            dsAttrs.add(new Attribute("name", dsName));
            dsAttrs.add(new Attribute("jndiName", "jdbc/" + dsName));
            dsAttrs.add(new Attribute("datasourceHelperClassname","com.ibm.websphere.rsadapter.DB2DataStoreHelper"));
            dsAttrs.add(new Attribute("statementCacheSize", new Integer(10)));
            dsAttrs.add(new Attribute("relationalResourceAdapter", rra)); // this is where we make the
                                                                          // link to "builtin_rra"
            dsAttrs.add(new Attribute("description", "JDBC Datasource for BMP usage"));
            dsAttrs.add(new Attribute("authDataAlias",authDataAlias));

            // Create the datasource
            System.out.println("  **  Creating datasource");
            ObjectName dataSource = configService.createConfigData(session,jdbcProv,"DataSource",
               "resources.jdbc:DataSource",dsAttrs);

            // Add a propertySet.
            AttributeList propSetAttrs = new AttributeList();
            ObjectName resourcePropertySet =configService.createConfigData(session,dataSource,
               "propertySet","",propSetAttrs);

            // Add resourceProperty databaseName
            AttributeList propAttrs1 = new AttributeList();
            propAttrs1.add(new Attribute("name", "databaseName"));
            propAttrs1.add(new Attribute("type", "java.lang.String"));
            propAttrs1.add(new Attribute("value", dbName));

            configService.addElement(session,resourcePropertySet,"resourceProperties",propAttrs1,-1);


            // ===== start Security section
            System.out.println("Creating an authorization data alias " + authDataAlias);

            // Find the parent security object
            ObjectName security = ConfigServiceHelper.createObjectName(null, "Security", null);
            ObjectName[] securityName = configService.queryConfigObjects(session, null, security, null);
            security=securityName[0];

            // Prepare the attribute list
            AttributeList authDataAttrs = new AttributeList();
            authDataAttrs.add(new Attribute("alias", authDataAlias));
            authDataAttrs.add(new Attribute("userId", uid));
            authDataAttrs.add(new Attribute("password", pw));
            authDataAttrs.add(new Attribute("description","Auto created alias for datasource"));

            //create it
            ObjectName authDataEntry = configService.createConfigData(session,security,"authDataEntries",
               "JAASAuthData",authDataAttrs);
            // ===== end Security section

            // Save the session
            System.out.println("Saving session" );
            configService.save(session, false);

            // reload resources.xml
            reload(adminClient,true);

        } catch (Exception ex) {
            ex.printStackTrace(System.out);
            throw ex;
        }
    }

    /**
     * Get the DataSourceConfigHelperMbean and call reload() on it
     *
     * @param adminClient
     * @param verbose true - print messages to stdout
     */
    public void reload(AdminClient adminClient,boolean verbose) {
        if (verbose) {
            System.out.println("Finding the Mbean to call reload()");
        }

        // First get the  Mbean
        ObjectName handle = null;
        try {
            ObjectName queryName = new ObjectName("WebSphere:type=DataSourceCfgHelper,*");
            Set s = adminClient.queryNames(queryName, null);
            Iterator iter = s.iterator();
            if (iter.hasNext()) handle = (ObjectName)iter.next();
        } catch (MalformedObjectNameException mone) {
            System.out.println("Check the program variable queryName" + mone);
        } catch (com.ibm.websphere.management.exception.ConnectorException ce) {
            System.out.println("Cannot connect to the application server" + ce);
        }

        if (verbose) {
            System.out.println("Calling reload()");
        }
        Object result = null;
        try {
            result = adminClient.invoke(handle, "reload", new Object[] {}, new String[] {});
        } catch (MBeanException mbe) {
            if (verbose) {
                System.out.println("\tMbean Exception calling reload" + mbe);
            }
        } catch (InstanceNotFoundException infe) {
            System.out.println("Cannot find reload ");
        } catch (Exception ex) {
            System.out.println("Exception occurred calling reload()"  + ex);
        }

        if (result==null && verbose) {
            System.out.println("OK reload()");
        }
    }
}

Displaying connection pool contents of a data source with the JMX API

This example displays the connection pool contents of a data source with the JMX API:
/**
 * Sample program
 * This sample program is provided AS IS and may be used, executed, copied and 
 * modified without royalty payment by customer (a) for its own instruction and 
 * study, (b) in order to develop applications designed to run with an IBM 
 * WebSphere product, either for customer's own internal use 

 * ? COPYRIGHT International Business Machines Corp. 2010
 * All Rights Reserved * Licensed Materials - Property of IBM
 * 
 * This program will display the connection pool contents of a datasource using
 * the JMX API.
 * 
 * To run this program
 * 
 *  1. call "%WAS_HOME%/bin/setupCmdLine.bat"
 * 
 *  2. "%JAVA_HOME%\bin\java" "%CLIENTSAS%" "-Dwas.install.root=%WAS_HOME%" "
 *     -Dwas.repository.root=%CONFIG_ROOT%" 
 *    	-Dcom.ibm.CORBA.BootstrapHost=%COMPUTERNAME% 
 *     -classpath "%WAS_CLASSPATH%;%WAS_HOME%\runtimes
\com.ibm.ws.admin.client_7.0.0.jar;%WAS_HOME%\plugins
\com.ibm.ws.security.crypto_7.0.0.jar;."
 *     ShowPoolContents DataSource_mbean_name SOAP_port_number
 */

import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

import javax.management.ObjectName;

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

public class ShowPoolContents {

    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
	if (args.length != 2) {
            System.out.println("Must specify DataSource name and server SOAP port number");
            System.exit(-1);
	}
	try {
	    // create an ObjectName pattern for the specified datasource
	    ObjectName on = new ObjectName(String.format("*:type=DataSource,name=%s,*", args[0])); 
            // 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, "localhost");
            connectProps.setProperty(AdminClient.CONNECTOR_PORT, args[1]);
	    // Create an admin client connection
            AdminClient adminClient = AdminClientFactory.createAdminClient(connectProps);
	    // find the specified MBean
	    Set dataSourceMBeans = adminClient.queryNames(on, null);
	    if (dataSourceMBeans.isEmpty()) {
		System.out.println("Error: No DataSource MBean with name "+ args[0]);
	    }
	    else {
		// iterate through the Set
		Iterator iter = dataSourceMBeans.iterator();
		while (iter.hasNext()) {
                    // invoke the showPoolContents operation on the MBean, it takes no parameters
                    Object poolContents = adminClient.invoke((ObjectName)iter.next(),
                    	"showPoolContents", null, null);
                    System.out.println("Pool contents:" + poolContents);
		}		
	    }	    
	}
	catch (Exception ex) {
	    System.out.println("Exception: " + ex.toString());
	    ex.printStackTrace(System.out);
	}
    }
}



In this information ...


Related concepts

IBM Redbooks, demos, education, and more

(Index)

Use IBM Suggests to retrieve related content from ibm.com and beyond, identified for your convenience.

This feature requires Internet access.

Task topic Task topic    

Terms and conditions for information centers | Feedback

Last updatedLast updated: Jan 16, 2013 3:37:33 AM CST
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=v700osgijpa&product=was-nd-mp&topic=cjmxapis
File name: tdat_cjmxapis.html