Hi,

Environment:
 + OC4J 10.1.3.2.0
 + OJDBC 10g
 + ibatis (2.2.0/2.1.0)
 + with and without logging

Consider the following Java/DAO code:

public class JdbcCallExecutorDAO extends JdbcDaoTemplate implements ICallExecutor {
  ....

       OracleCallableStatement ocstmt = null;
       String returnValue = null;
       try {
           Connection c = getConnection();
System.err.println("Connection retrieved from iBatis DAO= " + c); ocstmt = (OracleCallableStatement) c.prepareCall(VALUECALL); /= ERRORLINE System.err.println("CallableStatement retrieved from iBatis DAO= "+ ocstmt);
           ocstmt.registerOutParameter(1, java.sql.Types.VARCHAR);
           ocstmt.setString(2, name);
           ocstmt.execute();
  ....

Without log4j/commons-logging enabled this code work without a problem, however when I enable log4j/commons-logging a ClassCastException occurs at //= ERRORLINE
with a message like:

       java.lang.ClassCastException: $Proxy14
          .....

When I remove the (OracleCallableStatement) and use plain CallableStatement assignment, it works again. I've had a look at "PreparedStatementLogProxy" and particularly this part:

...

public static PreparedStatement newInstance(PreparedStatement stmt, String sql) {
      InvocationHandler handler = new PreparedStatementLogProxy(stmt, sql);
      ClassLoader cl = PreparedStatement.class.getClassLoader();
return (PreparedStatement) Proxy.newProxyInstance(cl, new Class[]{PreparedStatement.class, CallableStatement.class}, handler);
   }

...

I'm wondering whether this is correct. Basically I expect my behavior to be the same with or
without logging.

Thank you,
-J.



--
Cumquat Information Technology
De Dreef 19
3706 BR Zeist
T +31 (0)30 - 6940490
F +31 (0)30 - 6940499
W http://www.cumquat.nl

E [EMAIL PROTECTED]
M +31 6 51 169 556
B http://www.cumquat.nl/technology_atom10.xml


Reply via email to