On Jan 24, 2005, at 1:53 AM, Samuel Andrew McIntyre wrote:
Attached is a patch to allow the network server demo to compile without db2jcc.jar.
Here's a revised patch to fix a typo in SimpleNetworkClientSample and to use the DriverManager to get the connection instead of reflection.
andrew
-- patch included inline:
Index: java/demo/nserverdemo/NsSample.java
===================================================================
--- java/demo/nserverdemo/NsSample.java (revision 126352)
+++ java/demo/nserverdemo/NsSample.java (working copy)
@@ -12,6 +12,7 @@
import java.sql.SQLException;
import java.sql.DriverManager;
import java.io.IOException;
+import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -70,7 +71,7 @@
// To connect to Derby Network Server
// This URL describes the target database for type 4 connectivity
// Notice that the properties may be established via the URL syntax
- private static final String CS_NS_DBURL= "jdbc:derby:net://localhost:"+NETWORKSERVER_PORT+"/NSSampledb; create=true:retrieveMessagesFromServerOnGetMessage=true; deferPrepares=true;";
+ private static final String CS_NS_DBURL= "jdbc:derby:net://localhost:"+NETWORKSERVER_PORT+"/NSSampledb; create=true;retrieveMessagesFromServerOnGetMessage=true; deferPrepares=true;";
public static void main(String[] args) throws Exception {@@ -78,7 +79,7 @@
// DB2Connection provides additional functionality than java.sql.Connection
// One can use either depending on the requirements
- com.ibm.db2.jcc.DB2Connection conn = null;
+ Connection conn = null;
PrintWriter pw = null;
@@ -149,7 +150,8 @@
// Get database connection using the JCC client via DriverManager api
try {
- conn = (com.ibm.db2.jcc.DB2Connection) DriverManager.getConnection(CS_NS_DBURL, properties);
+
+ conn = (Connection) DriverManager.getConnection(CS_NS_DBURL, properties);
} catch(Exception e) {
pw.println("[NsSample] Connection request unsuccessful, exception thrown was: ");
pw.println("[NsSample] Please check if all the jar files are in the classpath and the dbUrl is set correctly.");
Index: java/demo/nserverdemo/SimpleNetworkClientSample.java
===================================================================
--- java/demo/nserverdemo/SimpleNetworkClientSample.java (revision 126352)
+++ java/demo/nserverdemo/SimpleNetworkClientSample.java (working copy)
@@ -7,6 +7,7 @@
*/
import java.sql.*;
+import java.lang.reflect.*;
import javax.sql.DataSource;
import java.util.Properties;
import java.io.BufferedReader;
@@ -49,9 +50,10 @@
private static int NETWORKSERVER_PORT=1527;/**
- * DB2 JDBC UNIVERSAL DRIVER class name
+ * DB2 JDBC UNIVERSAL DRIVER class names
*/
private static final String DB2_JDBC_UNIVERSAL_DRIVER = "com.ibm.db2.jcc.DB2Driver";
+ private static final String DB2_JCC_DS = "com.ibm.db2.jcc.DB2SimpleDataSource";
/**
* This URL is used to connect to Derby Network Server using the DriverManager.
@@ -138,27 +140,42 @@
* @throws Exception if there is any error
*/
public static javax.sql.DataSource getClientDataSource(String database, String user, String
- password) throws SQLException
+ password) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException
{
+ Class nsDataSource = Class.forName(DB2_JCC_DS);
+ DataSource ds = (DataSource) nsDataSource.newInstance();
- com.ibm.db2.jcc.DB2SimpleDataSource ds = new com.ibm.db2.jcc.DB2SimpleDataSource();
-
// can also include Derby URL attributes along with the database name
- ds.setDatabaseName(database);
+ Class[] methodParams = new Class[] {String.class};
+ Method dbname = nsDataSource.getMethod("setDatabaseName", methodParams);
+ Object[] args = new Object[] {database};
+ dbname.invoke(ds, args);
- if (user != null)
- ds.setUser(user);
- if (password != null)
- ds.setPassword(password);
-
+ if (user != null) {
+ Method setuser = nsDataSource.getMethod("setUser", methodParams);
+ args = new Object[] {user};
+ setuser.invoke(ds, args);
+ }
+ if (password != null) {
+ Method setpw = nsDataSource.getMethod("setPassword", methodParams);
+ args = new Object[] {password};
+ setpw.invoke(ds, args);
+ }
// host on which network server is running
- ds.setServerName("localhost");
+ Method servername = nsDataSource.getMethod("setServerName", methodParams);
+ args = new Object[] {"localhost"};
+ servername.invoke(ds, args);
// port on which Network Server is listening
- ds.setPortNumber(1527);
+ methodParams = new Class[] {int.class};
+ Method portnumber = nsDataSource.getMethod("setPortNumber", methodParams);
+ args = new Object[] {new Integer(1527)};
+ portnumber.invoke(ds, args);
// driver type must be 4 to access Derby Network Server
- ds.setDriverType(4);
+ Method drivertype = nsDataSource.getMethod("setDriverType", methodParams);
+ args = new Object[] {new Integer(4)};
+ drivertype.invoke(ds, args);
return ds;
@@ -193,7 +210,7 @@
properties.setProperty("password","scape");// Get database connection using the JCC client via DriverManager api
- Connection conn = (com.ibm.db2.jcc.DB2Connection) DriverManager.getConnection(CS_NS_DBURL, properties);
+ Connection conn = DriverManager.getConnection(CS_NS_DBURL,properties);
return conn;
}
Index: java/demo/nserverdemo/NsSampleClientThread.java
===================================================================
--- java/demo/nserverdemo/NsSampleClientThread.java (revision 126352)
+++ java/demo/nserverdemo/NsSampleClientThread.java (working copy)
@@ -319,7 +319,7 @@
/**
* Create necessary schema if schema not already created
*/
- public static void checkAndCreateSchema(com.ibm.db2.jcc.DB2Connection conn,PrintWriter pw) {
+ public static void checkAndCreateSchema(Connection conn,PrintWriter pw) {
Statement stmt = null;
ResultSet rs = null;
@@ -378,7 +378,7 @@
/**
* Loads schema , inserts 'rowsToInsert' number of rows into the table
*/
- public static void loadSchema(com.ibm.db2.jcc.DB2Connection conn,int rowsToInsert,PrintWriter pw) {
+ public static void loadSchema(Connection conn,int rowsToInsert,PrintWriter pw) {
int insertsRemaining = rowsToInsert;
PreparedStatement ps=null;
--- and also attached:
demo.diff
Description: Binary data
PGP.sig
Description: This is a digitally signed message part
