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.

// "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 the 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 appserver" + 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