Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Восстановление соединения с сервером Oracle / 25 сообщений из 25, страница 1 из 1
22.03.2012, 17:45:12
    #37718469
pvasea
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
Всем привет. Вкратце проблема:
Приложение(jdbc) запрашивает исходные данные с сервера Oracle, формирует файлы-сценарии прозвонки и отправляет их по ftp на Asterisk.
Разрывы ftp восстанавливаю(благо у Apache есть библиотеки продвинутые) в автомате.
Но как быть когда с Oracle кратковременно рвётся соединение?
...
Рейтинг: 0 / 0
22.03.2012, 17:48:09
    #37718479
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
connection-pool с тестированием и пересозданием соединией. Отвалилась операция - взяли другое соединение, запустили ещё раз.
...
Рейтинг: 0 / 0
23.03.2012, 15:13:44
    #37720218
crazy_hands
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
pvaseaВсем привет. Вкратце проблема:
Приложение(jdbc) запрашивает исходные данные с сервера Oracle, формирует файлы-сценарии прозвонки и отправляет их по ftp на Asterisk.
Разрывы ftp восстанавливаю(благо у Apache есть библиотеки продвинутые) в автомате.
Но как быть когда с Oracle кратковременно рвётся соединение?

Вы используете jdbc, проверьте вот что: Вы используете универсальное java.sql.Connection или же родной oracle.jdbc.driver.OracleConnection? При использование java.sql.Connection в связке с oracle.jdbc наблюдаются глюки.
...
Рейтинг: 0 / 0
23.03.2012, 15:30:53
    #37720260
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
crazy_handsВы используете jdbc, проверьте вот что: Вы используете универсальное java.sql.Connection или же родной oracle.jdbc.driver.OracleConnection? При использование java.sql.Connection в связке с oracle.jdbc наблюдаются глюки.
Что за феерический бред? java.sql.Connection это интерфейс, который oracle.jdbc.driver.OracleConnection реализует.
...
Рейтинг: 0 / 0
23.03.2012, 15:34:13
    #37720268
crazy_hands
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
Blazkowiczcrazy_handsВы используете jdbc, проверьте вот что: Вы используете универсальное java.sql.Connection или же родной oracle.jdbc.driver.OracleConnection? При использование java.sql.Connection в связке с oracle.jdbc наблюдаются глюки.
Что за феерический бред? java.sql.Connection это интерфейс, который oracle.jdbc.driver.OracleConnection реализует.

Это не бред это опыт многолетней работы. На веблоджике 10, например, это проявляется через 2-3 дня работы приложения, лечится перезагрузкой. Когда в приложении меняешь на oracle.jdbc.driver.OracleConnection, то приложение уже работает стабильно постоянно. Также такой глюк был и у последней версии оракл аппликейшн.
...
Рейтинг: 0 / 0
23.03.2012, 15:49:53
    #37720307
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
crazy_handsЭто не бред это опыт многолетней работы.

Опыт, который достаётся одним только наблюдением без понимания?

crazy_handsНа веблоджике 10, например, это проявляется через 2-3 дня работы приложения, лечится перезагрузкой. Когда в приложении меняешь на oracle.jdbc.driver.OracleConnection, то приложение уже работает стабильно постоянно. Также такой глюк был и у последней версии оракл аппликейшн.
Ну, то есть: было не знаем что, станцевали с бубном - помогло. Теперь всем советуем.

OracleConnection реализует интерфейс java.sql.Connection. Разница может быть только в том как и откуда экзмпляры этих объектов получены. java.sql.Connection это не какой-то там "универсальный" конекшн. Это просто список методов к которым можно обратится.
...
Рейтинг: 0 / 0
23.03.2012, 17:21:39
    #37720501
pvasea
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
Вот фрагменты кода. Где посоветуете выполнять тестирование пула?
Код: java
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.
static Connection con = null;   
................
   public void updateTManager(String vFlag) throws SQLException {
        PreparedStatement stmt_UpdtTManager_p = null;
        ResultSet rsetTManager = null;
        if (con == null)
            getDBConnection();
        try {
            stmt_UpdtTManager_p = 
                    con.prepareStatement("UPDATE RC.ADO_TManager SET dfADO= ?");
            stmt_UpdtTManager_p.setString(1, vFlag); 
            stmt_UpdtTManager_p.executeUpdate(); // execute update statement for RC.ADO_TManager
        } catch (SQLException ex) {
            System.err.println("SQLException on updateTManager(): " + 
                               ex.getMessage());
        } finally {
            stmt_UpdtTManager_p.close();
        }
    } // updateTManager()   
	......................
	
 public boolean getDBConnection() {
        while (con == null) {
            try {
                // Load the Oracle JDBC driver
                op.append("Connecting DB......." + "\n");
                logger.info("Connecting DB.......");


                DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

                Properties info = new Properties();
                info.put("user", username.getText());
                info.put("password", password.getText());

                System.out.println("Connecting DB.......");
                // Connect to the database
                con = DriverManager.getConnection(url.getText().trim(), info);
 
                op.append("DB Connected." + "\n");
                System.out.println("DB Connected.");
                logger.info("DB Connected.");

            } catch (SQLException ex) {
                System.err.println("SQLException on getDBConnection(): " + 
                                   ex.getMessage());
            } finally {
                if (con == null) {
                    System.out.println("Failed connection");
                    return false;
                }
            }
        }
        return true;

    } // getDBConnection
