Немедленное повторное развертывание приложений Java EE

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

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

В Netbeans развертывание при сохранении, согласно следующему снимку экрана, похоже, включено, но щелчок/отмена щелчка невозможны, поскольку он утверждает, что получает информацию из моего pom.xml (хотя в моем pom.xml такого поля нет (только зависимости)). введите здесь описание изображения

Теперь изменения в некоторых файлах вступают в силу немедленно. К ним относятся: - файлы 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


person ustun    schedule 14.10.2011    source источник


Ответы (4)


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

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

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

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

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

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

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

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

Раскрывающийся список панели компиляции

person Jonathan Spooner    schedule 20.10.2011

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

person Anton Arhipov    schedule 17.12.2011

Это отличное видео, снятое Гертьяном Виленгой из команды NetBeans, в котором рассказывается о настройке JRebel в NetBeans 7.2.1 и GlassFish 3.1.2:

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

person Philip Durbin    schedule 08.11.2013

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

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

Применить изменения кода

person ustun    schedule 15.11.2011
comment
Применить изменения кода — это горячая замена. Это не сработает, если вы меняете подпись класса. - person Daniel; 25.05.2013