Example: Test a connection using testConnection(ConfigID)

You can pass the configuration ID of a configured data source, rather than the properties of the data source. This example program uses Java Management Extensions (JMX) to connect to a running server and invoke the testConnection method on the DataSourceCfgHelper MBean.

See the Code example disclaimer for legal information about these code examples.

/**
 * Description
 * Resource adapter test program to make sure that the MBean interfaces work.
 * Following interfaces are tested
 * 
 *  ---  testConnection()
 * 
 * 
 * We need following to run
 *
 *  From an iSeries command line:
 *
 *   -> QSHELL   (Start the QSHELL environment)
 *
 *   -> cd (yourDirectory)   
 *   (change current directory to the directory that holds the java source)    
 *
 *   -> javac -extdirs  /QIBM/ProdData/WebASE/ASE5/lib -d . testDSGUI.java  
 *  (compile the testDSGUI class)
 *
 *   -> . /QIBM/ProdData/WebASE/ASE5/bin/setupClient   
 *  (produce the $JAVA_FLAGS_EXT environment variable)
 * 
 *   -> java $JAVA_FLAGS_EXT testDSGUI
 *  (call the program)             
 *
 */


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

import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.RuntimeMBeanException;
import javax.management.RuntimeOperationsException;

import com.ibm.websphere.management.AdminClient;
import com.ibm.websphere.management.AdminClientFactory;
import com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException;

public class testDSGUI {

//Use port 8880 for base installation or port 8879 for ND installation
String port = "8880";
// String port = "8879";
String host = "localhost";
final static boolean verbose = true;

// eg a configuration ID for 5.0 DataSource declared at the node level for base
private static final String resURI = "cells/cat/nodes/cat:resources.xml#DataSource_1";

// eg a 4.0 DataSource declared at the node level for base
//    private static final String resURI = "cells/cat/nodes/cat:resources.xml#WAS40DataSource_1";

// eg Cloudscape DataSource declared at the server level for base
//private static final String resURI = "cells/cat/nodes/cat/servers/server1/resources.xml#DataSource_6";

// eg node level DataSource for ND
//private static final String resURI = "cells/catNetwork/nodes/cat:resources.xml#DataSource_1";

// eg server level DataSource for ND
//private static final String resURI = 
//      "cells/catNetwork/nodes/cat/servers/server1:resources.xml#DataSource_4";

// eg cell level DataSource for ND
//private static final String resURI = "cells/catNetwork:resources.xml#DataSource_1";

 public static void main(String[] args) {
  testDSGUI cds = new testDSGUI();
  cds.run(args);
 }

/**
 * This method tests the ResourceMbean.
 * 
 * @param args
 * @exception Exception
 */
 public void run(String[] args) {

  try {

	System.out.println("Connecting to the application server.......");

        /*************************************************************************/
        /**    Initialize the AdminClient                                        */
        /*************************************************************************/	
	Properties adminProps = new Properties();
	adminProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
	adminProps.setProperty(AdminClient.CONNECTOR_HOST, host);
	adminProps.setProperty(AdminClient.CONNECTOR_PORT, port);
	AdminClient adminClient = null;
	try {
   /* Port 8880 must be listening when this program is called or the SOAP connection will fail */
	adminClient = AdminClientFactory.createAdminClient(adminProps);
	} catch (com.ibm.websphere.management.exception.ConnectorException ce) {
  	    System.out.println("NLS: Cannot make a connection to the application server\n");
	    ce.printStackTrace();
	    System.exit(1);
	}

       /*************************************************************************/
       /**    Locate the Mbean                                                  */
       /*************************************************************************/
	ObjectName handle = null;
	try {
      // Send in a locator string 
     // eg for a Base installation this is enough
   ObjectName queryName = new ObjectName("WebSphere:type=DataSourceCfgHelper,*");

    // for ND you need to specify which node/process you would like to test from
    // eg run in the server
    //ObjectName queryName = new ObjectName("WebSphere:cell=catNetwork,node=cat,
process=server1,type=DataSourceCfgHelper,*");
   // eg run in the node agent
  //ObjectName queryName = new ObjectName("WebSphere:cell=catNetwork,node=cat,
process=nodeagent,type=DataSourceCfgHelper,*");
		// eg run in the Deployment Manager
		//ObjectName queryName = new ObjectName("WebSphere:cell=catNetwork,node=catManager,
process=dmgr,type=DataSourceCfgHelper,*");
		Set s = adminClient.queryNames(queryName, null);
		Iterator iter = s.iterator();
		while (iter.hasNext()) {
                       // use the first MBean that is found
		 	handle = (ObjectName) iter.next();
			System.out.println("Found this ->" + handle);
		}
		if (handle == null) {
			System.out.println("NLS: Did not find this MBean>>" + queryName);
			System.exit(1);
		}
	} 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);
	}

         /*************************************************************************/
         /**           Build parameters to pass to Mbean                          */
         /*************************************************************************/
	String[] signature = { "java.lang.String" };
	Object[] params = { resURI };
	Object result = null;

	if (verbose) {
		System.out.println("\nTesting connection to the database using " + handle);
	}

	try {
        /*************************************************************************/
        /**  Start to test the connection to the database                        */
        /**                                                                      */
        /**  Note that the datasource must exist prior to calling this program   */
        /*************************************************************************/
		result = adminClient.invoke(handle, "testConnection", params, signature);
	} catch (MBeanException mbe) {
		// ****** all user exceptions come in here
		if (verbose) {
			Exception ex = mbe.getTargetException(); // this is the real exception from the Mbean
			System.out.println("\nNLS:Mbean Exception was received contains " + ex);
			ex.printStackTrace();
			System.exit(1);
		}
	} catch (InstanceNotFoundException infe) {
		System.out.println("Cannot find " + infe);
	} catch (RuntimeMBeanException rme) {
		Exception ex = rme.getTargetException();
		ex.printStackTrace(System.out);
		throw ex;
	} catch (Exception ex) {
		System.out.println("\nUnexpected Exception occurred: " + ex);
		ex.printStackTrace();
	}

         /*************************************************************************/
         /**  Process the result.  The result will be the number of warnings      */
         /**  issued.  A result of 0 indicates a successful connection with       */
         /**  no warnings.                                                        */
         /*************************************************************************/

	//A result of 0 indicates a successful connection with no warnings.
	System.out.println("Result= " + result);

  } catch (RuntimeOperationsException roe) {
	Exception ex = roe.getTargetException();
	ex.printStackTrace(System.out);
  } catch (Exception ex) {
	System.out.println("General exception occurred");
	ex.printStackTrace(System.out);
  }
 }
}

Note: Example may be wrapped for display purposes.