Горячее развертывание на JBoss - как мне заставить JBoss "увидеть" изменения? - PullRequest
52 голосов
/ 09 июня 2009

Я занимаюсь разработкой приложения Java EE, которое я развертываю снова и снова на локальной установке JBoss во время разработки. Я хочу ускорить сборку путем оперативного развертывания моего приложения прямо в [JBOSS] / server / default / deploy / myApp

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

Правильно ли я, и если да, то как сделать, чтобы JBoss очищал кеш?

Ответы [ 16 ]

108 голосов
/ 17 марта 2012

У меня была та же проблема в моем комплекте: (Eclipse IDE + серверный адаптер JBoss) + JBoss AS 7.0.1 (проект сообщества).

Мое решение очень просто - вам нужно перейти на административную панель JBoss (по умолчанию localhost: 9990), там в настройках профиля откройте Core - Deployment Scanners. Включите Autodeploy-Exploded (значение true), и вы можете настроить время сканера (по умолчанию 5000 мс), соответствующее вашему (я установил 2000, для более быстрой добавочной публикации в Eclipse при внесении изменений в проекты) , Вот и все. Теперь JBoss делает HOT развертывание не только для файлов HTML (JSF, XHTML и т. Д.), Но и заботится о файлах классов POJO (бины и т. Д.).

8 голосов
/ 09 июня 2009

К сожалению, это не так просто. За кулисами в JBoss есть более сложные вещи (большинство из которых связаны с ClassLoader), которые не позволят вам выполнить ГОРЯЧУЮ РАЗВЕРТКУ вашего приложения.

Например, вы не сможете использовать HOT-DEPLOY, если изменятся подписи некоторых ваших классов.

Пока что использование MyEclipse IDE (платного дистрибутива Eclipse) - единственное, что я нашел, что делает горячее развертывание довольно успешно. Точность не 100%. Но, безусловно, лучше, чем JBoss Tools, Netbeans или любое другое решение на основе Eclipse.

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

6 голосов
/ 06 августа 2012

Вы должны попробовать JRebel , который хорошо справляется с горячим развертыванием. Немного дороже, но стоит денег. У них есть пробная версия.

2 голосов
/ 15 июля 2016

Только мои два цента:

  • Холодное развертывание - это способ развертывания приложения, когда вы останавливаете его (или останавливаете весь сервер), затем устанавливаете новую версию и, наконец, перезапускаете приложение (или запускаете все сервер). Это подходит для официального развертывания производства, но было бы ужасно медленно делать это во время разработки. Забудьте о быстром развитии, если вы делаете это.

  • Автоматическое развертывание - это возможность серверу периодически повторно сканировать новый EAR / WAR и автоматически развертывать его за кулисами или для развертывания IDE (Eclipse). автоматически все приложение, когда вы вносите изменения в исходный код. JBoss делает это, но отдел маркетинга JBoss называет это вводящим в заблуждение « горячее развертывание ». Автоматическое развертывание не такое медленное по сравнению с холодным развертыванием, но действительно медленное по сравнению с горячим развертыванием.

  • Горячее развертывание - это возможность развертывания за кулисами " при вводе ". Нет необходимости заново развертывать все приложение при внесении изменений. Горячее развертывание ONLY развертывает изменения. Вы меняете исходный код Java, и вуаля! он уже запущен Вы никогда не замечали, что это развертывает это. JBoss не может этого сделать, если вы не покупаете для JRebel (или аналогичного), но это слишком много для меня (я дешевый).

Теперь мой "шаг продаж": D

А как насчет использования Tomcat во время разработки? Поставляется с горячим развертыванием в течение всего дня ... бесплатно. Я делаю это все время в процессе разработки, а затем внедряю в WebSphere, JBoss или Weblogic. Не поймите меня неправильно, эти три отлично подходят для производства, но они действительно УДОВОЛЬСТВЕННЫ для быстрого развития на вашей локальной машине. Производительность разработки снижается, если вы используете эти три в течение всего дня.

По своему опыту, я перестал использовать WebSphere, JBoss и Weblogic для быстрой разработки. Они все еще установлены в моей локальной среде, но только для периодического теста, который мне может понадобиться запустить. Я не плачу за JRebel все время, пока получаю потрясающую скорость разработки. Я упоминал, что Tomcat полностью совместим с JBoss?

