tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ziggy O" <din...@gmail.com>
Subject Re: jdbc driver fails with tomcat
Date Fri, 26 Sep 2008 17:24:17 GMT
Hi,

When i debug the code, it doesnt get to the point where i am initialising
the OracleCallableStatement object. It failed just after the initialisation
of the ArrayDescriptor object.

I have tried to change it to use CallableStatement and im now getting
another error. Here is how i've changed it to.

CallableStatement 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);


context.xml

      <Resource name="jdbc/ccs21db" auth="Container"
              type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
              url="jdbc:oracle:thin:@xxx.xxx.xxx:1525:dbsid"
              username="xxx" password="xxx" maxActive="20" maxIdle="10"
              maxWait="-1"/>

web.xml

<resource-ref>
     <description>Oracle Datasource</description>
     <res-ref-name>jdbc/ccs21db</res-ref-name>
     <res-type>oracle.jdbc.pool.OracleDataSource</res-type>
     <res-auth>Container</res-auth>
    </resource-ref>

And here is the stack trace

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.abbt.ccs21.data.accessors.ConsignmentDAO.submitDeclaration(ConsignmentDAO.java:301)

    at
com.bt.abccs21.presentation.events.consignments.select.SubmitDeclaration.midAction(SubmitDeclaration.java:68)

    at
com.bt.abccs21.presentation.events.CCS21EventAction.execute(CCS21EventAction.java:36)

    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)



On Fri, Sep 26, 2008 at 5:57 PM, Christopher Schultz <
chris@christopherschultz.net> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Dini,
>
> Dini Omar wrote:
> > I am trying to send an array to a pl/sql module but for some reason i am
> > unable to get the connection object.
> >
> > Here is the line of code that fails
> >
> > [code]
> > Connection conn = null;
> > ArrayDescriptor rectabDescriptor =
> > ArrayDescriptor.createDescriptor("CCS21_CONSIGNMENTLIST_TYPE",conn);
>
> It's odd that your exception says DelegatingCallableStatement (which is
> the actual type of the object being casted) when the line indicated
> neither performs a cast, nor does anything with a statement.
>
> Are you sure this is the right line number?
>
> > <<FAILS HERE<<
> > ARRAY awbNoHwbs = new ARRAY(rectabDescriptor,conn,childLessAwbs);
> > ARRAY hwbs = new ARRAY(rectabDescriptor,conn,hwbList);
> >
> > OracleCallableStatement cst =
> >
> (OracleCallableStatement)conn.prepareCall(stp.SUBMIT_CONSIGNMENT_STORED_PROC);
>
> I'm guessing that the above line is the one where the problem is really
> occurring. conn.prepareCall returns a DelegatingCallableStatement
> instead of the Oracle-specific one you are expecting.
>
> Do you /need/ to use OracleCallableStatement, here? If not, you should
> simply use java.sql.CallableStatement and you should be good to go.
>
> If you need to access the underlying OracleCallableStatement, then
> you'll need to go through some hoops to get that actual object. Perhaps
> something like this:
>
> DelegatingCallableStatement dcs =
> conn.prepareCall(stp.SUBMIT_CONSIGNMENT_STORED_PROC);
>
> OracleCallableStatement =
> (OracleCallableStatement)dcs.getInnermostDelegate();
>
> This is a big dangerous, though, because Tomcat doesn't make too many
> guarantees about the structure of the objects in the dbcp.dbcp package.
> Also, the "innermost delegate" might not actually be your Oracle statement.
>
> My advise would be to try to stick to using only objects and interfaces
> in the JDBC API unless you absolutely need to (for instance, to create
> Oracle-specific arrays from templates or whatever this stuff is).
>
> The Oracle driver ought to allow you to interact a bit more naturally
> with the JDBC API and not require you to use OracleCallableStatement
> objects and stuff like that.
>
> Hope that helps,
> - -chris
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (MingW32)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iEYEARECAAYFAkjdFH4ACgkQ9CaO5/Lv0PARMgCgphBlDrwQWBWW73/a2cAG82Ju
> RaUAmwSmGtca3RVQc91kORrMuXiy2DXs
> =kZ3E
> -----END PGP SIGNATURE-----
>
> ---------------------------------------------------------------------
> To start a new topic, e-mail: users@tomcat.apache.org
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message