Category Archive: JBoss

Удаленный дебаг в IntelliJ IDEA (на примере JBoss EAP)

Использование локальной или удаленной отладки может очень помочь и сэкономить время. По умолчанию удаленная отладка в JBoss отключена, для ее активации нужно внести изменения в конфигурационный файл %EAP_HOME%/bin/standalone.conf.
  1. Найдите и раскомментируйте следующую строку:
    JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"
    
    Видно, что мы задействовали порт 8787.
  2. Перегрузите JBoss
  3. Осталось настроить IDEA Зайдите в меню Run и выберите пункт Edit configurations...: remote_debug_1 В открывшемся окне Run/Debug configurations выберите пункт Remote: remote_debug_2 Придумайте название для данной конфигурации (поле Name), пропишите адрес(Host) и порт(Port) JBoss'а, на котором включена удаленная отладка. Нажмите OK: remote_debug_3 В качестве адреса можно указать localhost.
  4. Теперь попробуем подключаться к работающему JBoss'у, для этого выберите в списке созданную конфигурацию и нажмите "зеленого жучка", как на картинке: remote_debug_4 При успешном подключении в консоли IDEA вы увидите следующее сообщение:
    Connected to the target VM, address: '10.1.0.50:8787', transport: 'socket'
    
  5. Далее мы можем расставить необходимые breakpoint'ы, где необходимо приостановить код и просмотреть содержимое переменных: remote_debug_5 Вот так в IntelliJ IDEA выглядит отображение содержимого переменных - это очень удобно: remote_debug_6
  6. Для навигации по исполняемому коду вам помогут следующие кнопки: remote_debug_9 Одна из самых полезных - Step Over(перешагнуть), вызывается нажатием функциональной клавиши F8.
  7. Также IntelliJ IDEA предоставляет некоторые возможности по горячей замене классов (Hot Swap). Например, вы можете что-то изменить внутри метода, нажать на кнопку Make Project, и все изменные классы будут перегружены: remote_debug_7 Если изменения несовместимы с горячей заменой, то вам будет сообщено о невозможности замены классов.
  8. И последнее - для выхода из режима отладки нажмите кнопку Stop: remote_debug_8 В консоли появиться сообщение об отсоединении от сервера:
    Disconnected from the target VM, address: '10.1.0.50:8787', transport: 'socket
    

Два JBoss 4.2.2 на одном сервере

Опишу сначала ситуацию: Два приложения на Seam Framework (два war-ника) нужно было запустить на одном сервере, но т.к. в приложениях многие seam-компоненты, которые были созданы, имели одинаковые имена, был конфликт. Можно, конечно, добиться уникальности названий компонентов, но это нужно переписать кучу кода и в дальнейшем следить за уникальностью названий в обоих приложениях. Я пошел по этому пути, и приложения запускались и работал без ошибок, но при работе с сервисами возникли проблемы, т.к. jboss путался в компонентах. Тогда пришло решение запустить приложения на разных jboss'ах. Запустить два jboss'а на одном сервере относительно просто: нужно добиться того, чтобы jboss'ы не использовали одинаковые порты, а этих портов не мало. И чтобы не путаться в портах, к портам одного их jboss'ов можно добавлять единичку. Это выглядит так: 8009 -> 18009, 1099 -> 11099, 1098 -> 11098 и т.д. Я делал следующим образом: запускал один jboss, после его полной загрузки запускал второй и смотрел какие порты конфликтуют, заменял эти порты, потом еще раз перезапускал второй jboss до тех пор, пока второй jboss стартовал без конфликтов портов. Ниже приведу список файлом и замен портов (конфигурация default):
bin\run.bat 8787 -> 18787
server\default\conf\jboss-service.xml 8083 -> 18083 1099 -> 11099 1098 -> 11098 4444 -> 14444 4445 -> 14445 4446 -> 14446
server\default\deploy\ejb3.deployer\META-INF\jboss-service.xml 3873 -> 13873 (этот порт встречается дважды в файле)
server\default\deploy\jboss-web.deployer\server.xml 8080 -> 8085 (порты через, которые будет работать web) 443 -> 1443 5443 -> 15443 8009 -> 18009
server\default\deploy\jms\uil2-service.xml 8093 -> 18093
Также нужно учесть, что теперь debug первого приложения будет по порту 8787, а второго по порту 18787.