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