Example: Test a connection using country and language (properties)

It is possible to invoke the same test connection operation on the DataSourceCfgHelper MBean from a Java program that wsadmin uses, passing in the properties you wish to test.

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

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

/**
 * Resource adapter test program to make sure that the MBean interfaces work.
 * Following interfaces are tested
 * 
 *  -getPropertiesForDataSource()
 *  -reload()
 *  -testConnectionToDataSource()
 * 
 * 
 * We need following to run
 * set classpath=%classpath%;D:\WebSphere\AppServer\lib\wsexception.jar;D:\WebSphere\AppServer\lib\wasjmx.jar;D:\$WAS_HOME\lib\wasx.jar
 * 
 
 */
public class testDS {

 String port = "8880";
   String host = "localhost";
   final static boolean verbose = true;



   /**
    * Main method.
    * 
    * @param args   DataBase classpath, DataSource name
    */
   public static void main(String[] args) {
      testDS cds = new testDS();

      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 tests the DataSourceCfgHelper Mbean.
    * 
    * @param args
    * @exception Exception
    */
   public void run(String[] args) throws Exception {

      try {



         System.out.println("Connecting to the appserver.......");

         /*************************************************************************/
         /**    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 {
            adminClient = AdminClientFactory.createAdminClient(adminProps);
         } catch  com.ibm.websphere.management.exception.ConnectorException(ce) {
            System.out.println("Cannot make a connection to the appserver\n"+ce);
            System.exit(1);
         }

         /*************************************************************************/
         /**    Locate 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);
         }

         //System.out.println("Connected to the appserver" + handle);

         /*************************************************************************/
         /**    Call the Mbean to get the data source properties                  */
         /*************************************************************************/
         String dsClassName = "COM.ibm.db2.jdbc.DB2XADataSource";
         String providerLibPath = "D:/SQLLIB/java/db2java.zip";
         String[] signature = { "java.lang.String", "java.lang.String"};
         Object[] params = { dsClassName, providerLibPath};
         Object result = null;

         if (verbose) {
            System.out.println("Calling getPropertiesForDataSource() for " + dsClassName + "\n");
         }
         try {
            // get the properties
            result = adminClient.invoke(handle, "getPropertiesForDataSource", params, signature);
         } catch  MBeanException(mbe) {
            if (verbose) {
               System.out.println("\tMbean Exception " + dsClassName);
            }
         } catch  InstanceNotFoundException(infe) {
            System.out.println("Cannot find " + dsClassName);
         } catch  Exception(ex) {
            System.out.println("Exception occurred calling getPropertiesForDataSource() for " + dsClassName + ex);
         }

         // Pretty print what we found
         Iterator propIterator = ((List)result).iterator();
         System.out.println(format("Name",21)+ "|" + format("Default Value",34) + "|" + format("Type",17) +"|Reqd");
         String line = "_______________________________________________________________________________";
         System.out.println(line);
          while (propIterator.hasNext()) {
            DSPropertyEntry dspe = (DSPropertyEntry)propIterator.next();
            System.out.print(format(dspe.getPropertyName(),21)+"|"+ format(dspe.getDefaultValue(),34) + "|");
   System.out.println(format(dspe.getPropertyType(),17) +"|"+ ((dspe.isRequired())? " Y" : " N"));
         }
         System.out.println(line);


         /*************************************************************************/
         /** Invoke the reload function from the AdminClient to pickup the        */
         /*  data source from the naming space.                                   */
         /*************************************************************************/

         if (verbose) {
            System.out.println("Calling reload()");
         }
         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()");
         }
         /*****************************************************************************/
         /** For the following to work  give all permission to the            */
         /** database jar/zip files else you will see this exception:                 */
         /**  DSRA8040W: Failed to connect to the DataSource.  Encountered            */
         /** java.lang.ExceptionInInitializerError:                                   */
         /** Chained java.security.AccessControlException:                           */
         /** access denied  java.util.PropertyPermission(ibm.db2.instance.path read). */
         /**                                                                          */
         /**  e.g.                                                                    */
         /**  Put this in server.policy                                               */
         /**                                                                          */
         /**      grant codeBase "file:D:/sqllib/java/db2java.zip" {                  */
         /**        permission java.security.AllPermission;                           */
         /**      };                                                                  */
        /******************************************************************************/

         /*************************************************************************/
         /**  Start to test the connection to the database                        */
         /*************************************************************************/

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


         String user = "db2admin";
         String password = "db2admin";
         Properties props = new Properties();
         props.setProperty("databaseName", "section");
        
         // There are two ways to pass the locale: In WS 5.0, you can only pass in the 
         // language and the country in a String format. In WS 5.0.1 release, you can also pass
         // in a Locale object.
         // String[] signature2 = { "java.lang.String", "java.lang.String", "java.lang.String",            //   "java.util.Properties", "java.lang.String","java.util.Locale"};
         // Object[] params2 = { dsClassName, user, password,props ,providerLibPath, Locale.US};

          Object result2 = null;
     
         String[] signature2 = { "java.lang.String", "java.lang.String", "java.lang.String", "java.util.Properties", "java.lang.String "java.lang.String","java.lang.String");
       Object[] params2 = { dsClassName, user, password,props ,providerLibPath, "EN", "US"};
       
 
        try {
   
           result2 = adminClient.invoke(handle, "testConnectionToDataSource", params2, signature2);
         } catch  MBeanException(mbe) {
            if (verbose) {
               System.out.println("\tMbean Exception " + dsClassName);
            }
 } catch  InstanceNotFoundException(infe) {
            System.out.println("Cannot find " + dsClassName);
         } catch  RuntimeMBeanException(rme) {
            Exception ex = rme.getTargetException();
            ex.printStackTrace(System.out);
            throw ex;
         } catch  Exception(ex) {
            System.out.println("Exception occurred calling testConnectionToDataSource() for " + dsClassName + ex);
            ex.printStackTrace();
         }

         if (result2 != null) {
            System.out.println("ERROR Result= " + result2);
         } else if (verbose) {
            System.out.println("OK testConnectionToDataSource()");
         }

      } catch  RuntimeOperationsException(roe) {
         Exception ex = roe.getTargetException();
         ex.printStackTrace(System.out);
         throw ex;
      } catch  Exception(ex) {
         ex.printStackTrace(System.out);
         throw ex;
      }
   }

   /**
    * Format the string right justified in the space provided, 
    * or truncate the string.
    * 
    * @param in
    * @param length
    * @return 
    */
   public String format Object(in, int length) {
      if (in ==null) {
         in = "-null-";
      }

      String ins = in.toString();
      int insLength = ins.length();
      if ( insLength > length) {
         return ins.substring(0,length);
      } else {
         StringBuffer sb = new StringBuffer(length);
         while (length - insLength > 0) {
            sb.append(" ");
            length--;
         }
         sb.append(ins);
         return sb.toString();
      }
   }
}

 

See Also

Data access : Resources for learning