Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > ClassCastException при работе с Connection


Автор: kostenko 4.4.2006, 10:49
код:
Код

      Class.forName("oracle.jdbc.driver.OracleDriver");
      connect = DriverManager.getConnection(oracleURL, "aaa","aaa");
      pStat = connect.prepareCall(logQuery.toString());
      // --- set values:
      pStat.setTimestamp(1,new java.sql.Timestamp(_requestUnit.getRequestTime()));
      oracle.sql.BLOB reqBlob = oracle.sql.BLOB.createTemporary(connect,true,oracle.sql.BLOB.DURATION_SESSION);
      oracle.sql.BLOB respBlob = oracle.sql.BLOB.createTemporary(connect,true,oracle.sql.BLOB.DURATION_SESSION);

- отрабатывает,

а если получаю соединение из DataSource :

Код

dataSource.getConnection(_login, _password);

то на строке

Код

oracle.sql.BLOB reqBlob = oracle.sql.BLOB.createTemporary(connect,true,oracle.sql.BLOB.DURATION_SESSION);

получаю :
2006-04-04 10:52:46,875 ERROR - java.lang.ClassCastException
2006-04-04 10:52:46,875 ERROR - at oracle.sql.BLOB.createTemporary(BLOB.java:587)
2006-04-04 10:52:46,875 ERROR - at ua.nadra.guard.log4j.DBAppender.logRequestAndResponse(DBAppender.java:105)
2006-04-04 10:52:46,875 ERROR - at ua.nadra.guard.log4j.DBAppender.executeLog(DBAppender.java:55)
2006-04-04 10:52:46,875 ERROR - at ua.nadra.guard.log4j.DBAppender.append(DBAppender.java:37)
2006-04-04 10:52:46,875 ERROR - at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:221)
2006-04-04 10:52:46,875 ERROR - at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(Appende
rAttachableImpl.java:57)
2006-04-04 10:52:46,875 ERROR - at org.apache.log4j.Dispatcher.run(AsyncAppender.java:310)

в чём может быть проблема ?

Автор: LSD 4.4.2006, 11:01
Возможно у тебя http://forum.vingrad.ru/index.php?showtopic=88422&view=findpost&p=679879 ситуация, т.е. возвращается не оригинальное Connection, а обертка для него. А для правильной работы BLOB.createTemporary() нужно именно OracleConnection.

Автор: kostenko 4.4.2006, 12:38
вот нарыл: http://forums.oracle.com/forums/thread.jspa?forumID=46&messageID=595578&threadID=216037

Код

    System.out.println("--------------------BEGIN TEST");
      try{
      System.out.println("java.sql.Connection :");
      oracle.sql.BLOB reqBlob = oracle.sql.BLOB.createTemporary((java.sql.Connection)connect,true,oracle.sql.BLOB.DURATION_SESSION);
      System.out.println("ok");
      }catch(Exception _ex){
        System.out.println(_ex.toString());
      }
      try{
        System.out.println("oracle.jdbc.OracleConnection :");
        oracle.sql.BLOB reqBlob = oracle.sql.BLOB.createTemporary((oracle.jdbc.OracleConnection)connect,true,oracle.sql.BLOB.DURATION_SESSION);
        System.out.println("ok");
      }catch(Exception _ex){
        System.out.println(_ex.toString());
      }
      try{
        System.out.println("oracle.jdbc.driver.OracleConnection :");
        oracle.sql.BLOB reqBlob = oracle.sql.BLOB.createTemporary((oracle.jdbc.driver.OracleConnection)connect,true,oracle.sql.BLOB.DURATION_SESSION);
        System.out.println("ok");
      }catch(Exception _ex){
        System.out.println(_ex.toString());
      }
      try{
        System.out.println("sss");
        javax.sql.DataSource ds= (javax.sql.DataSource) new javax.naming.InitialContext().lookup("serial://datasources/"+this.LOG_DATA_SOURCE);
        connect = (oracle.jdbc.OracleConnection) ds.getConnection("r", "c");        
        oracle.sql.BLOB reqBlob = oracle.sql.BLOB.createTemporary((oracle.jdbc.driver.OracleConnection)connect,true,oracle.sql.BLOB.DURATION_SESSION);
        System.out.println("ok");
      }catch(Exception _ex){
        System.out.println(_ex.toString());
      }
      System.out.println("------------------------ END TEST");


но у меня

2006-04-04 12:44:40,171 INFO - --------------------BEGIN TEST
2006-04-04 12:44:40,171 INFO - java.sql.Connection :
2006-04-04 12:44:40,171 INFO - java.lang.ClassCastException
2006-04-04 12:44:40,171 INFO - oracle.jdbc.OracleConnection :
2006-04-04 12:44:40,171 INFO - java.lang.ClassCastException
2006-04-04 12:44:40,171 INFO - oracle.jdbc.driver.OracleConnection :
2006-04-04 12:44:40,171 INFO - java.lang.ClassCastException
2006-04-04 12:44:40,171 INFO - sss
2006-04-04 12:44:40,296 INFO - java.lang.ClassCastException
2006-04-04 12:44:40,296 INFO - ------------------------ END TEST

smile

Автор: LSD 4.4.2006, 14:37
Да выведи ты на печать:
Код
System.out.println(connect.getClass());

что мы тут гадаем, что у тебя там за класс.

Автор: kostenko 4.4.2006, 15:38
Цитата(LSD @ 4.4.2006, 14:37 Найти цитируемый пост)

что мы тут гадаем, что у тебя там за класс.


class com.inprise.visitransact.jdbc2.ConnectionProxy

Автор: LSD 4.4.2006, 15:53
Делай так:
Код
Connection physical = ((com.inprise.visitransact.jdbc2.ConnectionProxy) connection_from_jndi).getVendorSQLConnection();
BLOB.createTemporary(physical, true, BLOB.DURATION_SESSION);

подробнее http://support.borland.com/entry!default.jspa?categoryID=120&externalID=3248&printable=true.

Автор: kostenko 4.4.2006, 16:03
тож как раз ссылочку нарыл .. ща буду пробовать...

РАБОТАЕТ! smile

СПАСИБО!

Автор: KostenkoSergey 22.5.2007, 12:24
Может кому пригодится.. для WebSphereAppServ:
Код

Connection physical = (OracleConnection)WSJdbcUtil.getNativeConnection((WSJdbcConnection)connect);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)