Java - горячее развертывание - PullRequest
4 голосов
/ 20 марта 2012

Недавно я читал книгу об Erlang, в которой есть функция горячего развертывания.Развертывание может быть выполнено без остановки системы.Все существующие запросы будут обрабатываться старой версией кода, а все новые запросы после развертывания будут обслуживаться новым кодом.В этом случае обе версии кода доступны во время выполнения в течение некоторого времени, пока не будут обработаны все старые запросы.Есть ли какой-либо подход в Java, где мы можем сохранить 2 версии файлов JAR?Существуют ли какие-либо приложения / веб-серверы, поддерживающие это?

Ответы [ 5 ]

4 голосов
/ 21 марта 2012

Если вы хотите ускорить разработку, то JRebel - инструмент именно для этой цели.Однако я бы не рекомендовал использовать его для исправления производственной системы.

JRebel обнаруживает всякий раз, когда файл класса изменился, и перезагружает его в работающий сервер приложений, не выбрасывая старого состояния.Это намного быстрее по сравнению с тем, что делает большинство appservers при развертывании целой войны / ушей, где весь процесс инициализации должен быть перезапущен.

2 голосов
/ 25 марта 2012

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

LiveRebel (на основе JRebel ) - это инструментнапример, это можно использовать вместе с Дженкинсом.Он может выполнять безопасное горячее исправление, а также повторный перезапуск, истощая сеансы в производственном кластере.

1 голос
/ 20 марта 2012

Технически, вы МОЖЕТЕ сделать это самостоятельно.Хотя я бы не советовал, потому что это может быстро усложниться.Но идея в том, что вы можете создать ClassLoader и загрузить новую версию вашего класса.Затем убедитесь, что ваш исполняемый код знает о новом ClassLoader.

Я бы порекомендовал просто использовать JBoss и перераспределять ваши банки и войны.Красиво и просто по большей части.

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

1 голос
/ 20 марта 2012

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

Вот несколько хороших предложений / вариантов для рассмотрения:

  • OSGi - это модульная система общего назначения, которая поддерживает горячее развертывание
  • Clojure - это динамический язык JVM, который обеспечивает большую интерактивность во время выполнения. Clojure часто используется для «живого» кодирования - практически все может быть оперативно заменено и переопределено во время выполнения. Clojure - это функциональный язык с сильным акцентом на неизменяемость и параллелизм, поэтому в некоторых отношениях имеет некоторые интересные сходства с Erlang. Clojure имеет несколько очень хороших веб-фреймворков, таких как Noir , которые подходят для горячей замены кода веб-сервера.
  • Play Framework разработан для обеспечения возможности горячей замены кода по соображениям производительности (избегая перезапусков веб-сервера). Может быть уместно, если вы смотрите в первую очередь на «горячую» замену веб-приложений.
  • Большинство серверов приложений Java, таких как JBoss , поддерживают некоторую форму горячей замены для веб-приложений.
0 голосов
/ 02 февраля 2015

Добавьте RelProxy к вашему набору инструментов, RelProxy - это горячая перезагрузка класса для Java (и Groovy), чтобы улучшить разработку даже для производства, с одним существенным ограничением, перезагрузка возможна только в подмножестве ваших код.

...