Добавление файлов классов в работающей производственной среде - PullRequest
3 голосов
/ 15 ноября 2011

Можно ли просто добавить .class-файлы java-классов в файл ear на работающем сервере приложений и не нужно его перезапускать. Как загрузчик классов JVM загружает его таким образом. У меня сложилось впечатление, что загрузчик классов загружает файл при запуске, и если вы собираетесь изменить файл класса на работающем сервере приложений, вам придется перезапустить сервер.

Ответы [ 3 ]

1 голос
/ 15 ноября 2011

EAR - это файл JAR с некоторой дополнительной информацией, поэтому вы можете использовать тот же подход, что и ваш контейнер J2EE: создайте новый загрузчик классов (попробуйте URLClassLoader) и предоставьте ему необходимую информацию для загрузки новых классов.

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

1 голос
/ 15 ноября 2011

Если класс еще не загружен, вы можете просто сделать его доступным для загрузчика классов, т. Е. Скомпилировать его в разобранную папку, из которой вы развертываете (например, WEB-INF / classes).Это не работает при развертывании из упакованного EAR, поскольку они обычно взрываются во время развертывания.

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

0 голосов
/ 15 ноября 2011

Для горячей замены кода вы можете использовать JRebel Простого добавления .class в ухо было бы недостаточно, поэтому вам нужно полностью перестроить архив.

...