Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Oracle сессии + Java  [new]
katlis
Member

Откуда: Барнаул
Сообщений: 14
Есть следующая проблема: при обращении к Oracle из Java для кажлого пользователя создается новое соединение:
try {

                        Class.forName("oracle.jdbc.driver.OracleDriver");
                        con = DriverManager.getConnection(url, user, pass);
                        con.setAutoCommit(false);
                        con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

                        // запрашиваем процедуру аутентификации пользователя
                        cstmt = con.prepareCall("{call USERS_API.set_user_info(?,?)}");
                        cstmt.setInt(1, idCurrentUser);
                        cstmt.setString(2, idSession);
                        cstmt.execute();
                        
                        cstmt = con.prepareCall("{? = call get_sid()}");
                        cstmt.registerOutParameter(1, java.sql.Types.NUMERIC);
                        cstmt.executeUpdate();
                        idOracleSession = cstmt.getInt(1);
                        
                        cstmt = con.prepareCall("{call USERS_API.set_Users(?,?,?,?)}");
                        cstmt.setInt(1, iduser);
                        cstmt.setString(2, password);
                        cstmt.setString(3, login);
                        cstmt.setInt(4, kind);
                        cstmt.executeQuery();
                        con.commit();
                        cstmt.close();
                        con.close();

                } catch (SQLException e) {
                        e.printStackTrace();
                        err = Integer.toString(e.getErrorCode()) + e.getMessage();
                        iduser = 0;
                        return false;
                } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                } finally {
                        // if (con != null) {
                        // con.close();
                        // pool.freeConnection(con);
                        // }
                }
Но при этом если 2 пользователя заходят в одно время, то получается, что они используют одну и ту же сессию Oracle! Полчему так происходит и как это можно изменить?
12 май 08, 12:22    [5649965]     Ответить | Цитировать Сообщить модератору
 Re: Oracle сессии + Java  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
katlis
Есть следующая проблема: при обращении к Oracle из Java для кажлого пользователя создается новое соединение:
...
Но при этом если 2 пользователя заходят в одно время, то получается, что они используют одну и ту же сессию Oracle!
Полчему так происходит и как это можно изменить?

А почему вы решили, что "они используют одну и ту же сессию Oracle"?
Может быть вы при написании ошиблись и вместо "?" написали "!"?

Иначе получается, что вы сами сделали неверный вывод,
а потом спрашиваете почему так...
12 май 08, 13:10    [5650325]     Ответить | Цитировать Сообщить модератору
 Re: Oracle сессии + Java  [new]
katlis
Member

Откуда: Барнаул
Сообщений: 14
SQL*Plus
katlis
Есть следующая проблема: при обращении к Oracle из Java для кажлого пользователя создается новое соединение:
...
Но при этом если 2 пользователя заходят в одно время, то получается, что они используют одну и ту же сессию Oracle!
Полчему так происходит и как это можно изменить?

А почему вы решили, что "они используют одну и ту же сессию Oracle"?
Может быть вы при написании ошиблись и вместо "?" написали "!"?

Иначе получается, что вы сами сделали неверный вывод,
а потом спрашиваете почему так...


Пробовали выводить идентификатор сессии в обоих случаях он был один и тот же + кроме того в сессииях писалась переменная пакета, для того, чтобы вести протокол и записывалась в таблицу, для обоих пользователей значения писались были разными, но в таблицу занеслось одно и тоже, то есть значение скорее всего переписалось
12 май 08, 13:21    [5650401]     Ответить | Цитировать Сообщить модератору
 Re: Oracle сессии + Java  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
katlis
SQL*Plus
katlis
Есть следующая проблема: при обращении к Oracle из Java для кажлого пользователя создается новое соединение:
...
Но при этом если 2 пользователя заходят в одно время, то получается, что они используют одну и ту же сессию Oracle!
Полчему так происходит и как это можно изменить?

А почему вы решили, что "они используют одну и ту же сессию Oracle"?
Может быть вы при написании ошиблись и вместо "?" написали "!"?

Иначе получается, что вы сами сделали неверный вывод,
а потом спрашиваете почему так...

Пробовали выводить идентификатор сессии в обоих случаях он был один и тот же
Это место проясните подробнее:
- Откуда вы брали "идентификатор сессии"?
- Какой именно "идентификатор сессии" вы брали?
- Как именно и куда "выводили"?

katlis
+ кроме того в сессииях писалась переменная пакета, для того, чтобы вести протокол и записывалась в таблицу, для обоих пользователей значения писались были разными, но в таблицу занеслось одно и тоже, то есть значение скорее всего переписалось
Этот поток сознания не осилил.
Может быть в нем есть мысль, но сильно замаскированная, видимо... :-)
12 май 08, 13:31    [5650469]     Ответить | Цитировать Сообщить модератору
 Re: Oracle сессии + Java  [new]
katlis
Member

Откуда: Барнаул
Сообщений: 14
Выводили просто на страницу идентификатор сессии Oracle (select DISTINCT SID into l_sid from v$mystat;)
Мысль была такая: идентификатор пользователя храниться в сессии, перед тем как делать какие-то операции в базе, вызывается процедура, в которой в переменной пакета присваевается этот идентификатор, а на триггерах при любых изменениях базы вызывается функция, возвращающая эту переменную и она пишется в таблицу логов. Так вот, получалось так, что для разных пользователей запись в логе была на id того, пользователя, который зашел последним.
12 май 08, 13:45    [5650589]     Ответить | Цитировать Сообщить модератору
 Re: Oracle сессии + Java  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
SID - это многократно используемый идентификатор.
В разные непересекающиеся промежутки времени сессии могут иметь один и тот же SID.
Попробойте что получится у вас, если использовать AUDSID
SELECT USERENV('SESSIONID') FROM DUAL;
Думаю вы увидите, что сессии разные.
12 май 08, 14:02    [5650732]     Ответить | Цитировать Сообщить модератору
 Re: Oracle сессии + Java  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
SQL*Plus
В разные непересекающиеся промежутки времени сессии могут иметь один и тот же SID.

Сессия А
|-----------------|SID=55
Сессия Б
              |-------------------|SID=58
Сессия В
                                |-----------------|SID=55
---------------------------------------------------------> время
12 май 08, 14:06    [5650758]     Ответить | Цитировать Сообщить модератору
 Re: Oracle сессии + Java  [new]
katlis
Member

Откуда: Барнаул
Сообщений: 14
to SQL Plus
можно попробовать, но все-таки дело в том, что перекрывается переменная пакета
12 май 08, 14:08    [5650771]     Ответить | Цитировать Сообщить модератору
 Re: Oracle сессии + Java  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
katlis
to SQL Plus
можно попробовать, но все-таки дело в том, что перекрывается переменная пакета
Попробуйте.
Потом дальше можно будет разбираться что и куда у вас "перекрывается"...
12 май 08, 14:12    [5650798]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить