Справочная карточка Администратора JBoss 4.X.X (OS Linux)

Хотя я пишу эту статью для  OS Linux возможно некоторые примеры будут
работать и с другими операционными системами, я на это надеюсь. Прежде чем
перейти к изложению материала, я бы хотел напомнить как установить JBoss в крации.
Прежде всего нужно скачать дистрибутив ( у меня jboss-4.2.2.GA.zip),
распаковать его в директорию (у меня /opt/jboss-4.2.2.GA), установить переменную
окружения $JBOSS_HOME  я делаю все в файле .bashrc (запускается каждый  раз при
входе пользователя в sh):
#cat /home/vit/.bashrc

# .bashrc
# User specific aliases and functions
# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
   
fi
JAVA_HOME=/opt/jdk1.6.0_05
export JAVA_HOME

PATH=$JAVA_HOME/bin:$PATH
export PATH

JBOSS_HOME=/opt/jboss-4.2.2.GA
export JBOSS_HOME

Под строкой "host:port"  я понимаю доменное имя интерфейса (просмотреть настройки
можно командой ifconfig) или его IP-adress и порт на котором запускается
JBOSS server. По умолчанию  http://host:port соответствует http://localhost:8080 или
http://127.0.0.1:8080

Как запустить сервер

Использовать один из способов:
- JBOSS_HOME/bin# ./run.sh
- JBOSS_HOME/bin# nohup ./run.sh > jboss.log 
- JBOSS_HOME/bin# ./run.sh  -c all -b 127.0.0.1

Как остановить сервер

Использовать один из способов:
- JBOSS_HOME/bin# ./shutdown.sh -S
- JBOSS_HOME/bin# ./shutdown.sh -S --server=host:port (в случае localhost -> --server=127.0.0.1:1099)
- Crtl+C  в окне терминала где был запушен JBoss server
- kill -TERM <pid>  (<pid> - номер процесса JBoss)
- В http://host:port/jmx-console, выбрать  type=Server в domain - jboss.system
  найти void shutdown() нажать на кнопку Invoke

Java/JVM настройки (поменять можно в скрипте run.sh  или run.conf)

JAVA          JAVA_HOME=/opt/jdk1.6.0_05
Total Memory  JAVA_OPTS="$JAVA_OPTS -Xms:1024m -Xmx1024m"
Perm  Memory  JAVA_OPTS="$JAVA_OPTS -XX:PermSize=256m -XX:MaxPermSize=256m"
Young Memory  JAVA_OPTS="$JAVA_OPTS -XX:NewSize=256m -XX:MaxNewSize=256m"
HotSpot       JAVA_OPTS="$JAVA_OPTS -Server"

