Немедленное повторное развертывание приложений Java EE - PullRequest
10 голосов
/ 14 октября 2011

Я довольно новичок в Java EE и борюсь с медлительностью процесса развертывания, и мне интересно, делаю ли я что-то не так. У меня есть опыт работы с Django, где сразу происходят изменения в коде, и кажется, что горячее развертывание приложений Java EE немного сбивает с толку - есть несколько вещей, которые претендуют на горячее развертывание (Glassfish, Eclipse Manic Hotdeploy, Jetty hotdeploy, JRebel и т. Д. ).

Мой проект - проект Maven, и я использую Netbeans для развертывания. На сайте используются фреймворки Spring, JSF и Hibernate.

В Netbeans функция «Развернуть при сохранении», как показано на следующем снимке экрана, по-видимому, включена, но щелчок / отмена щелчка невозможны, поскольку она требует получить информацию из моего файла pom.xml (хотя в моем pom такого поля нет. XML (только зависимости)). enter image description here

Теперь изменения в некоторых файлах вступают в силу немедленно. Они включают: - файлы JSF - Статические файлы

Изменения в следующих требуют развертывания: - любой файл XML - Любой файл свойств, даже файлы свойств локализации - Любой файл Java

Для внесения изменений требуется, чтобы я развернул вручную , а повторное развертывание занимает полминуты, хотя в настоящее время у меня всего 2-3 класса, в основном один класс пользователя и класс авторизации. В данный момент проект позволяет просто войти в систему, и, несмотря на это, компиляция занимает около нескольких секунд; и контейнер (Glassfish), кажется, потребляет около 600 МБ ОЗУ и даже выдает ошибки PermGen после нескольких развертываний, и мне нужно убить процесс Java с помощью диспетчера задач. (Я читал, что это связано с утечкой сборщика мусора после каждого повторного развертывания, и я даже использовал jhat для создания профиля, но мне был представлен список из тысяч классов, моих классов, классов Spring, Hibernate и т. Д.)

Я также слышал о jrebel и пытался запустить его, но кажется, что он не совместим с моей версией Netbeans (7.0), и, хотя кажется, что он работает, любая модификация любого файла java все еще требует повторного развертывания.

Могу ли я что-нибудь сделать для исправления этих проблем, или в Java EE нормально ждать около 1 минуты после каждого изменения любого файла Java? Эта проблема значительно убивает производительность.

Вот мой вывод Glassfish при развертывании приложения: http://pastebin.com/7FhZ6AVh

Ответы [ 4 ]

5 голосов
/ 20 октября 2011

Я не нашел ни заслуживающих доверия, ни официальных источников, но, поскольку у вас нет ответов, я хотел бы указать на две вещи, которые я обнаружил.

Первый - , это часто задаваемые вопросы на сайте NetBeans, описывающий, как включить компиляцию при сохранении для проекта Maven.Похоже, что этот параметр отключен по умолчанию и только включен по умолчанию для тестов.Для удобства:

Перейдите в диалоговое окно свойств проекта, панель Компилировать , чтобы включить его и для выполнения основного источника.

Второйи я должен подчеркнуть, что я не совсем понимаю это, кажется, есть два различных способа развертывания веб-приложения в NetBeans.Первый способ - это развертывание на месте, которое похоже на развертывание файла .war на сервере вручную.Второе - это инкрементное развертывание, которое, если это что-то вроде инкрементной компиляции, означает, что когда ваше приложение развернуто в горячем режиме, вы развертываете только измененные файлы.

По-видимому, развертывание на месте является методом развертывания по умолчанию, когда вы нажимаете Run или Deploy в контекстном меню проектов.Инкрементное развертывание происходит, когда ваш проект уже развернут, и вы снова нажимаете Run (или используете кнопку панели инструментов Run).

Я хотел бы отметить, что часто задаваемые вопросы по NetBeans, хотя и по сетевым компонентамСайт .org не является официальным изданием.Любой может создать FAQ, а информация может стать устаревшей без изменений.

Редактировать : После небольшого размышления я решил, что так называемое инкрементное развертывание - это не другой способразвертывание, просто во второй раз, когда вы Run используете приложение, оно выполняет инкрементное развертывание.

Редактировать : обратите внимание, что приведенная выше инструкция указывает вам на панель Compile, а не напанель Run, которую вы выбрали на скриншоте.Вот мой снимок экрана, показывающий, что вам нужно выбрать for both application and test execution в раскрывающемся списке Compile и по умолчанию это for test execution only

Compile panel drop down

2 голосов
/ 17 декабря 2011

JRebel совместим с NetBeans 7.0 (http://plugins.netbeans.org/plugin/22254/jrebel-netbeans-plugin) и фактически совместим с любой IDE).

1 голос
/ 08 ноября 2013

Это отличное видео от Geertjan Wielenga из команды NetBeans, которое рассказывает о настройке JRebel в NetBeans 7.2.1 и GlassFish 3.1.2:

Как начать работу с JRebel в IDE NetBeans: http://www.youtube.com/watch?v=kveXKv2q4Ec

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

«Скомпилировать при сохранении» сильно замедлило для меня, но потом я обнаружил еще одну вещь - кнопку «Применить изменения кода» в Netbeans, которая видна только в режиме отладки.(Зеленая кнопка справа на картинке)

Это полезно для применения изменений кода Java;это не работает каждый раз, но я думаю, что это работает большую часть времени, если изменение не является добавлением метода, а bean-компонент является областью запроса.Я думаю, что это делает то, что компилировать при сохранении вручную, но это лучше, чем повторное развертывание.

Apply Code Changes

...