|
|
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Есть микроприложение написанное на play-1.4.3 и работающее под tomcat-ом Все, что делает - это принимает пост-запрос и отправляет его в процедуру БД (oracle) Все работает, но есть одна проблема: Если при старте приложения БД еще не работает(а оракл запускается всяко дольше), то томкэт пишет Error listenerStart и приложение больше не подымается. Если БД перезапустить во время работы то приложение также перестанет работать, пока его не перезапустишь. Есть ли возможность сделать что-то типа lazy-коннекта и reconnect к БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 09:37 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Migelle, Воткните пул соединений с БД. И настройте в нем валидацию. Пул будет пересоздовать подключения. Покажите код работы с базой. Play это ведь Web фреймверк. Какое он вообще имеет отношение к вопрос? Или там ORM встроен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 09:41 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
MigelleЕсть ли возможность сделать что-то типа lazy-коннекта и reconnect к БД? странно админские проблемы тащить в код приложения. У меня тоже на сайте оракл дольше стартует, но: - перегружаю хостинг я раз в 2 года - оракл каждый час не перегружают - операционка сначала грузит оракл а потом томкат MigelleЕсть ли возможность сделать что-то типа lazy-коннекта и reconnect к БД? можно. Но опять таки юзверь ждать часики или сообщение будет? Или ему экран затемнить с мессагой Ждите? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 09:57 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Petro123- операционка сначала грузит оракл а потом томкат У меня это разные машины. Petro123Но опять таки юзверь ждать часики или сообщение будет? Там нет юзверей вообще. Там железяки общаются, они подождут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 14:12 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Migelle, программист? Покажи код где у тебя ошибка. Т.к. при синхронном POST ответа та машина не дождётся и все сообщения потеряются. Слишком много вариантов решения. Migelle. Там железяки общаются, они подождут. каким образом железяка ждёт и накапливает свои желания? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 14:19 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Migelle, делай оракл доступным 24х7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 14:20 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВоткните пул соединений с БД. И настройте в нем валидацию. Пул настроен, но где там настроить валидацию? Ничего подобного в доке не нашел. BlazkowiczПокажите код работы с базой. Вот конфигурация из application.conf Код: java 1. 2. 3. 4. 5. 6. 7. 8. Вызов происходит так Код: java 1. 2. 3. P.S. Проблема в том, что ява для меня почти темный лес, но приходится подправлять чужое приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 14:23 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Migelle, то что 5 минут старта оракле и потеряются за это время записи от POST имеет значение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 14:26 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
MigelleПроблема в том, что ява для меня почти темный лес фигово. Вот эти 3 строки должны быть многократно выполнянемыми даже после райзе в try Код: java 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 14:36 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Petro123Migelle, то что 5 минут старта оракле и потеряются за это время записи от POST имеет значение? Проблема в том, что если в момент старта нет соединения с ораклом, приложение вообще не загружается Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 14:41 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
MigelleПроблема в том, что если в момент старта нет соединения с ораклом, приложение вообще не загружается я этот FW не знаю, но в общем случае надо вырубать код, пока не найдёшь строки инициализации коннекта к БД. Приложение будет грузится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 14:44 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Petro123Вот эти 3 строки должны быть многократно выполнянемыми даже после райзе в try Пересоединения не происходит вообще, сколько бы туда не стучалось запросов. Только перезапуск томката/приложения решает проблему. Я, конечно, поставлю какой-нибудь вотчдог, чтоб перегружал томкат, но некрасиво это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 14:52 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Petro123но в общем случае надо вырубать код, пока не найдёшь строки инициализации коннекта к БД. Там нечего вырубать. Все, что относится к коннекции БД я уже описал. Вся коннекция происходит внутри фреймворка, за пределами приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 14:54 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
MigelleP.S. Проблема в том, что ява для меня почти темный лес, но приходится подправлять чужое приложение. Ну, начинается... Найдите Java программиста, пусть посмотрит ваш код и расставить try...catch где надо и как надо. Может и правда пул не нужен. Нужно чтобы ваш модуль не падал при ошибках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 15:02 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
MigelleВся коннекция происходит внутри фреймворка, за пределами приложения А кому счас легко? Копать вплоть до своего наследника DB: http://alvinalexander.com/java/jwarehouse/play-framework-2.3/framework/src/play-jdbc/src/main/scala/play/api/db/DB.scala.shtml Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. если там нет DB.SetReconnect(true); )) Если без единой твоей строчки в приложении с вызовом фреймворк уже падает, то это баг самого FW ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 15:17 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНужно чтобы ваш модуль не падал при ошибках. Причем здесь модуль, если проблема в самом play. Приложение не загружается при старте томкэта. До вызовов моих функций дело не доходит. Соединение устанавливается внутри фреймворка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 15:33 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Petro123Если без единой твоей строчки в приложении с вызовом фреймворк уже падает, то это баг самого FW Именно... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 15:36 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
MigelleПричем здесь модуль, если проблема в самом play. Приложение не загружается при старте томкэтаПроблема не в play, а в том, что разработчик не читал документацию по жизненному циклу сервлетов и запросов к ним. Даже если нет желания реализовывать init(), всегда можно обернуть ошибку обращения к базе в 5xx коды. "Bad gateway" - то, что доктор прописал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 15:50 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Migelle, Прежде чем винить фреймверк, давайте посмотрим на полный stacktraсe а не его обрубок. Eсли там только playframework, то увидим куда вклинится. Вообще народ пишет что при наличии @Entity он всегда ломится в базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 16:05 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Migelle, Там внутри c3p0 connection pool. Можно попробовать поиграться с параметрами, которые он принимает из application.conf см тут и тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 16:30 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
dimonz80Migelle, Там внутри c3p0 connection pool. Можно попробовать поиграться с параметрами, которые он принимает из application.conf см тут и тут Хотя, судя по всему, не поможет. Пили свою инициализацию коннекшн пула. Пример в первой ссылке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 16:41 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
dimonz80Хотя, судя по всему, не поможет. Пили свою инициализацию коннекшн пула. Пример в первой ссылке Почему не поможет? Вроде то что нужно. Залочит все потоки, пока Оракл не подымется. Разве нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 17:31 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Если хост/сервис в дауне, то будет "connection timeout" на уровне IP-стека. Любое необработанное исключение фатально при развёртывании контекста и крайне нежелательно при обработке запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 17:58 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovЕсли хост/сервис в дауне, то будет "connection timeout" на уровне IP-стека. Любое необработанное исключение фатально при развёртывании контекста и крайне нежелательно при обработке запроса. Это пул лезет в БД при первой инициализации? Разве это правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 18:09 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Petro123Это пул лезет в БД при первой инициализации? Разве это правильно? Почему ты решил что пул? Нам пока тут стека еще не предъявили. В БД лезет playframework скорее всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 18:12 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Неправильно, конечно, но простейший способ наступить на грабли - сделать "что-нибудь" в статическом блоке. Код статического блока отработает в процессе загрузки класса, которая обязательно будет при развёртывании контекста и, если "что-нибудь" кинет исключение - контейнер напишет то, с чего началась ветка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 18:14 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Blazkowiczdimonz80Хотя, судя по всему, не поможет. Пили свою инициализацию коннекшн пула. Пример в первой ссылке Почему не поможет? Вроде то что нужно. Залочит все потоки, пока Оракл не подымется. Разве нет? Play сам по себе не нуждается в сервлет-контейнере и сам обеспечивает взаимодействие с HTTP при помощи jBoss Netty. У плея есть понятие "приложения" то есть т.е. некоторый контекст, через который обеспечивается основной функционал. Для приложения есть механизм плагинов, обеспечивающих доп функционал. Плагин реализует интерфейс PlayPlugin, в том числе и функцию onApplicationStart, которая выполняется при старте пириложения. Взаимодействие с БД реадизовано через плагин ( см тут DBPlugin При старте приложения выполняется DBPlugin.onApplicationStart() который дергает DB.setConfigurations() который дергает DBConfig.configure() в котором то и происходит попытка зацепиться за БД и инициализация пула соединений Приложение опционально может быть запаковано в WAR и размещено в сервлет-контейнере (как у автора). Тогда все описанное выше безобразие происходит при инициализации сервлета Под спойлером DBConfig.configure() - виновник торжества. Пытается прицепиться дважды стачало просто через Connection, потом черер пул. Код: 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. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. Решить проблему можно 3 способами: сложным, простым и очень простым. Сложный: пересобрать свой собственный Play с нужными правками и с ним пересобрать WAR Простой: выкинуть play.db.DB и запилить ru.migelle.DB с инициализацией пула как вам надо (как примерно сделать есть под спойлером) + добавить ленивость. И зарефакторить play.db.DB -> ru.migelle.DB Очень простой: уже советовали изменить приоритет/зависимости загрузки сервисов. что там у вас: init.d, systemd, windows, что-то еще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 06:48 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
dimonz80Простой: выкинуть play.db.DB и запилить ru.migelle.DB с инициализацией пула как вам надо (как примерно сделать есть под спойлером) + добавить ленивость. И зарефакторить play.db.DB -> ru.migelle.DB Спасибо. Стало немного понятно куда копать. Буду пробовать. dimonz80Очень простой: уже советовали изменить приоритет/зависимости загрузки сервисов. что там у вас: init.d, systemd, windows, что-то еще? Это не подходит, т.к. томкэт с ораклом живут на разных машинах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 07:27 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
dimonz80Простой: выкинуть play.db.DB ещё проще - выкинусть весь фреймворк. Который лезет в базу без единой строчки кода по вызову. А потом при неудавшейся попытке не повторяет попытку инициализации. Хотя в его пуле вроде бы эта возможность есть. Если уж разрабы решили сделать AutoConnect, то надо было сделать это свойство для новичков возле инициализации драйвера. Чтобы его можно было сменить. И третье, обеспечить возможность работать без пула. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 09:53 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Petro123dimonz80Простой: выкинуть play.db.DB ещё проще - выкинусть весь фреймворк. Который лезет в базу без единой строчки кода по вызову convention over configuration. Использовать встроенные примочки для БД никто не заставляет. Хошь, делай свой пул. Делов то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 10:06 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
dimonz80Petro123пропущено... ещё проще - выкинусть весь фреймворк. Который лезет в базу без единой строчки кода по вызову convention over configuration. Использовать встроенные примочки для БД никто не заставляет. Хошь, делай свой пул . Делов то. Оценивать что данный фреймворк по данной фиче - Г., мне тоже никто не мешает. Ешо позиционировали как Супер фреймворк для новичков. ... Ты не ответил. Почему он валится при отсутствии коннекта и нужно перегружать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 10:11 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
dimonz80convention over configuration зато умные слова мы писать умеем. Удачи аффтару! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 10:13 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Petro123dimonz80пропущено... convention over configuration. Использовать встроенные примочки для БД никто не заставляет. Хошь, делай свой пул . Делов то. Оценивать что данный фреймворк по данной фиче - Г., мне тоже никто не мешает. Ешо позиционировали как Супер фреймворк для новичков. ... Ты не ответил. Почему он валится при отсутствии коннекта и нужно перегружать? Валится при старте вот поэтому валится когда недоступен только оракл вот тоэтому Код: java 1. 2. можно в application.conf прописать db.default.pool.testConnectionOnCheckout=false. Но проблемы полностью не решит, тк есть еще случай когда ребутается и оракл и томкат и томкат поднимается быстрее оракла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 11:26 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
авторможно в application.conf прописать db.default.pool.testConnectionOnCheckout=false. Затупил! Надо так Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 11:28 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
dimonz80Но проблемы полностью не решит, тк есть еще случай когда ребутается и оракл и томкат и томкат поднимается быстрее оракла. 2 вопроса: - У меня выше сайт на JNDI в GlassFish. Если оракл стартует позже АппСервер....или выпал из сети на пол часа, а потом появился. То нужно ли мне будет перегружать Веб приложение? (я позже протестирую) - Тот же самый вопрос при использовании банального JSP+jdbc .... Тот случай выше что вы привели - СТАНДАРТНЫЙ случай для веб приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 11:33 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Petro123dimonz80Но проблемы полностью не решит, тк есть еще случай когда ребутается и оракл и томкат и томкат поднимается быстрее оракла. 2 вопроса: - У меня выше сайт на JNDI в GlassFish. Если оракл стартует позже АппСервер....или выпал из сети на пол часа, а потом появился. То нужно ли мне будет перегружать Веб приложение? (я позже протестирую) - Тот же самый вопрос при использовании банального JSP+jdbc .... Тот случай выше что вы привели - СТАНДАРТНЫЙ случай для веб приложений. Скорее всего нет. Поток свалится с эксепшном, а сервер приложений будет жить спокойно дальше. Чего доказать-то пытаешься? Что древняя версия Play не очень? Ну Ок. Убелил. Я разбирал конкретный случай для конкретной версии конкретного фреймворка со ссылкой на исходники, из которой вроде как понятно, почему при старте валится приложение если нет соединения с БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 11:44 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
dimonz80Скорее всего нет. Поток свалится с эксепшном, а сервер приложений будет жить спокойно дальше. ОК. Без Play работает всё отлично. dimonz80Чего доказать-то пытаешься? Что древняя версия Play не очень? Ну Ок. Убелил. Работа программиста такая. Программа должна работать как себе представляет программист. Чтобы тем на 2 страницы не было. Ничего личного) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 11:50 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Petro123dimonz80Скорее всего нет. Поток свалится с эксепшном, а сервер приложений будет жить спокойно дальше. ОК. Без Play работает всё отлично. dimonz80Чего доказать-то пытаешься? Что древняя версия Play не очень? Ну Ок. Убелил. Работа программиста такая. Программа должна работать как себе представляет программист. Чтобы тем на 2 страницы не было. Ничего личного) Пытался помочь, не выходя за рамки вводных данных. Работаем с тем, что есть, как говорится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 12:00 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
dimonz80, а в последней версии там как с этим? Не в курсе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 12:10 |
|
||
|
Play 1.4 и реконнект к БД
|
|||
|---|---|---|---|
|
#18+
Petro123dimonz80, а в последней версии там как с этим? Не в курсе? При старте тоже отваливается если БД недоступна))) Если БД пропадает после старта, то ничего страшного. Ругается ексепшнами пока не переконнектится. Собственный пул делается в пару строк. Для доп базы на Pervasive SQL, ктоторая переодически бывает в отключке сделал вот так ( на скале правда) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Используется так же как и обычный play.api.db.DB Код: java 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 12:26 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2123661]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
87ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 498ms |

| 0 / 0 |