Twiddle - консольная утилита управления Jboss server'om
(в принципе дублирует http://host:port/jmx-console - (в случае localhost -> --server=127.0.0.1:8080))

Формат использования: ./twiddle.sh [options] <command> [command_arguments]

JBOSS_HOME/bin# ./twiddle.sh -H get - получение справки по командам
JBOSS_HOME/bin# ./twiddle.sh -s host:port <command> - удаленное поключение к серверу
(в случае localhost -> --server=127.0.0.1:1099)
JBoss статус    ./twiddle.sh get "jboss.system:type=Server" Started
Получить ThreadDump  ./twiddle.sh invoke "jboss.system:type=ServerInfo" listThreadDump
Получить web-application(приложения) ./twiddle.sh query "jboss.web.deployment:*"
Проверить статус приложения ./twiddle.sh get --noprefix `./twiddle.sh query "jboss.web.deployment:*" | grep web-console.war` StateString
Изменить DefaultDS pool size ./twiddle.sh set "jboss.jca:name=DefaultDS,service=ManagedConnectionPool" MaxSize 21

Web утилиты управления Jboss server'om

Существует 2 утилиты управления Jboss server'om, они дублируют друг друга:
jmx-console (web  интерфейс), web-console (апплет + web  интерфейс)
http://host:port/jmx-console  http://host:port/web-console

Включить JMX (все настройки прописать в скрипте run.sh  или run.conf)

По умолчанию включаем стандартный доступ к JBoss для утилиты JConsole JMX
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=3099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
запускаем jconsole эта утилита входит в стандартную поставку jdk и служит для работы с JMX серверами.
В открывшемся окне выбираем Remote Process и вводим 127.0.0.1:3099 Jconsole теперь должна подключиться к витруальной машине
и отобразить массу полезной информации. Подождите немного, пока графики наполнятся реальными данными.
Зайдите на вкладку MBeans и поиграйтесь с параметрами виртуальной машины. Найдите, к примеру,
ветку java.lang->ClassLoading->Attributes и посмотрите, сколько классов загрузила виртуальная машина.
Во вкладке java.lang->Memory->Operations можно выполнить операцию gc - вызвать на удаленной виртуальной машине garbage collector.

Запустить JBoss как MBean Server
JAVA_OPTS="$JAVA_OPTS -Djboss.platform.mbeanserver"
Тогда появяться 2 домена java.lang и java.util.logging  в jmx-console и web-console

Настройка Логгирования (Logging)

Конфигурационный файл: $JBOSS_HOME/server/default/conf/jboss-log4j.xml
Уровни логгирования по убыванию: FATAL, ERROR, WARN, INFO, DEBUG, TRACE
так же есть 2 спец уровня: ALL и OFF. настраиваются они(уровни) в элементах:
Appender <param name="Threshold" value="INFO"/>
Category <priority value="WARN"/>
По умолчанию логгирование идет на консоль (CONSOLE - System.out)  и в файл
(FILE - ${jboss.server.log.dir}/server.log). В продакшене лучше отключить вывод на CONSOLE
для этого закоминтируем строчку <appender-ref ref="CONSOLE"/>:
<root>
      <!--<appender-ref ref="CONSOLE"/>-->
      <appender-ref ref="FILE"/>
</root>
Хотелось бы еще добавить что для FILE можно организовать ротацию файлов,
регулировать размер файла, что бы узнать как это делается вам нужно
 посетить сайт Jakarta Log4j - http://jakarta.apache.org/log4j
Если вы хотите изменить уровень работающего server'a то в jmx-console (http://host:port/jmx-console)
выберите домен jboss.system и service=Logging,type=Log4jService  в нем есть функция void setLoggerLevel()
введем в поле Logger - ParamValue - org.apache, a  в поле Level - ParamValue - WARN и нажмем кнопку Invoke
Все вы сменили уровень логирования с INFO для logger'a - org.apache  на уровень WARN

Deploying application  как root (http://host:port/ - root path)

1 способ: удалить существуюший файл или каталог ROOT.WAR  и на его место
deploy  свое приложение (application) как ROOT.WAR.

2 способ: Использовать файл jboss-web  в нем установить <context-root>/</context-root>:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 4.2//EN"
        "http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">
<jboss-web>
         <context-root>/</context-root>
</jboss-web>

3 способ: если ваше web-applicatin(*.war) входит в J2EE-application(*.ear) то измените <context-root> в application.xml:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/application_5.xsd"
             version="5">
<display-name>MyApp</display-name>
     <module id="Struts2-Web">
        <web>
            <web-uri>Struts2.war</web-uri>
            <context-root>/</context-root>
        </web>
     </module>
</application>

Изменить по умолчанию стандартный HTTP Port

По умолчанию HTTP/HTTPS порты в JBoss настроены на 8080/8443, для смены их, найдите их в файлах:
defalt/deploy/jboss-web.deployer/server.xml
defalt/deploy/http-invoker.sar/META-INF/jboss-service.xml
defalt/deploy/jbossws.sar/jbossws.beans/META-INF/jboss-beans.xml
и измените значения на нужный вам port, но если вы не используете web-сервисы (JBossWS),
то нужно произвести изменения только в 2-х файлах server.xml и jboss-service.xml,
но я делаю "навсякий случай" тупо поиск по значению 8080 в 3-х файлах и интуитивно
рядом с числом 8080 ищу слово port.

Настройка DataSource

По умолчанию файл настройки должен иметь в конце суффикс -ds.xml (vit_mysql-ds.xml)
Примеры всех конфигурационных файлов Баз Данных поддерживаемых JBoss server'om можно найти в
$JBOSS_HOME/docs/examples/jca Подходящий вам файл вы должны скопировать в
$JBOSS_HOME/server/default/deploy и настроить строку подключения к БД, пароль,
пользователя БД и другие необходимые параметры.

Защитить Web утилиты управления Jboss server'om паролем

Как я говорил существует 2 утилиты управления Jboss server'om:
jmx-console (web  интерфейс), web-console (апплет + web  интерфейс)
для http://host:port/jmx-console  раскоментируйте в файле
$JBOSS_HOME/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml
строчку:
<security-domain>java:/jaas/jmx-console</security-domain>
в файле:
$JBOSS_HOME/server/default/deploy/jmx-console.war/WEB-INF/web.xml
строки:
   <security-constraint>
     <web-resource-collection>
       <web-resource-name>HtmlAdaptor</web-resource-name>
       <description>An example security config that only allows users with the
         role JBossAdmin to access the HTML JMX console web application
       </description>
       <url-pattern>/*</url-pattern>
       <http-method>GET</http-method>
       <http-method>POST</http-method>
     </web-resource-collection>
     <auth-constraint>
       <role-name>JBossAdmin</role-name>
     </auth-constraint>
   </security-constraint>
в файле:
$JBOSS_HOME/server/default/conf/props/jmx-console-users.properties
поменяйте пароль с admin на свой: было admin=admin - стало admin=myPassword

для http://host:port/web-console аналогично раскоментируйте
$JBOSS_HOME/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml
строчку:
<security-domain>java:/jaas/web-console</security-domain>
в файле:
$JBOSS_HOME/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/web.xml
строки:
<security-constraint>
  <web-resource-collection>
   <web-resource-name>HtmlAdaptor</web-resource-name>
   <description>An example security config that only allows users with the
   role JBossAdmin to access the HTML JMX console web application
   </description>
   <url-pattern>/*</url-pattern>
   <http-method>GET</http-method>
   <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
   <role-name>JBossAdmin</role-name>
  </auth-constraint>
</security-constraint>
в файле:
$JBOSS_HOME/server/default/conf/props/web-console-users.properties
поменяйте пароль с admin на свой: было admin=admin - стало admin=myPassword
теперь при доступе к ресурсам будете вводить :)
login:    admin
password: myPassword

PS Как любила говорить моя преподавательница английского языка:
"это - Программа минимум, чего вы должны знать для получения 3 на экзамене" :) :) :)
сдесь собран тот минимум который необходимo знать при администрировании JBoss Server'a

Как всегда с удовольствием

Как всегда с удовольствием прочитал статью Vita, и не просто прочитал, а "намотал на ус", так сказать, чтобы применить в ближайшее время. Спасибо, камрад! Java rulezzz forewer!

Рад слышать что кто-то читает

Рад слышать что кто-то читает мои статьи :)  хочу добавить что прежде чем лезть админить jboss я бы рекомендовал всем почитать что такое JMX,  и почитать про Garbage Collector java и как его настраивать в JVM.

Я поговорил Denis_aka_xaos -

Я поговорил Denis_aka_xaos - предлагаю перенести материалы с linux16.net на world16.ru (наш аналог Хабра) Vit, Mabel - как вас найти? Постучитесь в ICQ 481443360 или в Jabber'е, или Mihael напишите!

Отправить комментарий

КАПЧА
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Enter the characters (without spaces) shown in the image.