powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / glassfish v3 и OracleConnection
13 сообщений из 13, страница 1 из 1
glassfish v3 и OracleConnection
    #36485363
jev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jev
Гость
Здраствуйте, имеется проблема, схожая с 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
glassfish v3 и OracleConnection
    #36485402
jev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jev
Гость
Спасибо за внимание, сам нашел нужный класс в glassfish-api.jar :). Все заработало как описано в http://docs.sun.com/app/docs/doc/819-3672/beamt?a=view
...
Рейтинг: 0 / 0
glassfish v3 и OracleConnection
    #36485424
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
glassfish v3 и OracleConnection
    #36485439
jev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jev
Гость
Спасибо, это я так понимаю ojdbc6.jar нужен? Мое решение работает, но и ваше приму к сведению
...
Рейтинг: 0 / 0
glassfish v3 и OracleConnection
    #36485449
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0FD,

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

Нет, это ведь относится к com.sun.gjc.spi.jdbc40.ConnectionWrapper40
...
Рейтинг: 0 / 0
glassfish v3 и OracleConnection
    #36485490
jev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
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 )){
...
Рейтинг: 0 / 0
glassfish v3 и OracleConnection
    #36485524
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Период между сообщениями больше года.
glassfish v3 и OracleConnection
    #37229320
afirsin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
столкнулся тоже с такой проблемой. Можно по подробнее разьяснить? примеры кода. Заранее спасибо
...
Рейтинг: 0 / 0
glassfish v3 и OracleConnection
    #37231297
jev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jev
Гость
У меня вот так работает (псевдокод):
Код: plaintext
1.
2.
Connection con = ds.getConnection();
Connection driverCon =  ds.getConnection(con);
ArrayDescriptor arrayDescNum = ArrayDescriptor.createDescriptor(DBTypes.TYPE_NUMBER, driverCon);
ojdbc6, glassfish3 с пулом
...
Рейтинг: 0 / 0
glassfish v3 и OracleConnection
    #37289283
fialean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите пожалуйста, посоветуйте, подскажите что я не так делаю.
Заранее благодарен.
исходные данные следующие:
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
glassfish v3 и OracleConnection
    #37290678
vie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fialean,

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

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


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