Hi All,
I am using jdbc to connect to an oracle database but having a bit of a problem. Here is some details
Jdbc driver - Type 4
App server - Tomcat 5.5
Oracle Version - 10g
I have placed the jdbc driver on both the following directories
$TOMCAT_HOME/common/lib/
$APPLICATION_ROOT_DIR/WEB-INF/lib/
Here is the stack trace of the error i am getting.
09/10/2008 16:38:30 ERR http-8080-Processor23 com.bt.ccs21.presentation.events.CCS21EventAction: Throwable:org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:149)
at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:115)
at com.bt.ccs21.data.accessors.ConsignmentDAO.submitDeclaration(ConsignmentDAO.java:251)
at com.bt.ccs21.presentation.events.consignment.search.SubmitDeclaration.midAction(SubmitDeclaration.java:107)
at com.bt.ccs21.presentation.events.CCS21EventAction.execute(CCS21EventAction.java:67)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
Here is the java code to get my connection
// JNDI
Context ctx = null;
DataSource ds = null;
Connection conn = null;
ctx = new InitialContext();
Context envContext = (Context)ctx.lookup("java:/comp/env");
if (ctx != null)
{
ds = (DataSource)envContext.lookup(fullname);
if (ds != null)
{
// Enable tracing on this connection...
if (jdbcTraceFile != null && ds.getLogWriter() == null)
{
try
{
Log.threadLog(Log.DEBUG, CLASSNAME, METHOD +
": setting JDBC trace file on DataSource");
jdbcTraceFile.println("Tracing on JDBC DataSource " + ds.toString());
ds.setLogWriter(jdbcTraceFile);
}
catch (SQLException sqle)
{
Log.threadLog(Log.ERROR, CLASSNAME, METHOD +
": Exception while setting JDBC trace file");
Log.threadLog(Log.ERROR, CLASSNAME, sqle);
}
}
conn = ds.getConnection();
}
}
And here is the datasource configuration. This is configured in the following file $TOMCAT_HOME/catalina/localhost/context.xml
<Resource name="jdbc/testdb" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@10.10.10.10:1521:testdb"
username="testuser" password="testuser" maxActive="20" maxIdle="10"
maxWait="-1"/>
The above error is generated if i try to send an oracle.sql.ARRAY object to a plsql in the database. All i am trying the line of code where the code raises an exception is shown below (At line 2 in teh code below)
cst = conn.prepareCall(stp.SUBMIT_CONSIGNMENT_STORED_PROC);
ArrayDescriptor rectabDescriptor = ArrayDescriptor.createDescriptor("CCS21_CONSIGNMENTLIST_TYPE",conn);
ARRAY awbNoHwbs = new ARRAY(rectabDescriptor,conn,childLessAwbs);
ARRAY hwbs = new ARRAY(rectabDescriptor,conn,hwbList);
Any help will be greatly appreciated.
Thanks in advane.
Edited by: ziggy on Oct 9, 2008 5:03 PM