...
Рейтинг: 0 / 0
23.03.2012, 17:32:40
    #37720521
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
pvasea,

Поле con необходимо убрать. Вместо него всегда использовать DataSource.getConnection()
В качестве DataSource использовать любой готовый пул, тот же Apache Commons DBCP. Там есть, например, параметр testOnBorrow, при каждом получении соединения, оно будет тестироваться простым запросом и, в случае ошибки, будет пересоздано.
...
Рейтинг: 0 / 0
23.03.2012, 18:35:45
    #37720611
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
On 23.03.2012 18:32, Blazkowicz wrote:

> В качестве DataSource использовать любой готовый пул, тот же Apache Commons DBCP. Там есть, например, параметр
> testOnBorrow, при каждом получении соединения, оно будет тестироваться простым запросом и, в случае ошибки, будет
> пересоздано.

Разве что по dataSource.getConnection() в DBCP будет возвращаться не OracleConnection, а другая реализация, в результате
отпадут методы, объявленные именно в OracleConnection. Но до OracleConnection в DBCP можно достучаться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.03.2012, 18:40:02
    #37720620
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
Denis Popovотпадут методы, объявленные именно в OracleConnection


Автор и сейчас ими не пользуется:
static Connection con = null;
...
Рейтинг: 0 / 0
23.03.2012, 19:17:42
    #37720683
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
On 23.03.2012 19:40, Blazkowicz wrote:

> Автор и сейчас ими не пользуется:
> static Connection con = null;

Ну автор сам написал, что это фрагменты.. а где-нибудь в коде вполне может быть вызов oracle.sql.CLOB.createTemporary(),
и аргументом у него Connection, но работает только с OracleConnection.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.03.2012, 20:19:32
    #37721517
pvasea
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
Blazkowicz,просьба пояснить физику DataSource.getConnection(). Сейчас я использую
Connection con = DriverManager.getConnection(url.getText().trim(), info);
Т.е. выбираю соединение из пула .
В чём отличие от использования DataSource.getConnection() ?
...
Рейтинг: 0 / 0
25.03.2012, 10:31:16
    #37721736
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
pvaseaConnection con = DriverManager.getConnection(url.getText().trim(), info);
Т.е. выбираю соединение из пула .

Как вы определили что это пул?
...
Рейтинг: 0 / 0
25.03.2012, 18:09:45
    #37722023
pvasea
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
Blazkowicz,забыл поставить "?". Полагал, что соединение выбирается из пула. Не буду более задавать банальных вопросов. Где можно прочесть как и откуда генерятся соединения?
...
Рейтинг: 0 / 0
25.03.2012, 22:39:11
    #37722312
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
DriverManager.getConnection создаёт физическое содинение с сервером. Пул либо берется оракловый из драйвера, либо опенсорсный - C3P0, DBCP
...
Рейтинг: 0 / 0
28.03.2012, 18:18:23
    #37728124
pvasea
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
В продолжение темы, кому-нибудь будет интересно: MiniConnectionPoolManager
...
Рейтинг: 0 / 0
28.03.2012, 18:20:45
    #37728131
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
pvaseaВ продолжение темы, кому-нибудь будет интересно: MiniConnectionPoolManager
И какая от него польза? max connection?
...
Рейтинг: 0 / 0
29.03.2012, 10:00:11
    #37728889
oneHalf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
Вообще в самом JDBC не помню с какой версии появился метод isValid для Connection, который и проверяет соединение на адекватность. В методе getDBConnection можно реализовать проверку, живое соединение или нет и переподнять если надо.
Единственная проблема - не все драйверы корректно реализуют данный метод.
...
Рейтинг: 0 / 0
29.03.2012, 10:32:49
    #37728970
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
oneHalfЕдинственная проблема - не все драйверы корректно реализуют данный метод.
конечно.
Ведь соединение может порваться в любой момент:
а) вы ничего по БЛ не делаете (смотрите на экран)
б) вы взяли коннект для сохранения объекта
в) вы в процессе сохранения
Каждый вариант нужно обрабатывать индивидуально. т.к. индивидуальная БЛ.
Т.е. нет тут сабжа - АВТОвосстановление соединения.
Это не протокол TCP с гарантированной АВТОдоставкой.
...
Рейтинг: 0 / 0
29.03.2012, 10:57:18
    #37729028
oneHalf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
Petro123конечно.
Ведь соединение может порваться в любой момент:
а) вы ничего по БЛ не делаете (смотрите на экран)
б) вы взяли коннект для сохранения объекта
в) вы в процессе сохранения
Каждый вариант нужно обрабатывать индивидуально. т.к. индивидуальная БЛ.
Т.е. нет тут сабжа - АВТОвосстановление соединения.
Это не протокол TCP с гарантированной АВТОдоставкой.

Не понял вообще ничего из вышенаписанного - БЛ видимо бизнес логика что ли, каждый вариант - это че вообще, обрабатывать индивидуально - это как. "Т.е. нет тут сабжа - АВТОвосстановление соединения." - это орг. вывод?

Ну порвалось "в любой момент" - ну обработал исключение, сделал n-ое количество попыток восстановить соединение, получилось - клёво, повторил транзакцию, не получилось - выдал сообщение о потери связи с бд.
...
Рейтинг: 0 / 0
29.03.2012, 11:07:53
    #37729054
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
Ещё раз. "Восстановление соединения" решается индивидуально в каждой ИС. Они все разные по ТЗ и задачам.
У одних бабка сидит и пялится на экран в мухосранске. У других банковские транзакции 24х7
Если не согласен, то раскажи подробнее про:
oneHalfсделал n-ое количество попыток восстановить соединение
где это написать и чему равно n
PS
в общем случае есть
Код: sql
1.
select 'Test connection'


или обёртка из функции Коннект.ТыЖивой?
...
Рейтинг: 0 / 0
29.03.2012, 11:29:48
    #37729091
oneHalf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
Что значит - "Восстановление соединения" решается индивидуально - можно пример хотя бы для двух случаев - я просто не понимаю о чем вы - о количестве попыток, таймауте или имеете ввиду просто другой алгоритм восстановления?

В любом случае для топикстартера, как мне кажется, не проблема "идивидуально" определиться и реализовать восстановление соединения по той логике, которая ему нужна, без прикручивания целого пула.

Просто пул может смешно выглядеть в случае, когда у меня 200 десктопных клиентов (двузвенка) держат по одному соединению к бд, а я чтобы решить проблему с обрывом, к каждому клиенту прикручиваю пул минимум из 2-х соединенией. Бд скажет мне спасибо.

Еще раз про реализацию isValid - она разная для разных бд, где то вообще метод не релизован.
Пример Postgre - http://postgresql.1045698.n5.nabble.com/jdbc4-isValid-int-implementation-td5115637.html , как сейчас там - не знаю.
...
Рейтинг: 0 / 0
29.03.2012, 11:43:32
    #37729115
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
oneHalfПросто пул может смешно выглядеть в случае, когда у меня 200 десктопных клиентов (двузвенка) держат по одному соединению к бд,
полностью согласен.
Вот и я иду от простого к сложному ТЗ. А не наоборот (оверхед).
В простом случае (десктоп):
Аналог IE-Web. Например, ты читаешь этот форум. Как ты определишь что соединение порвалось?
Только нажав F5.
Т.е. аффтару:
- разберись в причине "рвётся". Таймаут неверный?
- повесь в меню для пользователя "Connect \ Войти" и т.д.
- везде поставить try и внятное сообщение "Пропала связь от уборщицы со шваброй".
- анализ причины разрыва (у меня было по ORA-коду)
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
30.03.2012, 11:07:23
    #37730989
pvasea
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
Petro123, по поводу "...Это не протокол TCP с гарантированной АВТОдоставкой...." не понял до конца.
В " Oracle Net8 Configuration and Troubleshooting ", by Hugo Toledo & Jonathan Gennick O'REILLY:
"Однако, когда используются тонкие (thin) JDBC-драйверы, все смотрится совсем по другому. Тонкие драйверы были разработаны для того, чтобы функционировать без какого-либо установленного программного обеспечения Oracle. Они полностью выполнены на Java и поддерживают только TCP/IP. Для того, чтобы сделать такую разработку, Oracle был должен реализовать в Net8 необходимые функциональные возможности Java."
...
Рейтинг: 0 / 0
30.03.2012, 11:23:56
    #37731026
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление соединения с сервером Oracle
pvasea,
- я к тому, что АВТОматизация в протоколах проще, чем АВТОМАтизация таких вещей как - УправленияТранзакциями\АвтоРеконнектом\ОтложеннойЗагрузкой и т.д.
Т.е. сабж лежит близко к БЛ, и поэтому простых рецептов нет.
- по поводу, тонкого драйвера, согласен. Он нужен чтобы не ставить дополнительного ПО на клиента (Oracle клиент)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Восстановление соединения с сервером Oracle / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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