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 HP-UX Linux Solaris Windows] [iSeries]
//
// "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., 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 data source.
 * The data source created is for BMP use.
 * 
 * You will need to set the following:
 * set classpath=%classpath%;install_root\runtime\com.ibm.ws.admin.client_6.1.0.jar;
 */
public class CreateDataSourceBMP {

   String dsName = "markSection"; // the display name of the data source, the JNDI name, and the CF name
   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 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 started
    */
   public void run(String[] args) throws Exception {

      try {
         // Initialize the AdminClient.
         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", 
				"resources.jdbc: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", 
				"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 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, 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., 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) data source
 * 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=/WebSphereV6R1M0/AppServer
 *
 * 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/jmxc.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_LIB/admin.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/runtime/admin.client_6.1.0.jar
 *     export WAS_CLASSPATH=$WAS_CLASSPATH:$WAS_HOME/java/jre/lib/ext/mail.jar

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

    String dsName = "MyDataSourceBMP";  // data source display name, also jndi name and CF name
    String dbName = "LOC1";             // database name
    String authDataAlias = "IBMUSER";   // an authentication data alias
    String uid = "IBMUSER";             // userid
    String pw  = "IBMUSER";             // password
    String dbclasspath = "/db2beta/db2710/classes/db2j2classes.zip";  // path to the db driver
    String dblibpath = "/db2beta/db2710/lib";                         // path to the db native library directory

    /**
     * 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 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 started
     */
    public void run(String[] args) throws Exception {

        try {
            // Initialize the AdminClient.
            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",
               "resources.jdbc: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 BMP 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);


            // ===== 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()");
        }
    }
}



Related concepts
JDBC providers
Data sources
Reference topic    

Terms of Use | Feedback

Last updated: Feb 19, 2011 5:25:36 AM CST
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=v610web&product=was-nd-mp&topic=crtdsbmp
File name: rdat_crtdsbmp.html