D
dschectman
I get a stange NullPointerException in getClass().getName(). The code
below is running on Iplanet app server 6.5 running on windows 2000.
The datasource is defined by an app server connection pool.
Here is the code
package helper;
import org.apache.log4j.Category;
import java.sql.*;
// This class gets an connection to the datasource
public class DBConnectionHelper
{
Category loggerObj = Category.getInstance(("DBConnectionHelper");
Connection conn = null;
com.netscape.server.jdbc.ConnectionProxy csproxy = null;
public DBConnectionHelper()
{
}
public Connection getDBConnection() {
return getDBConnection("defaultdb");
}
public Connection getDBConnection(String connName)
{
Connection csproxyconn = null;
try
{
loggerObj.info("getting connection");
// Get a connection to the datasorce
conn = new helper.DBConnectionManager().getDBConnection(
connName);
loggerObj.info("Got connection");
loggerObj.info(conn); // The funny thing is that this line logs a
valid class (com.netscape.server.jdbc.ConnectionProxy@1a4bd4)
loggerObj.info(conn.getClass()); // Yet this line throws a
NullPOinterException as if conn was null
loggerObj.info(conn.getClass().getName());
String className = conn.getClass().getName();
loggerObj.info("Connection class Name ->" + className);
//For Iplanet connection pool, convert to Oracle connection
if
(!className.equalsIgnoreCase("oracle.jdbc.driver.OracleConnection")) {
csproxy = (com.netscape.server.jdbc.ConnectionProxy) conn;
csproxyconn = csproxy.getConnection();
return csproxyconn;
}
}
catch (Exception ex) {
loggerObj.error("Exception caught");
loggerObj.error(ex.getMessage());
loggerObj.error(ex);
//loggerObj.error(ex.getMessage(), ex);
}
return conn;
}
}
The connection manager class is just a wrapper for getting the
connection. A configuration file identifies whether to get it from a
JNDI lookup or from Oracle.
public Connection getDBConnection(String connName)
{
loggerObj.info("in getDBConnection" + connName);
// Get the db configuration from the config file
DBConfig aDBConfig = DBConfig.getInstance();
OrderedHashMap lookupData = aDBConfig .getLookupData(DBConfig
..KEY_DBCONNECTION);
InitialContext initialContext = null;
Hashtable env = new java.util.Hashtable(1);
Connection conn = null;
String oracleUserName = null;
String oracleUserPassword = null;
String oracleTnsName = null;
String oracleDriverName = null;
String jndiLookupType = null;
String jndiName = null;
String jndiLookup = null;
if (lookupData != null)
{
OrderedHashMap dbLookupData = (OrderedHashMap) if
(dbLookupData != null) {
oracleUserName = (String) dbLookupData.get("username");
oracleUserPassword = (String) dbLookupData.get("password");
oracleTnsName = (String) dbLookupData.get("dburl");
oracleDriverName = (String) dbLookupData.get("driver");
jndiLookupType = (String)
dbLookupData.get("jndi_lookup_type");
jndiName = (String) dbLookupData.get("jndi_name");
jndiLookup = (String) dbLookupData.get("jndi_lookup");
try {
// To use Iplanet connection pooling
if ( (jndiLookup != null) &&
jndiLookup.equalsIgnoreCase("yes")) {
loggerObj.info("INSIDE Iplanet Connection Pool
getConnection(" +
jndiName + ")");
initialContext = new InitialContext(env);
DataSource ds = (javax.sql.DataSource)
initialContext.lookup(
jndiName);
conn = ds.getConnection();
// com.netscape.server.jdbc.ConnectionProxy csproxy =
(com.netscape.server.jdbc.ConnectionProxy)ds.getConnection();
//
System.out.println("csproxy.getConnection().getClass().getName(): " +
csproxy.getConnection().getClass().getName());
// conn = csproxy.getConnection();
// loggerObj.info("conn.getClass().getName()"
+conn.getClass().getName());
loggerObj.info("Completed Iplanet Connection Pool
getConnection(" +
jndiName + ")");
}
else { // To use Oracle connection pooling
loggerObj.info("INSIDE Oracle Connection getConnection("
+ connName +
")");
Driver d = (Driver)
Class.forName(oracleDriverName).newInstance();
conn = DriverManager.getConnection(oracleTnsName,
oracleUserName,
oracleUserPassword);
loggerObj.info("Completed Oracle Connection
getConnection(" +
connName + ")");
}
}
catch (SQLException e) {
loggerObj.error("Error in getting the NEW Connection " +
e.getMessage());
}
catch (NamingException e) {
loggerObj.error("Error in getting the NEW Connection " +
e.getMessage());
}
catch (Exception ex) {
loggerObj.error(ex.getMessage(), ex);
}
finally {
return conn;
}
} else loggerObj.error("dbLookupData is null");
} else loggerObj.error("lookupData is null");
return conn;
}
Here are the log files
[25/Jul/2005 10:01:37:2] info: [25 Jul 2005 10:01:37] getting
connection
[25/Jul/2005 10:01:37:2] info: [25 Jul 2005 10:01:37] INSIDE Iplanet
Connection Pool getConnection(jdbc/defaultdb)
[25/Jul/2005 10:01:37:6] info: [25 Jul 2005 10:01:37] Completed Iplanet
Connecti
on Pool getConnection(jdbc/defaultdb)
[25/Jul/2005 10:01:37:6] info: [25 Jul 2005 10:01:37] Got connection
[25/Jul/2005 10:01:37:6] info: [25 Jul 2005 10:01:37]
com.netscape.server.jdbc.ConnectionProxy@1a4bd4
[25/Jul/2005 10:01:37:6] error: [25 Jul 2005 10:01:37] Exception caught
[25/Jul/2005 10:01:37:6] error: [25 Jul 2005 10:01:37]
[25/Jul/2005 10:01:37:6] error: [25 Jul 2005 10:01:37]
java.lang.NullPointerException
below is running on Iplanet app server 6.5 running on windows 2000.
The datasource is defined by an app server connection pool.
Here is the code
package helper;
import org.apache.log4j.Category;
import java.sql.*;
// This class gets an connection to the datasource
public class DBConnectionHelper
{
Category loggerObj = Category.getInstance(("DBConnectionHelper");
Connection conn = null;
com.netscape.server.jdbc.ConnectionProxy csproxy = null;
public DBConnectionHelper()
{
}
public Connection getDBConnection() {
return getDBConnection("defaultdb");
}
public Connection getDBConnection(String connName)
{
Connection csproxyconn = null;
try
{
loggerObj.info("getting connection");
// Get a connection to the datasorce
conn = new helper.DBConnectionManager().getDBConnection(
connName);
loggerObj.info("Got connection");
loggerObj.info(conn); // The funny thing is that this line logs a
valid class (com.netscape.server.jdbc.ConnectionProxy@1a4bd4)
loggerObj.info(conn.getClass()); // Yet this line throws a
NullPOinterException as if conn was null
loggerObj.info(conn.getClass().getName());
String className = conn.getClass().getName();
loggerObj.info("Connection class Name ->" + className);
//For Iplanet connection pool, convert to Oracle connection
if
(!className.equalsIgnoreCase("oracle.jdbc.driver.OracleConnection")) {
csproxy = (com.netscape.server.jdbc.ConnectionProxy) conn;
csproxyconn = csproxy.getConnection();
return csproxyconn;
}
}
catch (Exception ex) {
loggerObj.error("Exception caught");
loggerObj.error(ex.getMessage());
loggerObj.error(ex);
//loggerObj.error(ex.getMessage(), ex);
}
return conn;
}
}
The connection manager class is just a wrapper for getting the
connection. A configuration file identifies whether to get it from a
JNDI lookup or from Oracle.
public Connection getDBConnection(String connName)
{
loggerObj.info("in getDBConnection" + connName);
// Get the db configuration from the config file
DBConfig aDBConfig = DBConfig.getInstance();
OrderedHashMap lookupData = aDBConfig .getLookupData(DBConfig
..KEY_DBCONNECTION);
InitialContext initialContext = null;
Hashtable env = new java.util.Hashtable(1);
Connection conn = null;
String oracleUserName = null;
String oracleUserPassword = null;
String oracleTnsName = null;
String oracleDriverName = null;
String jndiLookupType = null;
String jndiName = null;
String jndiLookup = null;
if (lookupData != null)
{
OrderedHashMap dbLookupData = (OrderedHashMap) if
(dbLookupData != null) {
oracleUserName = (String) dbLookupData.get("username");
oracleUserPassword = (String) dbLookupData.get("password");
oracleTnsName = (String) dbLookupData.get("dburl");
oracleDriverName = (String) dbLookupData.get("driver");
jndiLookupType = (String)
dbLookupData.get("jndi_lookup_type");
jndiName = (String) dbLookupData.get("jndi_name");
jndiLookup = (String) dbLookupData.get("jndi_lookup");
try {
// To use Iplanet connection pooling
if ( (jndiLookup != null) &&
jndiLookup.equalsIgnoreCase("yes")) {
loggerObj.info("INSIDE Iplanet Connection Pool
getConnection(" +
jndiName + ")");
initialContext = new InitialContext(env);
DataSource ds = (javax.sql.DataSource)
initialContext.lookup(
jndiName);
conn = ds.getConnection();
// com.netscape.server.jdbc.ConnectionProxy csproxy =
(com.netscape.server.jdbc.ConnectionProxy)ds.getConnection();
//
System.out.println("csproxy.getConnection().getClass().getName(): " +
csproxy.getConnection().getClass().getName());
// conn = csproxy.getConnection();
// loggerObj.info("conn.getClass().getName()"
+conn.getClass().getName());
loggerObj.info("Completed Iplanet Connection Pool
getConnection(" +
jndiName + ")");
}
else { // To use Oracle connection pooling
loggerObj.info("INSIDE Oracle Connection getConnection("
+ connName +
")");
Driver d = (Driver)
Class.forName(oracleDriverName).newInstance();
conn = DriverManager.getConnection(oracleTnsName,
oracleUserName,
oracleUserPassword);
loggerObj.info("Completed Oracle Connection
getConnection(" +
connName + ")");
}
}
catch (SQLException e) {
loggerObj.error("Error in getting the NEW Connection " +
e.getMessage());
}
catch (NamingException e) {
loggerObj.error("Error in getting the NEW Connection " +
e.getMessage());
}
catch (Exception ex) {
loggerObj.error(ex.getMessage(), ex);
}
finally {
return conn;
}
} else loggerObj.error("dbLookupData is null");
} else loggerObj.error("lookupData is null");
return conn;
}
Here are the log files
[25/Jul/2005 10:01:37:2] info: [25 Jul 2005 10:01:37] getting
connection
[25/Jul/2005 10:01:37:2] info: [25 Jul 2005 10:01:37] INSIDE Iplanet
Connection Pool getConnection(jdbc/defaultdb)
[25/Jul/2005 10:01:37:6] info: [25 Jul 2005 10:01:37] Completed Iplanet
Connecti
on Pool getConnection(jdbc/defaultdb)
[25/Jul/2005 10:01:37:6] info: [25 Jul 2005 10:01:37] Got connection
[25/Jul/2005 10:01:37:6] info: [25 Jul 2005 10:01:37]
com.netscape.server.jdbc.ConnectionProxy@1a4bd4
[25/Jul/2005 10:01:37:6] error: [25 Jul 2005 10:01:37] Exception caught
[25/Jul/2005 10:01:37:6] error: [25 Jul 2005 10:01:37]
[25/Jul/2005 10:01:37:6] error: [25 Jul 2005 10:01:37]
java.lang.NullPointerException