|
|
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
Hi,All! Вторая попытка :-) DriverManager.getConnection() - как на этот метод установить таймаут, есть какие-то стандартнве решения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 15:54 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
запусти в отдельном потоке, вызови join(таймаут), убей thread. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 16:05 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
это было первое, что я сделал. Низя :-) DriverManager.getConnection() - где-то там синхронайзед и соответственно прежде чем убиться - ждет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 17:01 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
ну и какие проблемы? пусть себе висит, всё равно блокирован и ресурсы не кушает. если всё таки вытащит коннекшин - просто его закрыть. Что-нибудь вроде Код: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 17:48 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 17:49 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
Я немного не понял, таймаут нужен именно на работу метода но нафига? Это более походит просто на попытку логина, если так то для этого существует static void java.sql.DriverManager.setLoginTimeout(int seconds) Если же не для этого, а для каких то других целей, то join(таймаут) потом Connection.close() и после этого убийство потока. Вроде бы должно помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 17:49 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
используя reflect внаглую получить доступ к сокету и поставить ему что надо -- Lacrima Mosa Est ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 17:52 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
Andrey SpirinЯ немного не понял, таймаут нужен именно на работу метода но нафига? Это более походит просто на попытку логина, если так то для этого существует static void java.sql.DriverManager.setLoginTimeout(int seconds) Если же не для этого, а для каких то других целей, то join(таймаут) потом Connection.close() и после этого убийство потока. Вроде бы должно помочь. Поищи по форумы первый топик на эту тему :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 17:56 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
Спасибо тем, кто откликнулся! 2Andrey Spirin java.sql.DriverManager.setLoginTimeout(int seconds) к сожалению не работает :-( Я так понял (как мне в т.ч. и здесь говорили) что это зависит от вендора. Мне не повезло с вендором :-) А про убийство потока писал - оно ждет все равно getConnection(), описание этой проблемы я видел и на америкосовских форумах, вроде они грили что не обойти енто! 2NotGonnaGetUs для меня критично что поток висит. Поэтому требуется короткий таймаут. Сначала я пошел по методу о котором ты постил первый раз - создание контролиирующего потока-"киллера", но, как уже замечено - getConnection все равно ждет. Приложение практически Real-Time (телефония), поэтому ждать нельзя, если сервер СУБД недоступен - надо сказать, что ашипка и отвалиться мгновенно. 2А.Грасоff™ способ по-моему не совсем для Java. В каком-нить BSD sockets действительно можно было бы, но в Java нет setsockopt() !!! :-) А если Вы знаете методы -то делитесь же скорее! Это очень важно думаю. Тут тогда можно просто выделить подзадачу - как у Socket.connect() установить таймаут. Есессна, как через reflect до сокета дойти, я тоже не понимаю, там же все приватное небось, разве что часть библиотеки перекомпилировать. Да и то думаю - драйвер надо тада трогать а у него сорцов нету! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 18:05 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
J-- 2NotGonnaGetUs для меня критично что поток висит. Поэтому требуется короткий таймаут. Сначала я пошел по методу о котором ты постил первый раз - создание контролиирующего потока-"киллера", но, как уже замечено - getConnection все равно ждет. Приложение практически Real-Time (телефония), поэтому ждать нельзя, если сервер СУБД недоступен - надо сказать, что ашипка и отвалиться мгновенно. Если мило висящий thread проблема, лечение только одно stop() вместо interrupt() %) Не идеально, но действенно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 18:22 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
грубовато конечно, но видимо так, кувалдой, и придется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 20:46 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
J--2А.Грасоff™ способ по-моему не совсем для Java. В каком-нить BSD sockets действительно можно было бы, но в Java нет setsockopt() !!! :-) А если Вы знаете методы -то делитесь же скорее! Это очень важно думаю. Тут тогда можно просто выделить подзадачу - как у Socket.connect() установить таймаут. Есессна, как через reflect до сокета дойти, я тоже не понимаю, там же все приватное небось, разве что часть библиотеки перекомпилировать. Да и то думаю - драйвер надо тада трогать а у него сорцов нету! ниче не слышал о Socket.setTimeOut()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 09:07 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
век живу, век учусь :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 18:19 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
нее, это в плане SO_TIMEOUT - эти вызовы к вводу/выводу относятся то есть када сокет уже открыт и мы что-то пишем или читаем - а там таймаут. В connect() правда есть таймаут вот он наверное нужен. Осталось тока JDBC хакнуть :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 18:24 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
J--нее, это в плане SO_TIMEOUT - эти вызовы к вводу/выводу относятся то есть када сокет уже открыт и мы что-то пишем или читаем - а там таймаут. В connect() правда есть таймаут вот он наверное нужен. Осталось тока JDBC хакнуть :-) А почему бы не изменить архитектуру всего этого дела? Сделать thread, контролирующий доступ к db. Если коннекта нет, то игнорировать запросы getConnection(), если есть - возвращать. Если getConnection действительно дёргается очень часто, то такой контроллер на производительности практически не скажется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2005, 11:05 |
|
||
|
И все-таки... Таймайты в JDBC ?????
|
|||
|---|---|---|---|
|
#18+
хмм.. по такому пути я тоже идти пытался, но проклятый таймаут все равно вылезал: скажем, когда такая контролирующая нитть знает с прошлой попытки, что ТОГДА коннекта не было - в этот раз она должна попробовать соединиться, чтобы проверитьь - вдрег появился. Тут ей и будет таймаут :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2005, 15:26 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=32910799&tid=2152961]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 366ms |

| 0 / 0 |
