Hi, I'm trying to connect to an Oracle 8i database using JNDI lookup from Tomcat 4.1.30 and get an error I can't figure out.
The error message reads: org.apache.commons.dbcp.SQ
LNestedExc
eption: Cannot create JDBC driver of class '' for connect URL 'null'
This error seems to be when I try to get a connection from the DataSource object:
Connection conn = datasource.getConnection()
;
In attempts to figure this out, I created a test servlet that first connects to the database using the hard-coded driver and url, then JNDI.
The servlet doGet looks like this:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
String sDriver = "oracle.jdbc.driver.Oracle
Driver";
String sURL = "jdbc:oracle:thin:@somecom
pany.com:1
521:db1";
try {
out.println("Attempting Oracle connection<br>");
Class.forName(sDriver).new
Instance()
;
Connection conn = DriverManager.getConnectio
n(sURL, "scott", "tiger");
conn.close();
out.println("Connected to Oracle okay<br>");
} catch (InstantiationException e) {
out.println(e.getClass()+"
: "+e.getMessage()+"<br>");
} catch (IllegalAccessException e) {
out.println(e.getClass()+"
: "+e.getMessage()+"<br>");
} catch (ClassNotFoundException e) {
out.println(e.getClass()+"
: "+e.getMessage()+"<br>");
} catch (SQLException e) {
out.println(e.getClass()+"
: "+e.getMessage()+"<br>");
}
InitialContext ctx;
try {
out.println("Attempting JNDI connection<br>");
ctx = new InitialContext();
Context envctx = (Context) ctx.lookup("java:comp/env"
);
DataSource datasource = (DataSource) envctx.lookup("jdbc/operat
ions");
Connection conn = datasource.getConnection()
;
conn.close();
out.println("Connected to JNDI okay<br>");
}
catch (NamingException e) {
out.println(e.getClass()+"
: "+e.getMessage()+"<br>");
} catch (SQLException e) {
out.println(e.getClass()+"
: "+e.getMessage()+"<br>");
}
}
The output looks like this:
Attempting Oracle connection
Connected to Oracle okay
Attempting JNDI connection
class org.apache.commons.dbcp.SQ
LNestedExc
eption: Cannot create JDBC driver of class '' for connect URL 'null'
My server.xml looks like:
...
<GlobalNamingResources>
<Environment name="simpleValue" override="true" type="java.lang.Integer" value="30"/>
<Resource auth="Container" name="jdbc/operations" scope="Shareable" type="javax.sql.DataSource
"/>
<ResourceParams name="jdbc/operations">
<parameter>
<name>factory</name>
<value>org.apache.commons.
dbcp.Basic
DataSource
Factory</v
alue>
</parameter>
<parameter>
<name>driverClassName</nam
e>
<value>oracle.jdbc.driver.
OracleDriv
er</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@s
omecompany
.com:1521:
db1</value
>
</parameter>
<parameter>
<name>username</name>
<value>scott</value>
</parameter>
<parameter>
<name>password</name>
<value>tiger</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
</ResourceParams>
</GlobalNamingResources>
...
My web.xml looks like:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<!-- define global vars -->
<servlet>
<servlet-name>TestServlet<
/servlet-n
ame>
<servlet-class>testJNDI.Te
stJNDI</se
rvlet-clas
s>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet<
/servlet-n
ame>
<url-pattern>/servlet/Test
JNDI</url-
pattern>
</servlet-mapping>
<session-config>
<session-timeout>120<!-- in minutes --></session-timeout>
</session-config>
<resource-ref>
<description>Oracle Datasource</description>
<res-ref-name>jdbc/operati
ons</res-r
ef-name>
<res-type>javax.sql.DataSo
urce</res-
type>
<res-auth>Container</res-a
uth>
</resource-ref>
</web-app>
Help!
Thanks in advance.
Start Free Trial