powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Томкэт: замена файлов *.class без остановки сервера
21 сообщений из 21, страница 1 из 1
Томкэт: замена файлов *.class без остановки сервера
    #32523318
Delphi_User
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос: можно ли заменять файлы *.class которые используются некоторыми JSP-страничками при РАБОТАЮЩЕМ Томкэте?
Короче, я заменяю, но все изменения вступают в силу только при рестарте Томкэта, т.е. приходится остановить его и запустить снова. Допустим файлы стилей *.css, или javascript при РАБОТАЮЩЕМ Томкэте можно заменять и все изменения работают сразу.
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32523372
ORA-XXXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме того без перезагрузки сервера можно менять файлы *.jsp
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32523420
Грасоff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Delphi_User

в тэге <context> (файл server.xml) есть атрибут reloadable. ему прописывается значение true. тогда томкэт периодичсеки проверяет подкаталоги WEB-INF/classes и WEB-INF/lib на новые версии классов/библиотек. скорость томкэта снижается при этом. т.е. на рабочем приложении не рекомендую.

.: 6.000.000 ways to die :.
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32523572
Delphi_User
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот добавил reloadable="true"
в server.xml

<!-- Tomcat Root Context -->
<!--
<Context path="" docBase="ROOT" debug="0" reloadable="true"/>
-->

НО...
эффекта пока не наблюдается...
может надо подольше подождать пока томкэт все таки увидит что файлы *.class были изменены
но тогда кто мне подскажет через какой интервал времени сервер смотрит это
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32523803
Грасоff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну это в документации сказано ,что обновляется. там же сказано и про тормоза системы. я сейчас проверил - не работает тоже.

.: 6.000.000 ways to die :.
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32523876
Delphi_User
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче это просто надо для того что бы можно было менять файлы *.class по FTP, не останавливая сервера. А так прийдется наверное ставить что то типа VNC, только для того что бы остановить и обратно запустить томкэт.
А это не желательно.
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32524563
teran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где то на буржуйском форуме тоже было. Советовали добавить в <Context ...
<Loader checkInterval="3"/>
<Logger className="org.apache.catalina.logger.SystemOutLogger" timestamp="true"/>

по умолчанию там кажется 15 стоит


Только мне это тоже не помогло :))

Может все зависит от версии томката?! У меня 4.1.27
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32524617
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последняя версия Tomkat - 5.0.24. И после изменения файлов у меня поисходит автоматический перезапуск соответствующего приложения - одного из тех, которые указаны в %TOMKAT_HOME%/conf/Catalina/localhost. И это как-то сразу после установки получилось, ничего особенно не настраивал.
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32524718
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а на 4-ом ( 4.1.27) Tomcat-e у кого-нибудь получается?
там еще на буржуйских сайтах рекомендуют в server.xml вот так написать
<DefaultContext reloadable="true"/>
Но автоматический reload не выходит, после замены файла пишет что класс не найден, лечится перезапуском ( такое чувство что что-то всетаки делается, но не доконца )
P.S.
пошарился еще на relib.com
здесь напр. пришли к выводу что перезапускать надо
И еще подскажите по поводу ТОМКАТА
а здесь вроде у кого то получилось
Перезапуск сервлетов в Tomcat 4...
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32525300
Edgiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В jvm нет возможности выгружать/обновлять классы. Так что перезапуск обязателен.
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32525568
Грасоff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а причем тут jvm?

вот application server 8 от sun вполне успешно релуд делает.

.: 6.000.000 ways to die :.
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32526640
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно это будет шагом к решению проблемы ...

При установке Tomcat-а был создан Examples Context, туда ( в \webapps\examples\WEB-INF\classes ) кинул свой класс сервлета HelloUser.class
В файле server.xml Context прописан уже как reloadable true, поскольку это было настроено при установке автоматич., оно дает право несомневаться в правильности настроек.
Ну, сервлет работает, ладно
Заходим на административную страничку
http://localhost:8080/manager/html/list
делаем Reload приложения examples , получаем ответ
OK - Reloaded application at context path /examples
снова вызываем сервлет
http://localhost:8080/examples/servlet/HelloUser
и This application is not currently available
причем на адм. страничке и start не прокатывает
Почему?

А вообще-то, как альтернатива, можно подменять классы или war без перезапуска Tomcat, только нужно сначала делать stop приложению.
Если делать не через адм. страничку, можно командами через браузер .
Приведу пример для замещения упакованного в war приложения HelloUser
1. Стопорим работающее приложение
http://localhost:8080/manager/stop?path=/HelloUser
2. Удаляем его
http://localhost:8080/manager/remove?path=/HelloUser
при этом удаляется дириктория ./webapps/HelloUser и лежащий в webapps файл HelloUser.war
3. закидываем в webapps новый war ( допустим по ftp )
4. Инсталлим
http://localhost:8080/manager/install?path=/HelloUser&war=HelloUser.war

