To Whom It May Concern,
Does anyone have a checklist for implementing Oracle JDBC OCI 10g driver
in the Tomcat server DBCP connection pool. It seems very simple
according to directions from Oracle but I must be missing one piece.
I have confirmed the external setup with tnsnames.ora and the oracle
client installation. I can connect with SQL Navigator and with a simple
java program that uses the oci driver but does not use the connection
pool. When I try to use this same driver and the connection pool it
crashes the JVM.
1. install oracle client -- done and verified
2. verify ORACLE_HOME/bin is in the PATH -- done and verified
3. set TNS_NAMES correctly -- done and verified
4. use the Oracle 10g driver ( ojdbc14.jar ver. 10.2.0.3 ) -- done,
downloaded and verified with thin client
5. configure the connection pool ( see below ) -- I think this is
correct, work with thin, not with oci
1. correct driver, type, and factory ( from examples )
The simple program uses the OracleDataSource to get the connection.
What does the DBCP do different than my simple program to get a physical
connection to the database?
Any suggestions are greatly appreciated.
Jeff
TNS_ADMAIN: is set to the directory with tnsnames.ora lives
TNSNAMES.ORA:
MYDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.62.37.78)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = SAMPF)
)
)
THIS WORKS:
<Resource name="jdbc/samp/hsd"
auth="Container"
type="oracle.jdbc.pool.OracleDataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
factory="oracle.jdbc.pool.OracleDataSourceFactory"
url="jdbc:oracle:thin:@MYDB"
user="scott"
password="tiger"
maxActive="20"
maxIdle="10"
maxWait="-1" />
THIS CRASHES THE JVM:
<Resource name="jdbc/samp/hsd"
auth="Container"
type="oracle.jdbc.pool.OracleDataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
factory="oracle.jdbc.pool.OracleDataSourceFactory"
url="jdbc:oracle:oci:@MYDB"
user="scott"
password="tiger"
maxActive="20"
maxIdle="10"
maxWait="-1" />
Simple Java Program
package com.cox.pap.paws.test;
/*
* This sample can be used to check the JDBC installation.
* Just run it and provide the connect information. It will select
* "Hello World" from the database.
*/
// You need to import the java.sql and JDBC packages to use JDBC
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import oracle.jdbc.pool.OracleDataSource;
public class DBConnectionTest
{
public static void main(String args[])
throws SQLException, IOException
{
// Prompt the user for connect information
String user = "scott";
String password = "tiger";
String database = "MYDB";
String url = "jdbc:oracle:oci:@" + database;
String sql = "select 'Hello World' from dual";
System.out.println("url = " + url);
System.out.println("sql = " + sql);
System.out.flush();
System.out.print("Connecting...");
// Open an OracleDataSource and get a connection
OracleDataSource ods = new OracleDataSource();
ods.setURL(url);
ods.setUser(user);
ods.setPassword(password);
Connection conn = ods.getConnection();
System.out.println("Connected.");
// Create a statement
Statement stmt = conn.createStatement();
// Do the SQL "Hello World" thing
ResultSet rset = stmt.executeQuery(sql);
System.out.print("Results from query >> ");
while (rset.next())
System.out.println(rset.getString(1));
// close the result set, the statement and connect
rset.close();
stmt.close();
conn.close();
System.out.println("Your JDBC installation is correct.");
}
}
Output
url = jdbc:oracle:oci:@MYDB
sql = select 'Hello World' from dual
Connecting...Connected.
Results from query >> Hello World
Your JDBC installation is correct.