JRebel позволяет вам пропустить процесс сборки и повторного развертывания, мгновенно развернув приложение на выбранном вами сервере приложений. Он поддерживается во всех основных IDE, таких как NetBeans, Eclipse и IntelliJ. Он также поддерживается в различных серверах приложений, таких как JBoss EAP, WildFly, WebLogic, WebsFear (err, WebSphere), Tomcat и многих других.
Вы можете легко начать работу с 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.xml
src/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>
<
dir
name=
"/Users/arungupta/workspaces/javaee7-hol/solution/movieplex7/target/classes"
>
<
/dir
>
<
/classpath
>
<web>
<link target=
"/"
>
<
dir
name=
"/Users/arungupta/workspaces/javaee7-hol/solution/movieplex7/target/m2e-wtp/web-resources"
>
<exclude name=
"/"
/>
<
/dir
>
<
/link
>
<link target=
"/"
>
<
dir
name=
"/Users/arungupta/workspaces/javaee7-hol/solution/movieplex7/src/main/webapp"
>
<
/dir
>
<
/link
>
<
/web
>
<
/application
>
- Снова щелкните правой кнопкой мыши по проекту и выберите «Enable Remoting». Это создаст
rebel-remote.xml
вrebel-remote.xml
src/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
/wildfly
COPY jrebel.jar $JBOSS_HOME
/jrebel
.jar
COPY libjrebel64.so $JBOSS_HOME
/libjrebel64
.so
RUN
echo
"JAVA_OPTS=\"\$JAVA_OPTS -Drebel.remoting_plugin=true -agentpath:\$JBOSS_HOME/libjrebel64.so\""
>> $JBOSS_HOME
/bin/standalone
.conf
CMD [
"/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 run
INFO: 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 prevented
2015-03-18 20:37:40 JRebel: at least 0 redeploys
/restarts
saving 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.Final
20: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… . |