Перезагрузка класса Java - PullRequest
       25

Перезагрузка класса Java

4 голосов
/ 22 декабря 2010

Я использую сервер jboss и все мои классы находятся внутри файла jar.
Теперь, если я изменяю любой из файлов java, мне нужно заменить файл класса в банке и перезапустить сервер.1002 * Есть ли способ динамически загрузить вновь созданный файл класса без перезапуска сервера?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 16 января 2011

Я добился большого успеха с JRebel (http://www.zeroturnaround.com/jrebel/).). Это очень хороший продукт, который обеспечивает плавную перезагрузку классов для подавляющего большинства модификаций, которые вы можете внести в класс Java. Нет перезапуска сервера приложений или даже приложение требуется, классы просто перезагружаются за кулисами.

Он поставляется с бесплатной 30-дневной пробной версией, чтобы вы могли увидеть, работает ли она для вас.

(Отказ от ответственности: я никак не связан с нулевым оборотом)

0 голосов
/ 22 декабря 2010

Существует множество решений, ни одно из которых не является особо чистым или простым.

Как уже говорилось, изменение web.xml приведет к перезагрузке контекста и, следовательно, к обновлению исходного кода, и это можно сделать без перезапуска сервера. Это работает, потому что «WEB-INF / web.xml» настроен как WatchedResource в файле TOMCAT / conf / Context.xml. То есть каждый контекст наследует этот параметр и автоматически просматривает этот файл. Вы можете удалить это поведение, но вы также можете предоставить значения WatchedResource в своем собственном web.xml для просмотра дополнительных файлов. Хотя я не рекомендую это сделать, вы можете добавить в него все свои файлы классов, и контекст будет перезагружен при изменении одного файла.

Лучшее решение основано на том факте, что класс может быть перезагружен при сбросе ClassLoader, который загрузил класс. Поэтому, если вы управляете своим кодом горячей замены в своем собственном ClassLoader, вы можете обновить свой код, не перезапуская контекст, если вы обновите ClassLoader. К сожалению, легче сказать, чем сделать, но это может помочь вам начать.

0 голосов
/ 22 декабря 2010

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

У JBoss нет удобной функции, такой как флаг Tomcat reloadable = "true" в файле Tomcat Server.xml.

...