2013-09-17 2 views
0

Это хорошая идея для компиляции классов Java во время выполнения для обновления проекта без остановки сервера?Компиляция времени выполнения

И мой следующий вопрос: могу ли я заменить класс существующего объекта? Я имею в виду обновление некоторых методов поведения без воссоздания объекта.

+1

Вы можете сделать это с помощью API отладки, но это не рекомендуется делать в производственной среде. –

+2

Лучшей идеей было бы использовать модульную структуру, такую ​​как OSGi, тогда вы можете заменить части системы во время выполнения. – Kayaman

ответ

1

Полезно ли компилировать классы Java во время выполнения для проекта обновления без остановки сервера?

Я полагаю, вы имеете в виду, что обновление вновь скомпилированных классов на сервере, не останавливая его. Вы всегда можете это сделать, но если класс уже загружен, это не будет иметь никакого значения, и jvm будет продолжать использовать более старую версию класса.

И следующий вопрос: могу ли я заменить класс существующего объекта? I означает обновление некоторого поведения метода без воссоздания объекта.

Тот же ответ, что и для первого вопроса. Если класс уже загружен, то JVM будет использовать старый метод/поведение. И если у вас есть какой-то объект класса, значит, он уже загружен.

+0

Можно разгружать классы, но для этого все равно будет плохое решение. – Kayaman

+0

для первого вопроса Я могу создать фабрику ClassLoader и загрузить новые классы в загрузчик нового класса, если он будет обновлен. Но допустим ли это метод разработчика? –

+0

@ ОлександрСамсонов Я считаю, что это разрешено и логично делать иногда. Я считаю, что некоторые контейнеры, такие как Websphere, обеспечивают горячее развертывание, что означает, что классы будут загружены после обновления. –

1

Я бы сделал процесс перераспределения настолько быстрым, что это не имеет значения. (Это не всегда вариант), но я стараюсь, чтобы я мог скомпилировать, повторно развернуть и перезапустить серверный процесс в течение менее 10 секунд. В этой ситуации вам не нужна динамическая компиляция.

Примечание: если вы отлаживаете систему и перекомпилируете код, вы можете выполнить горячую замену изменений для работающей системы из вашей среды разработки. (Обычно работает, но иногда не зависит от того, что вы меняете)