Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Tomcat "держит" файл базы данных 
V
    Опции темы
elvis79
Дата 6.8.2011, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.11.2008
Где: Украина, Ивано-Фр анковск

Репутация: нет
Всего: нет



Привет всем! Изучаю java на примере JSP - с чего начать. Все ок, паралельно дошел до 4-й жирной черты. Но заметил одну неприятную, особенность. Что-то "держит" файл баззы данных. Возможно я не понимаю механизм работы сервлетов в java :(

1. Настройки соединения persistence.xml считываются только при первом обращении на http://localhost. Если их изменить, обновить страницу, или закрыть и открыть браузер - ничего не меняется. Помогает только перезапуск tomcat

2. Если зайти на страницу, которая вытягивает некоторые данные из БД, а потом перезапустить сервер БД, то при обновлении возникает ошибка 

3. Ну и физически изменить (удалить) файл БД нельзя, если хотя-бы раз выполнялся сервлет. Отпускает все тот-же перезапуск tomcat

Такое ощущение, что при закрытии браузера, сервлет еще где-то живет и держит соеединение и настройки, а при повторном запуске работает как синглтон - не считывает настройки по-новому.

Подскажите, в чем проблема, может я что-то не так делаю, ну и можно линки на литературу для понимания механизмов.

П.С.: Попробую сделать маленький тестовый примерчик, чтоб показать

Добавлено через 10 минут и 9 секунд
Упс, наверное дело в самой логике программы - синглтона Infinity - он не убивается в конце, висит где-то, и при повторном запуске держит свои собственные настройки старыми.
PM MAIL WWW ICQ Jabber   Вверх
Nofate
Дата 6.8.2011, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: 4
Всего: 8



Представьте, что экземпляр класса, организующего связь с БД, создается при старте приложения и существует до завершения работы. Тогда становится понятно, что:
1. Достаточно перезапускать само приложние, а не весь томкат.
2. Ошибка возникает из-за того, что соединение с БД потеряно и никто не просил его возобновлять.
3. Разумеется, так как с базой данных установлено соединение все время, а не только в момент вызова сервлета.




--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
elvis79
Дата 6.8.2011, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.11.2008
Где: Украина, Ивано-Фр анковск

Репутация: нет
Всего: нет



Да так и есть. Проверял, и даже более того - файл настроек в котором такие значения как, например название сайта, версия и т.д., тоже не перечитывается. Тогда вопрос когда приложение убивается?

По вашим ответам:
Цитата(Nofate @  6.8.2011,  13:38 Найти цитируемый пост)
1. Достаточно перезапускать само приложние, а не весь томкат.

Не помогает, и что вы имеете в виду "перезапускать приложение" - обновить страницу, переоткрыть браузер? Тесты в самой java работают отлично, а вот как живет сервлет я не понимаю. Когда он умирает и когда рождается

Цитата(Nofate @  6.8.2011,  13:38 Найти цитируемый пост)
2. Ошибка возникает из-за того, что соединение с БД потеряно и никто не просил его возобновлять.

Тут тоже должно помочь "перезапустить приложение"

Цитата(Nofate @  6.8.2011,  13:38 Найти цитируемый пост)
3. Разумеется, так как с базой данных установлено соединение все время, а не только в момент вызова сервлета.

Как остановить, убить сервлет - только перезапуск томкат? Или менять логику программы, чтоб соединение устанавливалось при каждом обращении (на каждой странице по-новому) -- не лучшее решение, так как будет очень медленно работать

PM MAIL WWW ICQ Jabber   Вверх
Nofate
Дата 6.8.2011, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
elvis79
Дата 6.8.2011, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.11.2008
Где: Украина, Ивано-Фр анковск

Репутация: нет
Всего: нет



Спасибо, рано или поздно я б к этому дошел, но ели написать, то понимаешь быстрее)) Пошел гуглить про Томкат! Однако трудно после php

Это сообщение отредактировал(а) elvis79 - 6.8.2011, 14:27
PM MAIL WWW ICQ Jabber   Вверх
Nofate
Дата 6.8.2011, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: 4
Всего: 8



После PHP главное осознать, что вы имеете дело не с набором отдельных страничек, а с цельным программным продуктом.


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0762 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.