![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
elvis79 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 13.11.2008 Где: Украина, Ивано-Фр анковск Репутация: нет Всего: нет |
Привет всем! Изучаю java на примере JSP - с чего начать. Все ок, паралельно дошел до 4-й жирной черты. Но заметил одну неприятную, особенность. Что-то "держит" файл баззы данных. Возможно я не понимаю механизм работы сервлетов в java :(
1. Настройки соединения persistence.xml считываются только при первом обращении на http://localhost. Если их изменить, обновить страницу, или закрыть и открыть браузер - ничего не меняется. Помогает только перезапуск tomcat 2. Если зайти на страницу, которая вытягивает некоторые данные из БД, а потом перезапустить сервер БД, то при обновлении возникает ошибка 3. Ну и физически изменить (удалить) файл БД нельзя, если хотя-бы раз выполнялся сервлет. Отпускает все тот-же перезапуск tomcat Такое ощущение, что при закрытии браузера, сервлет еще где-то живет и держит соеединение и настройки, а при повторном запуске работает как синглтон - не считывает настройки по-новому. Подскажите, в чем проблема, может я что-то не так делаю, ну и можно линки на литературу для понимания механизмов. П.С.: Попробую сделать маленький тестовый примерчик, чтоб показать Добавлено через 10 минут и 9 секунд Упс, наверное дело в самой логике программы - синглтона Infinity - он не убивается в конце, висит где-то, и при повторном запуске держит свои собственные настройки старыми. |
|||
|
||||
Nofate |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 13.10.2008 Репутация: 4 Всего: 8 |
Представьте, что экземпляр класса, организующего связь с БД, создается при старте приложения и существует до завершения работы. Тогда становится понятно, что:
1. Достаточно перезапускать само приложние, а не весь томкат. 2. Ошибка возникает из-за того, что соединение с БД потеряно и никто не просил его возобновлять. 3. Разумеется, так как с базой данных установлено соединение все время, а не только в момент вызова сервлета. -------------------- The future is not set, there is no fate but what we make for ourselves. Нофейтово пространство и смежные области |
|||
|
||||
elvis79 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 13.11.2008 Где: Украина, Ивано-Фр анковск Репутация: нет Всего: нет |
Да так и есть. Проверял, и даже более того - файл настроек в котором такие значения как, например название сайта, версия и т.д., тоже не перечитывается. Тогда вопрос когда приложение убивается?
По вашим ответам: Не помогает, и что вы имеете в виду "перезапускать приложение" - обновить страницу, переоткрыть браузер? Тесты в самой java работают отлично, а вот как живет сервлет я не понимаю. Когда он умирает и когда рождается
Тут тоже должно помочь "перезапустить приложение"
Как остановить, убить сервлет - только перезапуск томкат? Или менять логику программы, чтоб соединение устанавливалось при каждом обращении (на каждой странице по-новому) -- не лучшее решение, так как будет очень медленно работать |
||||
|
|||||
Nofate |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 13.10.2008 Репутация: 4 Всего: 8 |
"Перезапускать приложение" значит именно перезапустить приложение на сервере. В отличие от например PHP жизненный цикл web-приложения не ограничен обработкой запроса к сервлету.
Вам стоит почитать как работает Tomcat. В общем и целом упрощенно процесс примерно такой: 1. Вы разворачиваете (deploy) приложение на сервере Tomcat. 2. Tomcat стартует (start) приложение и инициализирует согласно описания web.xml. Загружаются прочие конфигурационные файлы, устанавливается соединение с БД (!). 3. Tomcat обрабатывает запросы от клиентов к вашему приложению и перенаправляет на ваши сервлеты. 4. Т.к. приложение к этому моменту запущено и работает ваши java-объекты могут сохранять состояние между запросами. 5. Вы можете остановить (stop), перезапустить (restart) или свернуть (undeploy) приложение на сервере приложений. Так или иначе при завершении работы приложения освобождаются ресурсы, закрываются соединения с БД и открытые файлы. Подробности можно найти в руководстве по Tomcat и в спецификации Servlet API -------------------- The future is not set, there is no fate but what we make for ourselves. Нофейтово пространство и смежные области |
|||
|
||||
elvis79 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 13.11.2008 Где: Украина, Ивано-Фр анковск Репутация: нет Всего: нет |
Спасибо, рано или поздно я б к этому дошел, но ели написать, то понимаешь быстрее)) Пошел гуглить про Томкат! Однако трудно после php
Это сообщение отредактировал(а) elvis79 - 6.8.2011, 14:27 |
|||
|
||||
Nofate |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 13.10.2008 Репутация: 4 Всего: 8 |
После PHP главное осознать, что вы имеете дело не с набором отдельных страничек, а с цельным программным продуктом.
-------------------- The future is not set, there is no fate but what we make for ourselves. Нофейтово пространство и смежные области |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |