Подтвердить что ты не робот

Горячее развертывание на JBoss - как мне заставить JBoss "видеть" изменение?

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

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

Правильно ли, и если да, как я могу заставить JBoss сбросить его кеш?

4b9b3361

Ответ 1

У меня была такая же проблема в моем пакете: (адаптер 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 (beans и т.д.).

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

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

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

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

Ответ 5

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

Используете ли вы eclipse или командную строку или?

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

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

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

Я уверен, что "seam undeploy" удаляет 1-й и "чистый шов" удаляет 2-й.

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

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

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

TDR

Ответ 6

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

Что делать:

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

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

Ответ 7

На самом деле моя проблема заключалась в том, что утилита mvn командной строки не увидела изменения по какой-то причине. Я включил автоматическое развертывание в сканере развертывания, и все еще не было никакой разницы. ОДНАКО... Я крутился вокруг среды Eclipse, и потому, что я добавил сервер JBoss для этого окна Servers, я обнаружил, что у меня есть возможность добавлять или удалять... в моей рабочей области. Когда проект был добавлен всякий раз, когда я делал изменения для кода, изменение кода было обнаружено с помощью сканера развертывания, а JBoss прошел цикл обновления кода!!! Работает как шарм.

Ниже приведены шаги, необходимые для установки этого параметра:

Сначала, если вы этого не сделали, добавьте свой JBoss-сервер в свой Eclipse, используя File- > New- > Other- > Server, затем перейдите к движению добавления вашего сервера JBoss AS 7. Обязательно найдите каталог, который вы используете.

После добавления посмотрите вниз в нижней части Eclipse на вкладку "Серверы". Вы должны увидеть свой сервер JBoss. Выделите его и найдите "Добавить или удалить...". Оттуда вы должны увидеть свой проект.

После добавления сделайте небольшое изменение в своем коде и посмотрите, как JBoss отправится в город для вас.

Ответ 8

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

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

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

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

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

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

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

Tomcat является бесплатным и не только имеет автоматическое развертывание, но и REAL hot deployment (Java-код, JSP, JSF, XHTML) при вводе Eclipse (Да, вы хорошо читаете). В MYKong есть страница (https://www.mkyong.com/eclipse/how-to-configure-hot-deploy-in-eclipse/) с подробными сведениями о том, как ее настроить.

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

Ура!

Ответ 9

Я разрабатывал проект с Eclipse и Wildfly, и взорванный EAR файл становился все большим благодаря развертыванию всех сторонних библиотек, которые мне нужны в приложении. Я указывал на развертывание в моем репозитории Maven, который, я думаю, каждый раз возвращал банки. Поэтому перераспределение приложения, когда я менял код Java на уровне сервиса, превращалось в кошмар.

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

Однако недавно я обновился до Wildfly 10, Java 8 и JBoss Developer Studio 10, и во время этого процесса я потратил время на перенос всех приложений сторонних приложений, например. в модулях Wildfly, и я удалил репозиторий Maven из моей конфигурации развертывания. Теперь перераспределение всего приложения, которое является довольно большим через Eclipse, занимает всего несколько секунд, и это намного быстрее, чем раньше. Я даже не чувствую необходимости устанавливать Hotswap и не хочу рисковать им в любом случае прямо сейчас.

Итак, если вы строите под Eclipse с Wildfly, то держите приложение в стороне от сторонних библиотек, используя модули Wildfly, и вам будет намного лучше.

Ответ 10

Решение для Netbeans 8.02 и 8.1 IDE и JBOSS EAP 6.4:

  • На вкладке служб Netbeans добавьте сервер JBOSS на свои "серверы" node.
  • Если вы используете MAVEN, netbeans компилирует файлы и файлы копий maven в каталог. /target. Вам нужно создать символическую ссылку из. \Target в JBOSS_HOME\standalone\deployments. Под окнами команда примера будет

    cd %JBOSS_HOME%\standalone\deployments mklink /d MyWebApplication.war %PROJECTS_HOME%\MyWebApplication\target\MyWebApplication-1.0.0

    Вышеописанное создает символическую ссылку от %JBOSS_HOME%\standalone\deployments\MyWebApplication.war до \target\MyWebApplication-1.0.0, где maven передает все файлы после компиляции или после изменения jsp, html или любого другого файла.

  • Подумайте, нужно создать файл CentralManagement.war.dodeploy в% JBOSS_HOME%\standalone\deployments. Этот файл будет сообщать JBOSS о развертывании военного "файла" в качестве веб-приложения.

Ответ 11

Запустите сервер в режиме отладки и он будет отслеживать изменения внутри методов. Другие изменения. Он попросит перезапустить модуль.

Ответ 12

Я использую JBoss AS 7.1.1.Final. Добавление следующего фрагмента кода в моем web.xml помогло мне изменить файлы jsp на лету:

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>development</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>

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

Ответ 13

Разверните приложение как взорванное (папка 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

Ответ 14

Используйте Ant script и создайте целевое развертывание.

Цель развертывания должна:

  • Остановить JBoss
  • Скопируйте ухо или войну в каталог развертывания
  • Запустить JBoss

== > Отсутствие кэширования + также отсутствие проблем с памятью после последующих развертываний во время тестирования.