| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Tomcat "держит" файл базы данных |
| Автор: elvis79 6.8.2011, 13:15 |
| Привет всем! Изучаю java на примере http://forum.vingrad.ru/forum/topic-124877.html. Все ок, паралельно дошел до 4-й жирной черты. Но заметил одну неприятную, особенность. Что-то "держит" файл баззы данных. Возможно я не понимаю механизм работы сервлетов в java :( 1. Настройки соединения persistence.xml считываются только при первом обращении на http://localhost. Если их изменить, обновить страницу, или закрыть и открыть браузер - ничего не меняется. Помогает только перезапуск tomcat 2. Если зайти на страницу, которая вытягивает некоторые данные из БД, а потом перезапустить сервер БД, то при обновлении возникает ошибка 3. Ну и физически изменить (удалить) файл БД нельзя, если хотя-бы раз выполнялся сервлет. Отпускает все тот-же перезапуск tomcat Такое ощущение, что при закрытии браузера, сервлет еще где-то живет и держит соеединение и настройки, а при повторном запуске работает как синглтон - не считывает настройки по-новому. Подскажите, в чем проблема, может я что-то не так делаю, ну и можно линки на литературу для понимания механизмов. П.С.: Попробую сделать маленький тестовый примерчик, чтоб показать Добавлено через 10 минут и 9 секунд Упс, наверное дело в самой логике программы - синглтона Infinity - он не убивается в конце, висит где-то, и при повторном запуске держит свои собственные настройки старыми. |
| Автор: Nofate 6.8.2011, 13:38 |
| Представьте, что экземпляр класса, организующего связь с БД, создается при старте приложения и существует до завершения работы. Тогда становится понятно, что: 1. Достаточно перезапускать само приложние, а не весь томкат. 2. Ошибка возникает из-за того, что соединение с БД потеряно и никто не просил его возобновлять. 3. Разумеется, так как с базой данных установлено соединение все время, а не только в момент вызова сервлета. |
| Автор: Nofate 6.8.2011, 14:19 |
| "Перезапускать приложение" значит именно перезапустить приложение на сервере. В отличие от например PHP жизненный цикл web-приложения не ограничен обработкой запроса к сервлету. Вам стоит почитать как работает Tomcat. В общем и целом упрощенно процесс примерно такой: 1. Вы разворачиваете (deploy) приложение на сервере Tomcat. 2. Tomcat стартует (start) приложение и инициализирует согласно описания web.xml. Загружаются прочие конфигурационные файлы, устанавливается соединение с БД (!). 3. Tomcat обрабатывает запросы от клиентов к вашему приложению и перенаправляет на ваши сервлеты. 4. Т.к. приложение к этому моменту запущено и работает ваши java-объекты могут сохранять состояние между запросами. 5. Вы можете остановить (stop), перезапустить (restart) или свернуть (undeploy) приложение на сервере приложений. Так или иначе при завершении работы приложения освобождаются ресурсы, закрываются соединения с БД и открытые файлы. Подробности можно найти в руководстве по Tomcat и в спецификации Servlet API |
| Автор: elvis79 6.8.2011, 14:24 |
| Спасибо, рано или поздно я б к этому дошел, но ели написать, то понимаешь быстрее)) Пошел гуглить про Томкат! Однако трудно после php |
| Автор: Nofate 6.8.2011, 14:27 |
| После PHP главное осознать, что вы имеете дело не с набором отдельных страничек, а с цельным программным продуктом. |