powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / И все-таки... Таймайты в JDBC ?????
16 сообщений из 16, страница 1 из 1
И все-таки... Таймайты в JDBC ?????
    #32910427
J--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
J--
Гость
Hi,All!

Вторая попытка :-)

DriverManager.getConnection() - как на этот метод установить таймаут,
есть какие-то стандартнве решения?
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32910459
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запусти в отдельном потоке, вызови join(таймаут), убей thread.
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32910638
J--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
J--
Гость
это было первое, что я сделал. Низя :-)
DriverManager.getConnection() - где-то там синхронайзед
и соответственно прежде чем убиться - ждет!
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32910757
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и какие проблемы?
пусть себе висит, всё равно блокирован и ресурсы не кушает.
если всё таки вытащит коннекшин - просто его закрыть.

Что-нибудь вроде
Код:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Connection c  = new Thread(){
   Connection c;
   void run(){
        try { 
            c = DriverManager.getConnection();
       } finally { 
             if (isInterrupted() && c!=null ){
                 c.close();
             }
       }
   }
    
   Connection getConnection(int timeOut){
              start();
              join(timeOut); 
              Connection c = this.c;
              if (c==null) interrupt();
              return c;
   }
}.getConnection(10000);
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32910760
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Connection c  =  new  Thread(){
   Connection c;
    void  run(){
         try  { 
            c = DriverManager.getConnection();
       }  finally  { 
              if  (isInterrupted() && c!= null  ){
                 c.close();
             }
       }
   }
    
   Connection getConnection( int  timeOut){
              start();
              join(timeOut); 
              Connection c =  this .c;
               if  (c== null ) interrupt();
               return  c;
   }
}.getConnection( 10000 );
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32910763
Andrey Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я немного не понял, таймаут нужен именно на работу метода но нафига? Это более походит просто на попытку логина, если так то для этого существует static void java.sql.DriverManager.setLoginTimeout(int seconds)
Если же не для этого, а для каких то других целей, то join(таймаут) потом Connection.close() и после этого убийство потока. Вроде бы должно помочь.
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32910768
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используя reflect внаглую получить доступ к сокету и поставить ему что надо

--
Lacrima Mosa Est
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32910779
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey SpirinЯ немного не понял, таймаут нужен именно на работу метода но нафига? Это более походит просто на попытку логина, если так то для этого существует static void java.sql.DriverManager.setLoginTimeout(int seconds)
Если же не для этого, а для каких то других целей, то join(таймаут) потом Connection.close() и после этого убийство потока. Вроде бы должно помочь.

Поищи по форумы первый топик на эту тему :)
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32910799
J--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
J--
Гость
Спасибо тем, кто откликнулся!

2Andrey Spirin
java.sql.DriverManager.setLoginTimeout(int seconds) к сожалению не работает :-( Я так понял (как мне в т.ч. и здесь говорили) что это зависит от вендора.
Мне не повезло с вендором :-)
А про убийство потока писал - оно ждет все равно getConnection(), описание этой проблемы я видел и на америкосовских форумах, вроде они грили что не обойти енто!

2NotGonnaGetUs для меня критично что поток висит. Поэтому требуется короткий таймаут. Сначала я пошел по методу о котором ты постил первый раз - создание контролиирующего потока-"киллера", но, как уже замечено - getConnection все равно ждет. Приложение практически Real-Time (телефония), поэтому ждать нельзя, если сервер СУБД недоступен - надо сказать, что ашипка и отвалиться мгновенно.

2А.Грасоff™ способ по-моему не совсем для Java.
В каком-нить BSD sockets действительно можно было бы, но в Java нет setsockopt() !!! :-)
А если Вы знаете методы -то делитесь же скорее! Это очень важно думаю.
Тут тогда можно просто выделить подзадачу - как у Socket.connect() установить таймаут.
Есессна, как через reflect до сокета дойти, я тоже не понимаю, там же все приватное небось, разве что часть библиотеки перекомпилировать. Да и то думаю - драйвер надо тада трогать а у него сорцов нету!
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32910829
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
J--
2NotGonnaGetUs для меня критично что поток висит. Поэтому требуется короткий таймаут. Сначала я пошел по методу о котором ты постил первый раз - создание контролиирующего потока-"киллера", но, как уже замечено - getConnection все равно ждет. Приложение практически Real-Time (телефония), поэтому ждать нельзя, если сервер СУБД недоступен - надо сказать, что ашипка и отвалиться мгновенно.

Если мило висящий thread проблема, лечение только одно stop() вместо interrupt() %)
Не идеально, но действенно.
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32911082
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
грубовато конечно, но видимо так, кувалдой, и придется :)
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32911439
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
J--2А.Грасоff™ способ по-моему не совсем для Java.
В каком-нить BSD sockets действительно можно было бы, но в Java нет setsockopt() !!! :-)
А если Вы знаете методы -то делитесь же скорее! Это очень важно думаю.
Тут тогда можно просто выделить подзадачу - как у Socket.connect() установить таймаут.
Есессна, как через reflect до сокета дойти, я тоже не понимаю, там же все приватное небось, разве что часть библиотеки перекомпилировать. Да и то думаю - драйвер надо тада трогать а у него сорцов нету!

ниче не слышал о Socket.setTimeOut()?
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32912415
J--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
J--
Гость
век живу, век учусь :))
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32912421
J--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
J--
Гость
нее, это в плане SO_TIMEOUT - эти вызовы к вводу/выводу относятся то есть када сокет уже открыт и мы что-то пишем или читаем - а там таймаут.
В connect() правда есть таймаут вот он наверное нужен.

Осталось тока JDBC хакнуть :-)
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32913201
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
J--нее, это в плане SO_TIMEOUT - эти вызовы к вводу/выводу относятся то есть када сокет уже открыт и мы что-то пишем или читаем - а там таймаут.
В connect() правда есть таймаут вот он наверное нужен.

Осталось тока JDBC хакнуть :-)

А почему бы не изменить архитектуру всего этого дела?
Сделать thread, контролирующий доступ к db.
Если коннекта нет, то игнорировать запросы getConnection(), если есть - возвращать. Если getConnection действительно дёргается очень часто, то такой контроллер на производительности практически не скажется...
...
Рейтинг: 0 / 0
И все-таки... Таймайты в JDBC ?????
    #32913307
J--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
J--
Гость
хмм.. по такому пути я тоже идти пытался, но проклятый таймаут все равно вылезал: скажем, когда такая контролирующая нитть знает с прошлой попытки, что ТОГДА коннекта не было - в этот раз она должна попробовать соединиться, чтобы проверитьь - вдрег появился. Тут ей и будет таймаут :-)
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / И все-таки... Таймайты в JDBC ?????
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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