Tomcat бесплатен и имеет не только автоматическое развертывание, но и РЕАЛЬНОЕ горячее развертывание (код Java, JSP, JSF, XHTML) при вводе в Eclipse ( Да, вы хорошо читаете ). У MYKong есть страница (https://www.mkyong.com/eclipse/how-to-configure-hot-deploy-in-eclipse/) с подробной информацией о том, как ее настроить.

Вам понравилась моя коммерческая подача?

Ура!

2 голосов
/ 02 октября 2015

Горячее развертывание стабильно только для изменений статических частей приложения (jsf, xhtml и т. Д.).

Вот рабочее решение, согласно JBoss AS 7.1.1. Финал :

Создайте свой проект. Перейдите в [JBOSS_HOME] /standalone/tmp/vfs.Откройте самую последнюю измененную папку с именем "deploy [some_alphanumeric_values]", т.е. Перейдите к определенному представлению, которое вы хотите редактировать (обычно это входит в упакованную папку .war), и откройте его с помощью текстового редактора (например, Notepad ++). Сделайте внесите необходимые изменения и сохраните файл. Обновите соответствующую страницу в своем браузере. Изменения должны быть видны сейчас.

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

1 голос
/ 27 июня 2014

Нашли решение по этой ссылке :

Что делать:

  1. настроить разорванный военный артефакт на расширение .war
  2. развернуть взорванный артефакт в WildFly или Jboss
  3. настроить IntelliJ для обновления ресурсов при обновлении

Когда я изменяю страницу (веб), я обновляю и когда обновляю веб-браузер: все ли там с моим модом Я настроил Jboss для автоматического сканирования (не уверен, что это помогло)

1 голос
/ 10 июня 2009

У меня была такая же проблема, но, думаю, теперь она под контролем.

Вы используете Eclipse или командную строку или ??

Когда я использую командную строку, я думаю, что я произнес «очистка шва» или «удаление шва» или, возможно, даже «перезапуск шва» с последующим «разрыв шва». Я, вероятно, попробовал все это в тот или иной момент, не удосужившись посмотреть, что каждый из них делает.

Идея состоит в том, чтобы удалить развернутый файл войны из ДВУХ мест

1. $JBOSS_HOME/server/default/deploy
2. $PROJECT_HOME/exploded_archives

Я почти уверен, что "seam undeploy" удаляет 1-е, а "seam clean" удаляет 2-е.

Когда я использую Eclipse (я использую бесплатное), я сначала отключаю «Проект / Сборка автоматически» Затем, когда я готов к развертыванию, я делаю либо Project / Build Project, либо Project / Build All в зависимости от того, что я изменил. Когда я изменяю xhtml, Build Project достаточно. Когда я меняю исходный код Java, Build All работает. Возможно, они делают то же самое, и разница в моем воображении, но какая-то комбинация этого материала будет работать для вас.

Вы должны смотреть вывод, хотя. Иногда приложение не очищается или не развертывается. Это приведет к тому, что вы не увидите ваши изменения. Иногда я сначала выключаю сервер, а затем перестраиваю / очищаю / разворачиваю проект.

Надеюсь, это поможет.

TDR

0 голосов
/ 28 декабря 2018

Если вы работаете с Eclipse IDE, существует бесплатный плагин Manik-Hotdeploy .

Этот плагин позволяет вам подключить ваше рабочее пространство eclipse к вашей папке развертывания wildfly. После сборки maven ваш артефакт (например, war или ear) будет автоматически помещен в папку развертывания вашего сервера. Кроме того, файлы веб-материалов (например, .xhtml .jsf ...) будут развернуты в горячем режиме.

Плагин работает для wildfly, glassfish и payara.

Подробнее см. В разделе Поддержка JBoss / Wildfly .

0 голосов
/ 15 апреля 2018

Это сработало для меня в Eclipse Mars с WildFly 11. Дважды щелкните по серверу WildFly в разделе «Серверы», чтобы открыть страницу конфигурации. На вкладке «Обзор» -> «Публикация» выберите «Автоматически публиковать при изменении ресурсов» и установите интервал равным 1. Далее, вкладка «Обзор» -> «Поведение при перезагрузке приложения», снимите флажок с использованием шаблона по умолчанию и установите шаблон на \.jar$|\.class$. На вкладке «Развертывание» снимите флажок «Развернуть проект как сжатые архивы». Надеюсь, это поможет.

0 голосов
/ 16 февраля 2017

Разверните приложение в разобранном виде (папка project.war), добавьте в ваш web.xml:

<web-app>
    <context-param>
        <param-name>org.jboss.weld.development</param-name>
        <param-value>true</param-value>
    </context-param>

Обновлять время web.xml каждый раз при развертывании (добавить пустую строку):

set PRJ_HOME=C:\Temp2\MyProject\src\main\webapp
set PRJ_CLSS_HOME=%PRJ_HOME%\WEB-INF\classes\com\myProject

set JBOSS_HOME= C:\Java\jboss-4.2.3.GA-jdk6\server\default\deploy\MyProject.war
set JBOSS_CLSS_HOME= %JBOSS_HOME%\WEB-INF\classes\com\myProject

copy %PRJ_CLSS_HOME%\frontend\actions\profile\ProfileAction.class %JBOSS_CLSS_HOME%\frontend\actions\profile\ProfileAction.class
copy %PRJ_CLSS_HOME%\frontend\actions\profile\AjaxAction.class %JBOSS_CLSS_HOME%\frontend\actions\profile\AjaxAction.class

ECHO.>>%JBOSS_HOME%\WEB-INF\web.xml
...