Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / glassfish v3 и OracleConnection / 13 сообщений из 13, страница 1 из 1
24.02.2010, 11:19:41
    #36485363
jev
jev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
glassfish v3 и OracleConnection
Здраствуйте, имеется проблема, схожая с http://old.nabble.com/Oracle-Connection-Pool-Issues-td12900779.html#a12900779
На Glassfish v3 настроен пул соединений oracle.jdbc.pool.OracleDataSource (драйвер ojdbc14.jar), коннекшены получаются
Код: plaintext
Connection connection = ds.getConnection();
Все нормально работает, но возникла необходимость в методе, передающем в оракл массив, соответственно
Код: plaintext
ArrayDescriptor.createDescriptor(type, connection)
требует OracleConnection и бросает
Код: plaintext
 java.lang.ClassCastException: com.sun.gjc.spi.jdbc40.ConnectionWrapper40 cannot be cast to oracle.jdbc.OracleConnection
. Каким образом из соединения из пула получить OracleConnection? Решение по ссылке для SJAS9 не подходит, так как не нашел нужных классов в GF v3.
...
Рейтинг: 0 / 0
24.02.2010, 11:32:23
    #36485402
jev
jev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
glassfish v3 и OracleConnection
Спасибо за внимание, сам нашел нужный класс в glassfish-api.jar :). Все заработало как описано в http://docs.sun.com/app/docs/doc/819-3672/beamt?a=view
...
Рейтинг: 0 / 0
24.02.2010, 11:41:56
    #36485424
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
glassfish v3 и OracleConnection
jev,

com.sun.gjc.spi.jdbc40.ConnectionWrapper40 реализует интерфейс java.sql.Wrapper из JDBC 4.0.

Код: plaintext
1.
2.
3.
Connection connection = ds.getConnection();
 if (connection.isWrapperFor(oracle.jdbc.OracleConnection. class )){
    oracle.jdbc.OracleConnection oconn=connection.unwrap(oracle.jdbc.OracleConnection. class );
}
...
Рейтинг: 0 / 0
24.02.2010, 11:47:14
    #36485439
jev
jev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
glassfish v3 и OracleConnection
Спасибо, это я так понимаю ojdbc6.jar нужен? Мое решение работает, но и ваше приму к сведению
...
Рейтинг: 0 / 0
24.02.2010, 11:49:56
    #36485449
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
glassfish v3 и OracleConnection
0FD,

Добавлю, вызов oconn.close() помещает соединение в пул, а не закрывает его(в отличии от метода по ссылке).
...
Рейтинг: 0 / 0
24.02.2010, 11:53:44
    #36485456
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
glassfish v3 и OracleConnection
jevСпасибо, это я так понимаю ojdbc6.jar нужен? Мое решение работает, но и ваше приму к сведению

Нет, это ведь относится к com.sun.gjc.spi.jdbc40.ConnectionWrapper40
...
Рейтинг: 0 / 0
24.02.2010, 12:04:12
    #36485490
jev
jev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
glassfish v3 и OracleConnection
Попробовал ваш вариант, валится с
Код: plaintext
1.
Caused by: java.lang.AbstractMethodError: oracle.jdbc.driver.LogicalConnection.isWrapperFor(Ljava/lang/ Class ;)Z
        at com.sun.gjc.spi.jdbc40.ConnectionHolder40.isWrapperFor(ConnectionHolder40.java: 497 )
