|
|
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
Всем, привет Что-то я не пойму что я делаю не так. Есть приложение где в основном потоке создаются несколько потоков от 1 до 20. В каждом потоке при его создании я вызываю метод Код: java 1. 2. 3. Как я понимаю таким образом я открываю подключение к БД. Дальше я создаю несколько statement и тд. Все прекрасно работает до тех пор пока я в одном из потоков не вызову метод Код: java 1. После этого Connection становится закрытым во всех потоках. Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:07 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
А что, собственно, вас удивляет? Что состояние объекта может необратимо изменяться, а эти изменения будут видны во всём приложении, а не только в потоке, который произвёл изменения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:12 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Объект con создается в этом классе! как объект класса, в котором и открывается подключение! Меня удивляет почему в других потоках видны изменения сделанные в одном потеке. Я могу как-то открыть независимые подключения из каждого потока? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:17 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
Т.е., всё-таки, мысль о том, что у объекта бывает глобальное состояние - новая и оригинальная? Ну тогда примите как данность, что или вы создаёте соединения "по месту" или используете пул. Собственный или готовую реализацию. В случае пула не вы управляете жизненным циклом подключения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:22 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Ну конкретно в этом случае ново... Вопрос, тогда как правильно организовать работу. Только через пулы? и еще вопрос, если я делаю commit(), то он также как и close() выполняется во всех потоках? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:25 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
Работу можно организовывать по разному. Можно через пул, можно через персональное соединение каждому потоку. Обычно, пул подходит "почти всегда" и хорошо масштабируется. commit - меняет состояние данных в базе, а не состояние подключения к этой базе. close - наоборот, хотя, в качестве побочного эффекта, может влиять и на состояние данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:44 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Так у меня собственно и вопрос в этом, как сделать независимые подключения в каждом потоке? Нашел вот такой пример создания пула Код: 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. 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. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. Вот только не пойму в чем разница, также создаются несколько подключений с помощью метода DriverManager.getConnection ну только в одном потоке... может в этом разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:54 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
"В одном потоке" это "в одном потоке": Код: sql 1. 2. 3. 4. 5. 6. 7. Ну или более современное try-with-resource. P.S. Ещё раз: состояние подключения - глобальное. Никак не привязано к потоку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 17:03 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Еще раз объясню, мне нужно создать независимые подключения для каждого потока - это возможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 18:18 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
jedditeBasil A. Sidorov, Еще раз объясню, мне нужно создать независимые подключения для каждого потока - это возможно?Да, возможно. Используйте встроенный механизм пула потоков соответствующего драйвера (если он есть). При использовании пула потоков (да и не только, а в многопоточных приложениях в особенности) общей рекомендацией является следующее: открывать соединение непосредственно перед обращением к БД, и закрывать сразу после него, освобождая тем самым ресурсы как клиента, так и сервера, т.е. не держать соединения открытыми слишком долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 05:48 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
jeddite, Используйте интерфейс javax.sql.DataSource и какую-нибудь opensource реализацию для него - BoneCP, Apache Commons DBCP, C3P0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 09:03 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
Alex KuznetsovДа, возможно. Используйте встроенный механизм пула потоков соответствующего драйвера (если он есть). Плохой совет в большинстве случаев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 09:03 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAlex KuznetsovДа, возможно. Используйте встроенный механизм пула потоков соответствующего драйвера (если он есть). Плохой совет в большинстве случаев.Коллега, обоснуйте свою точку зрения, пожалуйста. Дабы потомкам было понимание... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 09:44 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
jedditeЕще раз объясню, мне нужно создать независимые подключения для каждого потока - это возможно?Для каждого потока вызовите DriverManager.getConnection(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 09:50 |
|
||
|
Независимые подключения к бд MSSQL из разных потоков
|
|||
|---|---|---|---|
|
#18+
Alex KuznetsovКоллега, обоснуйте свою точку зрения, пожалуйста. Дабы потомкам было понимание... Внутри JDBC драйвера, обычно, нет нормального полноценного пула. Например в драйвере PostgreSQL в JavaDoc пула написано что не стоит его использовать. И документации к драйверу SQL Server сказано http://msdn.microsoft.com/en-us/library/ms378484(v=sql.110).aspx Что DataSource там нужен только для интеграции с пулом JEE контейнера. А в JTDS пула нет совсем http://jtds.sourceforge.net/features.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 09:55 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38827390&tid=2126119]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 388ms |

| 0 / 0 |
