Перенастройка приложений Java EE

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

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

В Netbeans, Deploy on Save, в соответствии со следующим снимком экрана, кажется, включен, но щелчок /unclicking невозможен, поскольку он утверждает, что получает информацию из моего 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

Ответ 1

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

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

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

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

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

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

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

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

Compile panel drop down

Ответ 2

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

Ответ 3

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

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

Ответ 4

"Compile on Save" меня очень сильно замедлил, но позже я обнаружил кнопку "Apply Code Changes" в Netbeans, которая видна только в режиме отладки. (Зеленая кнопка справа на картинке)

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

Apply Code Changes