на строчке
Код: plaintext
1.
 if (connection.isWrapperFor(oracle.jdbc.OracleConnection. class )){
...
Рейтинг: 0 / 0
24.02.2010, 12:15:47
    #36485524
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
glassfish v3 и OracleConnection
jevПопробовал ваш вариант, валится с
Код: plaintext
1.
Caused by: java.lang.AbstractMethodError: oracle.jdbc.driver.LogicalConnection.isWrapperFor(Ljava/lang/ Class ;)Z
        at com.sun.gjc.spi.jdbc40.ConnectionHolder40.isWrapperFor(ConnectionHolder40.java: 497 )
на строчке
Код: plaintext
1.
 if (connection.isWrapperFor(oracle.jdbc.OracleConnection. class )){


Да, нужен ojdbc6.jar или не делать isWrapperFor(...).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
   public   boolean  isWrapperFor( Class <?> iface)  throws  SQLException {
        checkValidity();
         boolean  result ;
         if  (iface.isInstance( this )) {
            result = true;
        } else {
            result = con.isWrapperFor(iface);
        }
         return  result;
    }
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.04.2011, 17:26:05
    #37229320
afirsin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
glassfish v3 и OracleConnection
столкнулся тоже с такой проблемой. Можно по подробнее разьяснить? примеры кода. Заранее спасибо
...
Рейтинг: 0 / 0
25.04.2011, 07:01:16
    #37231297
jev
jev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
glassfish v3 и OracleConnection
У меня вот так работает (псевдокод):
Код: plaintext
1.
2.
Connection con = ds.getConnection();
Connection driverCon =  ds.getConnection(con);
ArrayDescriptor arrayDescNum = ArrayDescriptor.createDescriptor(DBTypes.TYPE_NUMBER, driverCon);
ojdbc6, glassfish3 с пулом
...
Рейтинг: 0 / 0
01.06.2011, 14:17:28
    #37289283
fialean
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
glassfish v3 и OracleConnection
помогите пожалуйста, посоветуйте, подскажите что я не так делаю.
Заранее благодарен.
исходные данные следующие:
glassfish v3, драйвер ojdbc6

класс Connecta:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
 package  ads;

 import  java.sql.*;
 import  javax.naming.Context;
 import  javax.naming.InitialContext;
 import  javax.naming.NamingException;
 import  javax.sql.DataSource;

/**
 *
 * @author automation10
 */
 public   class  ConnectionClass {

    @SuppressWarnings("CallToThreadDumpStack")
     public   static  Connection initConnection() {

        Connection cn =  null ;
         try  {
            Context ctx =  new  InitialContext();
            DataSource ds = (DataSource) ctx.lookup("jdbc/os_common");
            cn = ds.getConnection();           
        }  catch  (SQLException ex) {
            ex.printStackTrace();
        }  catch  (NamingException ex) {
            ex.printStackTrace();
        }

         return  cn;
    }

}

функция :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
 public  String save_Info(@WebParam(name = "inArray1") String[][] rec_obje,
    @WebParam(name = "inArray") String[][] inArray,
    @WebParam(name = "inArrayContact") String[][] inContact,
    @WebParam(name = "Gr")  int  group,
    @WebParam(name = "SubGr")  int  subgroup,
    @WebParam(name = "PD") String sxPubDate,
    @WebParam(name = "city")  int  ixCity_id,
    @WebParam(name = "PT")  int  ixPubType,
    @WebParam(name = "PC")  int  ixPubCount,
    @WebParam(name = "orderid")  int  ixOrderId )  throws  UnsupportedEncodingException {

        int  i;
      String arValues="";
        try  {
           
            StructDescriptor structDesc = StructDescriptor.createDescriptor("RECTYPE", cn);
            ArrayDescriptor arrayDesc = ArrayDescriptor.createDescriptor("RECTAB", cn);
            StructDescriptor structDesc1 = StructDescriptor.createDescriptor("OBJ_ELEMENT", cn);
            ArrayDescriptor arrayDesc1 = ArrayDescriptor.createDescriptor("REC_OBJ_ELEMENT", cn);
            StructDescriptor structDesc2 = StructDescriptor.createDescriptor("OBJ_CONTACT", cn);
            ArrayDescriptor arrayDesc2 = ArrayDescriptor.createDescriptor("REC_OBJ_CONTACT", cn);
       
            CharacterSet chs = CharacterSet.make(CharacterSet.CL8MSWIN1251_CHARSET);
            // ?нициализация коллекции для объектов STRUCT.
            ArrayList<STRUCT> arrayList =  new  ArrayList<STRUCT>();
            ArrayList<STRUCT> arrayList1 =  new  ArrayList<STRUCT>();
            ArrayList<STRUCT> arrayList2 =  new  ArrayList<STRUCT>();
           Object[] record= new  Object[rec_obje[ 0 ].length];
                 for   (i= 0 ; i<rec_obje.length;i++){
                record[ 0 ] = Integer.valueOf(rec_obje[i][ 0 ]);
                record[ 1 ] = Integer.valueOf(rec_obje[i][ 1 ]); 
                record[ 2 ] = Integer.valueOf(rec_obje[i][ 2 ]);
                record[ 3 ] = Integer.valueOf(rec_obje[i][ 3 ]);
                record[ 4 ] = Integer.valueOf(rec_obje[i][ 4 ]);
                record[ 5 ] = Integer.valueOf(rec_obje[i][ 5 ]);
               }
            arrayList.add( new  STRUCT(structDesc, cn, record));
            ARRAY array =  new  ARRAY(arrayDesc, cn, arrayList.toArray());
         
             Object[] record1 =  new  Object[inArray[ 0 ].length];
             for  (i =  0 ; i < inArray.length; i++) {
                record1[ 0 ] = Integer.valueOf(inArray[i][ 0 ]);
                record1[ 1 ] =  new   CHAR  (inArray[i][ 1 ].getBytes("cp1251"), chs); 
                record1[ 2 ] = Integer.valueOf(inArray[i][ 2 ]);
                }
               
                arrayList1.add( new  STRUCT(structDesc1, cn, record1));
            }
            ARRAY array1 =  new  ARRAY(arrayDesc1, cn, arrayList1.toArray());
            Object[] record2 =  new  Object[inContact[ 0 ].length];
             for  (i =  0 ; i < inContact.length; i++) {
                record2[ 0 ] = Integer.valueOf(inContact[i][ 0 ]);
                 if  (inContact[i][ 1 ].equals("")){
                    record2[ 1 ] =  0 ;
                }  else  {
                record2[ 1 ] = Integer.valueOf(inContact[i][ 1 ]);
                }
                record2[ 2 ] =  new   CHAR (String.valueOf(inContact[i][ 2 ]).getBytes("cp1251"), chs);
                record2[ 3 ] =  new   CHAR (String.valueOf(inContact[i][ 3 ]).getBytes("cp1251"), chs);
                record2[ 4 ] =  new   CHAR (String.valueOf(inContact[i][ 4 ]).getBytes("cp1251"), chs);
                record2[ 5 ] =  new   CHAR (String.valueOf(inContact[i][ 5 ]).getBytes("cp1251"), chs);

                arrayList2.add( new  STRUCT(structDesc2, cn, record2));
            }
            ARRAY array2 =  new  ARRAY(arrayDesc2, cn, arrayList2.toArray());

            st =  cn.prepareCall("begin pkg_ads.save_object(?,?,?,?,?,?,?,?,?,?); end;");
            arValues="1";
            st.setObject( 1 , array, OracleTypes.ARRAY);
            st.setObject( 2 , array1,OracleTypes.ARRAY);
            st.setObject( 3 , array2,OracleTypes.ARRAY);
            st.setInt( 4 ,group);
            st.setInt( 5 ,subgroup);
            st.setString( 6 , sxPubDate);
            st.setInt( 7 ,ixCity_id);
            st.setInt( 8 , ixPubType);
            st.setInt( 9 , ixPubCount);
            st.setInt( 10 , ixOrderId);
            st.execute();
 
        st.close();
        cn.close();
        
         arValues="2";
        }  catch  (SQLException e) {
            //arValues="noSAVE";
            System.out.print(e.toString());
        }
//----------------------
 
         return  arValues;
    }

РЕзультат: Error: com.sun.gjc.spi.jdbc40.ConnectionWrapper40 cannot be cast to oracle.jdbc.OracleConnection


данная функция отрабатывает нормально (сохраняет данные в БД) если используется следующая функция Connecta к БД:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 public   static  Connection initConnection() {
        Connection cn =  null ;
        Locale originalLocale = Locale.getDefault();
        Locale.setDefault(Locale.US);
         try  {
             try  {
                 Class .forName("oracle.jdbc.driver.OracleDriver");
            }  catch  (ClassNotFoundException e) {
                e.printStackTrace();
            }
            cn = DriverManager.getConnection("jdbc:oracle:thin:@os.br.mkl.ru:1521:orcl", "test", "testsh");
        }  catch  (SQLException e) {
        }
        Locale.setDefault(originalLocale);
         return  cn;
}
...
Рейтинг: 0 / 0
02.06.2011, 10:16:45
    #37290678
vie
vie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
glassfish v3 и OracleConnection
fialean,

Не уверен, но где-то видел что это проблема glassfish-евского датасурса. Попробуй не через JNDI.
...
Рейтинг: 0 / 0
01.02.2012, 14:46:44
    #37641972
Thin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
glassfish v3 и OracleConnection
Уважаемый 0FD!
Огромное спасибо за ответ! А уважаемому jev, спасибо за вопрос!
Столкнулся с той же проблемой, уже думал придётся запросы переписывать, но с Вашим советом всё заработало.

Обожаю этот форум.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / glassfish v3 и OracleConnection / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]