Как перезагрузить классы сервлетов без перезапуска моего веб-приложения? - PullRequest
0 голосов
/ 05 марта 2010

Я хочу перезагрузить только мои классы веб-слоя, не перезагружая мои классы сервисного уровня (это занимает больше времени для инициализации и изменения реже).Нет ссылок из моего сервисного уровня в веб-слой, и я могу создать новый экземпляр веб-слоя без проблем.

Я могу придумать решение, включающее сложные приемы загрузчика классов, чтобы изолировать веб-слой в его собственном загрузчике классов, и я думаю, что это, вероятно, единственный способ сделать это, поэтому я спрашиваю:есть какая-нибудь библиотека, которая делает это?

Я знаю о JavaRebel - мне не нужно столько энергии, и я действительно ищу более легкое бесплатное решение.

Ответы [ 4 ]

3 голосов
/ 05 марта 2010

Если ваш веб-слой отделен от сервисного уровня, вы могли бы развернуть их как отдельные приложения?Затем веб-приложение может быть загружено так часто, как это необходимо.

В случае, если причиной перезагрузки веб-приложения являются изменения в конфигурации, переместите свойства и т. Д. Из WEB-INF-папки (так как они обычно не перезагружаются / не загружаются).Идеи для работы с перезагружаемыми конфигами и т. Д. Можно найти в Spring и FreeMarker

1 голос
/ 20 мая 2010

Может быть, это решение вам пригодится: http://blog.redfin.com/devblog/2009/09/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse.html

1 голос
/ 05 марта 2010

Я думаю, что в итоге вы потратите больше времени на разработку этой функции, чем на разработку веб-приложения. Просто жизнь с этим, вот где тебе платят. Я могу себе представить, что это может разочаровать разработчиков PHP, которые использовали F5 / refresh для каждой новой строки кода ... Однако это также зависит от используемого вами сервера приложений. Большинство просто поддерживает горячие взрывы. Убедитесь, что ваш настроен так же, как правило, IDE уже должна позаботиться об этом (по крайней мере, мой: Eclipse + Tomcat6 или Glassfish3).

Это может также зависеть от рассматриваемого сервера приложений, являются ли горячие развертывания быстрыми и / или успешными. Я видел, что Glassfish - хотя это медленный стартер - это очень быстро в горячих сплавах. Мне это нравится. Tomcat немного медленнее в этом и тоже не всегда успешен (например, старые вещи / мусор все еще в памяти и т. Д.).

0 голосов
/ 05 марта 2010

Не уверен, что это решит вашу проблему, но если вы можете легко создать экземпляр целого экземпляра веб-слоя, возможно, вы сможете создать метод, который это делает, например, reloadWebLayer (). Затем добавьте кнопку на страницу администратора, которая при нажатии вызывает reoladWebLayer ()?

Если вам нужно, чтобы он автоматически перезагружался, вы можете установить таймер и вызывать reloadWebLayer () каждые x секунд, или, возможно, вы можете написать прослушиватель файлов, который запускает reloadWebLayer () всякий раз, когда файл в пути к классам изменяется?

...