
Вы можете легко начать работу с JRebel в JBoss Developer Studio или интегрировать JRebel с JBoss на локальном рабочем столе. Его также можно легко использовать с JBoss Developer Studio и Ticket Monster на OpenShift .
Этот технический совет объяснит, как настроить JRebel с контейнерами Docker. В частности, мы будем использовать пример приложения, предоставленного Java EE 7 Hands-on Lab (ветвь jrebel) , JBoss Tools с Eclipse Mars M5 , и запуск примера приложения в контейнере WildFly Docker .
Большое спасибо Адаму Кобленцу ( @akoblentz ) за помощь в прохождении!
Давайте начнем!
Установите JRebel в Eclipse
JRebel работает в трех режимах:
- Локальный: сервер приложений работает внутри IDE
- Внешний: сервер приложений работает вне среды IDE, например с использованием интерфейса командной строки, но на том же компьютере
- Удаленный : сервер приложений работает на другом компьютере, виртуальной машине, контейнере или облаке
Контейнеры Docker должны быть настроены с использованием «удаленного» режима.
- Установите JBoss Tools, как описано на tools.jboss.org/downloads/ . Удаленный режим JRebel можно включить только с помощью IDE. Установите плагин JRebel из Eclipse Marketplace .
Пакет rebel.xml и rebel-remote.xml с WAR
Эти файлы определяют расположение классов и ресурсов в вашем архиве.
- Клонировать репозиторий Java EE 7 HOL:
1
git clone https://github.com/javaee-samples/javaee7-hol.git - Импортируйте проект Maven (из каталога
solution) в IDE, щелкните правой кнопкой мыши проект, выберите меню JRebel и нажмите «Включить JRebel Nature». Это сгенерируетrebel.xmlвrebel.xmlsrc/main/resourcesи будет выглядеть примерно так:010203040506070809101112131415161718192021<?xml version="1.0"encoding="UTF-8"?><application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.zeroturnaround.com"xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd"><classpath><dirname="/Users/arungupta/workspaces/javaee7-hol/solution/movieplex7/target/classes"></dir></classpath><web><link target="/"><dirname="/Users/arungupta/workspaces/javaee7-hol/solution/movieplex7/target/m2e-wtp/web-resources"><exclude name="/"/></dir></link><link target="/"><dirname="/Users/arungupta/workspaces/javaee7-hol/solution/movieplex7/src/main/webapp"></dir></link></web></application> - Снова щелкните правой кнопкой мыши по проекту и выберите «Enable Remoting». Это создаст
rebel-remote.xmlвrebel-remote.xmlsrc/main/resourcesснова и будет выглядеть так:12345<?xml version="1.0"encoding="UTF-8"?><rebel-remote><id>movieplex7</id><publicKey>XXXXXXX</publicKey></rebel-remote>Это необходимо сделать на компьютере, где JRebel будет использоваться в IDE. Это гарантирует, что открытый ключ будет сгенерирован надлежащим образом.
- Упакуйте свою заявку как
1
mvn packageЭто
rebel.xmlиrebel-remote.xmlв файл WAR.
Настроить и запустить сервер приложений
Сервер приложений должен знать об агенте JRebel и библиотеке для конкретной платформы. Оба этих файла доступны в Eclipse, если JRebel был установлен ранее. На Mac эти файлы доступны в каталоге eclipse/mars/m5/eclipse/plugins/org.zeroturnaround.eclipse.embedder_6.1.1.RELEASE-201503121801/jr6/jrebel/ . Точное имя очень вероятно будет отличаться в вашем случае.
- Создайте образ, используя Dockerfile :
01020304050607080910
FROM jboss/wildflyCOPY jrebel.jar $JBOSS_HOME/jrebel.jarCOPY libjrebel64.so $JBOSS_HOME/libjrebel64.soRUNecho"JAVA_OPTS=\"\$JAVA_OPTS -Drebel.remoting_plugin=true -agentpath:\$JBOSS_HOME/libjrebel64.so\"">> $JBOSS_HOME/bin/standalone.confCMD ["/opt/jboss/wildfly/bin/standalone.sh","-c","standalone-full.xml","-b","0.0.0.0"]RUN curl -L https://github.com/javaee-samples/javaee7-hol/blob/jrebel/solution/movieplex7-1.0-SNAPSHOT.war?raw=true-o/opt/jboss/wildfly/standalone/deployments/movieplex7-1.0-SNAPSHOT.warКлючевые части на этом изображении:
- Используя официальное изображение Docker jboss / wildfly
- Копирование агента JRebel и библиотеки для платформы в образ
- Настройка сервера приложений таким образом, чтобы он знал о «удаленном» режиме и платформенно-зависимой библиотеке
- Запустите WildFly
- Загружает предварительно созданный WAR-файл с GitHub. Это не будет работать для вас, и вам нужно заменить его на что-то вроде:
1
COPY movieplex7-1.0-SNAPSHOT.war $JBOSS_HOME/standalone/deployments/moviexplex7-1.0-SNAPSHOT.warЭтот WAR-файл тот же, что был создан ранее.
- На самом деле построить изображение как:
1
docker build -t javaee7-hol . - Запустите контейнер как:
1
docker run -it -p 8080:8080 javaee7-holи это должно показать что-то вроде:
01020304050607080910111213141516171819202122JAVA_OPTS: -server -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true-Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true-Drebel.remoting_plugin=true-agentpath:/opt/jboss/wildfly/libjrebel64.so=========================================================================Mar 18, 2015 8:37:30 PM java.util.prefs.FileSystemPreferences$1 runINFO: Created user preferences directory.2015-03-18 20:37:40 JRebel:2015-03-18 20:37:40 JRebel:#############################################################2015-03-18 20:37:40 JRebel:2015-03-18 20:37:40 JRebel: JRebel Agent 6.1.1 (201503111716)2015-03-18 20:37:40 JRebel: (c) Copyright ZeroTurnaround AS, Estonia, Tartu.2015-03-18 20:37:40 JRebel:2015-03-18 20:37:40 JRebel: Over the last 1 days JRebel prevented2015-03-18 20:37:40 JRebel: at least 0 redeploys/restartssaving you about 0 hours.2015-03-18 20:37:40 JRebel:2015-03-18 20:37:40 JRebel: Server is running with JRebel Remoting.2015-03-18 20:37:40 JRebel:2015-03-18 20:37:40 JRebel:2015-03-18 20:37:40 JRebel:#############################################################2015-03-18 20:37:40 JRebel:20:37:46,219 INFO [org.jboss.modules] (main) JBoss Modules version 1.3.3.Final20:37:47,340 INFO [org.jboss.msc] (main) JBoss MSC version 1.2.2.FinalИнформация о лицензии JRebel является хорошим признаком того, что все настроено правильно.
Если вы использовали Docker Machine для настройки Docker Host, то теперь приложение должно быть доступно по адресу 192.168.99.100:8080/movieplex7/ .
Настроить Eclipse
Последний шаг — настроить Eclipse, чтобы он знал, где развернуто приложение.
- В Eclipse щелкните правой кнопкой мыши проект, выберите JRebel, Дополнительные свойства.
- Нажмите «Изменить» рядом с «URL-адреса развертывания».
- Нажмите «Добавить» и укажите URL приложения, 192.168.99.100:8080/movieplex7/ в нашем случае.
- Нажмите Продолжить, Применить, ОК.
Вуаля, настройка завершена.
Теперь изменение любого класса, добавление любого метода, обновление любой сущности или страницы HTML или JSF немедленно передаст изменения в контейнер Docker. Нет необходимости повторно развертывать приложение.
Наслаждайтесь!
| Ссылка: | Сконфигурируйте JRebel с контейнерами Docker от нашего партнера JCG Аруна Гупты в блоге Miles to go 2.0… . |