Изменения вступили в силу, причем без перезапуска Tomcat! ( а с классом это еще проще ... )

Вроде как нормально, но по инфе из разных источников ,я так понял, можно сделать так, что никаких stop/start не надо, загнал новый war в webapps вместо старого и типа само все сделалось. Но пока так неполучается, даже с подменой просто класса неполучается - при прописывании reloadable и всего как советуют приводит лишь к ошибке что выделена жирным цветом ( см. выше )

Я новичок в этом пока ( и в целом в Java ) , так может быть это так и должно работать в 4-ом Tomcat-е? Но зачем тогда там есть reload?
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32527815
Aleksej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе на Tomcat по крайней мере с 5 версии поддерживается Hot Deploying - т. е. можно актуализировать аппликацию без рестарта. Т. е. просто копировать WAR-файл со всей аппликацией в [tomact root]/webapps - tomcat сам всё актуализирует.

Чтобы загрузить новую версию аппликации для теста использую ANT - если мало файлов было изменено то создание WAR- файла и копирование на сервер длится прим. 30 сек. и ещё столько же нужно томкэту для redeploying. Это примерно столько же по времени сколько нужно было бы томкэту для рестарта.

Конечно за это время аппликация будет недоступна для использования - если речь идёт о live-сервере, но для update на live-сёрвере так и так нужна приостановка использования со стороны юзеров.
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32528095
Edgiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Грасоff
При том что с любым загруженным классом, уже ни чего не сделаешь. Ни томкатом ни чем либо еще. Надо перезапускать приложение.

Jsp обновляються путем создания нового класса, посмотри в Tomkat/work, до и после изменения jsp ,там названия классов формируемых из jsp немного изменяються, и накапливаются разные версии для одной и той же страницы.

Если имена классов не менять, то томкату по любому нужна перезагрузка или автоматом или вручную.
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32528304
Грасоff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так я не о томкате - я об as8...

.: 6.000.000 ways to die :.
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32528646
Edgiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уж незнаю как они сделали :) Попробую поставить, если действительно можно обновлять классы незаметно для пользователя то перехожу на AS
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32529453
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EdgizПри том что с любым загруженным классом, уже ни чего не сделаешь. Ни томкатом ни чем либо еще. Надо перезапускать приложение
Не всё так плохо, как кажется. См. Class ClassLoader
Самое главное, это новые варианты "своего" класса создавать из "нового" ClassLoader-а. Вот пример
_______________
Alex
There are three kinds of people: those who can count and those who can't
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32532427
Edgiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну теперь все понятно.
Так и знал что недокументированная возможность.
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32532465
MBasil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Delphi_User

А Вы обратили внимание, что ROOT контекст у Вас стоит внутри комментариев
и конечно он не читается

<!-- Tomcat Root Context -->
<!--
<Context path="" docBase="ROOT" debug="0" reloadable="true"/>
-->

Кроме того, лучше создать свое приложение а не использовать ROOT контекст

Допустим приложение называется app. Тогда в директории (Tomcat 5)
D:\Tomcat5\conf\Catalina\localhost создается отдельный файл со следующим содержимым
и названием app.xml

<Context path="/app" docBase="app" debug="0" reloadable="true">
</Context>

а в директории D:\Tomcat5\webapps\ директория app с поддиреторией WEB-INF
и т.д.
Вобщем все работает "как часы".
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32532642
MBasil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, JSP тоже обновляются после копирования в директорию приложения, то есть автоматичски перекомпилируются в момент первого, после копирования, обращения клиента к этой странице.
...
Рейтинг: 0 / 0
Томкэт: замена файлов *.class без остановки сервера
    #32539678
Aion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Delphi_User
Вопрос: можно ли заменять файлы *.class которые используются некоторыми JSP-страничками при РАБОТАЮЩЕМ Томкэте?
Короче, я заменяю, но все изменения вступают в силу только при рестарте Томкэта, т.е. приходится остановить его и запустить снова. Допустим файлы стилей *.css, или javascript при РАБОТАЮЩЕМ Томкэте можно заменять и все изменения работают сразу.
Можно, только где .class'i лежат? в какой-то wep app?

http://jakarta.apache.org/tomcat/tomcat-4.0-doc/manager-howto.html
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Томкэт: замена файлов *.class без остановки сервера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]