Статьи

Настройте JRebel с контейнерами Docker

JRebel-заголовков изображений-2 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 должны быть настроены с использованием «удаленного» режима.

  1. Установите JBoss Tools, как описано на tools.jboss.org/downloads/ . Удаленный режим JRebel можно включить только с помощью IDE. Установите плагин JRebel из Eclipse Marketplace .

Пакет rebel.xml и rebel-remote.xml с WAR

Эти файлы определяют расположение классов и ресурсов в вашем архиве.

  1. Клонировать репозиторий Java EE 7 HOL:
    1
    git clone https://github.com/javaee-samples/javaee7-hol.git
  2. Импортируйте проект Maven (из каталога solution ) в IDE, щелкните правой кнопкой мыши проект, выберите меню JRebel и нажмите «Включить JRebel Nature». Это сгенерирует rebel.xml в rebel.xml src/main/resources и будет выглядеть примерно так:
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?xml version="1.0" encoding="UTF-8"?>
     
        <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>
  3. Снова щелкните правой кнопкой мыши по проекту и выберите «Enable Remoting». Это создаст rebel-remote.xml в rebel-remote.xml src/main/resources снова и будет выглядеть так:
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?>
    <rebel-remote>
        <id>movieplex7</id>
        <publicKey>XXXXXXX</publicKey>
    </rebel-remote>

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

  4. Упакуйте свою заявку как
    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/ . Точное имя очень вероятно будет отличаться в вашем случае.

  1. Создайте образ, используя Dockerfile :
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    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

    Ключевые части на этом изображении:

    1. Используя официальное изображение Docker jboss / wildfly
    2. Копирование агента JRebel и библиотеки для платформы в образ
    3. Настройка сервера приложений таким образом, чтобы он знал о «удаленном» режиме и платформенно-зависимой библиотеке
    4. Запустите WildFly
    5. Загружает предварительно созданный WAR-файл с GitHub. Это не будет работать для вас, и вам нужно заменить его на что-то вроде:
      1
      COPY movieplex7-1.0-SNAPSHOT.war $JBOSS_HOME/standalone/deployments/moviexplex7-1.0-SNAPSHOT.war

      Этот WAR-файл тот же, что был создан ранее.

  2. На самом деле построить изображение как:
    1
    docker build -t javaee7-hol .
  3. Запустите контейнер как:
    1
    docker run -it -p 8080:8080 javaee7-hol

    и это должно показать что-то вроде:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
      JAVA_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, чтобы он знал, где развернуто приложение.

  1. В Eclipse щелкните правой кнопкой мыши проект, выберите JRebel, Дополнительные свойства.
  2. Нажмите «Изменить» рядом с «URL-адреса развертывания».
  3. Нажмите «Добавить» и укажите URL приложения, 192.168.99.100:8080/movieplex7/ в нашем случае.
  4. Нажмите Продолжить, Применить, ОК.

Вуаля, настройка завершена.

Теперь изменение любого класса, добавление любого метода, обновление любой сущности или страницы HTML или JSF немедленно передаст изменения в контейнер Docker. Нет необходимости повторно развертывать приложение.

Наслаждайтесь!

Ссылка: Сконфигурируйте JRebel с контейнерами Docker от нашего партнера JCG Аруна Гупты в блоге Miles to go 2.0… .