I shall try to describe more precisely a situation with call Oracle stored
procedure through DBCP.
During a call of stored procedure through DBCP there is a mistake of
reduction of type:
java.lang.ClassCastException
server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server debug="0" port="8081" shutdown="SHUTDOWN">
<GlobalNamingResources>
<Resource name="jdbc/IcIDB" auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/IcIDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
<parameter>
<name>username</name>
<value>IcIDB</value>
</parameter>
<parameter>
<name>password</name>
<value>IcIDB</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@10.1.33.99:1521:ORATEST0</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.OracleDriver</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>2</value>
</parameter>
</ResourceParams>
</GlobalNamingResources>
<Service name="Tomcat-Standalone">
<Connector acceptCount="10"
className="org.apache.catalina.connector.http.HttpConnector"
connectionTimeout="60000" debug="9" maxProcessors="75" minProcessors="5"
port="8080"/>
<Engine debug="9" defaultHost="localhost" name="Standalone">
<Host
appBase="D:\Barkov_PT\UVDGlobDB\Projects\LoginIcIDB\Tomcat\webapps"
debug="9" name="localhost" unpackWARs="false">
<Context debug="9"
docBase="D:\Barkov_PT\UVDGlobDB\Projects\LoginIcIDB\LoginIcIDB"
path="/LoginIcIDB" reloadable="false"
workDir="D:\Barkov_PT\UVDGlobDB\Projects\LoginIcIDB\Tomcat\work\LoginIcIDB">
<ResourceLink name="IcIDBLnk" global="jdbc/IcIDB"
type="javax.sql.DataSource"/>
</Context>
</Host>
</Engine>
</Service>
</Server>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<display-name>LoginIcIDB</display-name>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>debugjsp</servlet-name>
<description>Added to compile JSPs with debug info</description>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>classdebuginfo</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>debugjsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-template.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core_rt</taglib-uri>
<taglib-location>/WEB-INF/c-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/xml</taglib-uri>
<taglib-location>/WEB-INF/x.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/xml_rt</taglib-uri>
<taglib-location>/WEB-INF/x-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/fmt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/fmt_rt</taglib-uri>
<taglib-location>/WEB-INF/fmt-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/sql</taglib-uri>
<taglib-location>/WEB-INF/sql.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/sql_rt</taglib-uri>
<taglib-location>/WEB-INF/sql-rt.tld</taglib-location>
</taglib>
<resource-ref>
<res-ref-name>IcIDBLnk</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
Class of returning of connection from a pool.
public class OraConnection {
/ **
* The empty designer of a class
*/
public OraConnection () {
}
/ **
* MÐÑÐÐ returning the established connection
* @param dataSourceName String - the name of resource JNDI (as a rule
links to a global resource in a context of the application)
* @param attemptCnt int - ÐÐÐ-in attempts to establish connection
* @param timeDelay long - time between attempts to establish connection
* @return Connection - returned connection
*/
public Connection getConnection (String dataSourceName, int attemptCnt,
long timeDelay) {
Connection con=null;
try {
// Initialization of a context and search of a context of resources:
components and an environment
Context init = new InitialContext ();
Context ctx = (Context) init.lookup ("java:comp/env");
// Return of parameters of a data set by results of search of a
resource with a name dataSourceName
DataSource dataSource = (DataSource) ctx.lookup (dataSourceName);
int curAttemptNum=0;
// Attempts to open connection
while (con == null ** curAttemptNum <attemptCnt) {
try {
con = (Connection) dataSource.getConnection ();
}
catch (Exception e) {
// Processing exception on installation of connection a delay
before the following attempt
con=null;
curAttemptNum ++;
System.out.println (" Attempt to open the connection is failed.
");
Thread.sleep (timeDelay);
}
}
}
catch (Exception ex) {
// Processing exception at job with JNDI
System.out.println (" Cannot retrieve java:comp/env "
+dataSourceName);
}
return con;
}
}
Method of a call of stored procedure.
Connection is passed in a method, and established with the help of class
OraConnection and his method getConnection
public ResultSet getAuthentification (Connection con,
String userName,
String userPassword) {
OracleResultSet rset = null;
try {
//!!!!!!!!!!!!!!!!!!!!!!!!!! The mistake of reduction of type arises
here!!!!!!!!!!!!!!!!!!!!!!!!!!
OracleCallableStatement cs = (OracleCallableStatement)
con.prepareCall (" {? = call jstpLoginicidb.getAuthentification
(??)} ");
cs.registerOutParameter (1, OracleTypes. CURSOR);
cs.setString (2, userName);
cs.setString (3, userPassword);
cs.execute ();
rset = (OracleResultSet) ((OracleCallableStatement) cs) .getCursor
(1);
}
catch (Exception e) {
System.out.println (
" IC: Runtime error: calling getAuthentification (params...) " +
e);
}
return rset;
}
----- Original Message -----
From: "Craig McClanahan" <[EMAIL PROTECTED]>
To: "Jakarta Commons Users List" <[EMAIL PROTECTED]>
Sent: Thursday, November 25, 2004 9:44 PM
Subject: Re: [dbcp] Call Oracle stored procedure via DBCP?
> On Thu, 25 Nov 2004 18:45:09 +0300, Sergey Karpov <[EMAIL PROTECTED]> wrote:
> > Hello!
> >
> > Is Tomcat + DPCP + JNDI and Oracle + stored procedure...
> >
> > When from the application on Tomcat the call of stored procedure is
carried out through "direct" connection with Oracle - all normally... And
results in ResultSet come back...
> >
> > However when "direct" connection is replaced with the connection
received from pool connection (DBCP) there is a mistake.
> >
> > Thus all elementary searches (such as select...) through DBCP to base
work normally...
> >
> > For connection with base in all cases it is used JDBC thin driver.
> >
> > What could it be?
>
> It could be one of many millions of possible mistakes. Without
> details about what you are doing (such as sample code and an exception
> message and stack trace when you try to do someting), it is impossible
> for anyone to help you.
>
> There is nothing in principle about using DBCP and Tomcat's JNDI
> support that should make this not work, *unless* you are trying to
> cast the Connection object (or some other JDBC object) to an
> Oracle-specifc class. You should not need to do that sort of thing --
> but if it is required there mght be some workarounds. I would ask
> that kind of question on the Tomcat User mailing list (to subscribe,
> send an empty message to <[EMAIL PROTECTED]>)
> since it will be specific to this environment.
>
> Craig
>
>
> >
> > KSV
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]