Você está na página 1de 23

Mauricio Magnani Jr

Introduo ao JBoss AS 7 Mauricio Magnani Jr




2

Introduo

Atualmente a plataforma Java uma das mais utilizadas no mundo, muito disso se deve
capacidade da plataforma de suportar outras linguagens como JRuby, Groovy e Scala por
exemplo. Milhares de aplicativos para Web e Mobile so desenvolvidos a cada ms utilizando a
plataforma como base. A plataforma Java mudou muito desde seu incio, e provavelmente vai
continuar evoluindo nos prximos anos.
Em paralelo com essas mudanas, visualizamos os servidores de aplicao que cada vez mais
oferecem recursos de alta complexidade, como componentes de balanceamento de carga
inteligente, implementao de autenticao (JAAS), troca de mensagens assncronas (JMS),
controle de transao (JTA), persistncia de objetos (JPA), componentes para criao de
aplicaes distribudas e clusterizadas (EJB), API Java para processamento de arquivos XML e
Webservices (JAX-WS e JAX-B) e muitas outras tecnologias facilitando o desenvolvimento e
padronizao de aplicaes. Eles tambm disponibilizam uma infraestrutura estvel e escalvel
para aplicaes de misso crtica. Um dos grandes desafios dos servidores de aplicao
acoplar servios de grande complexidade, deixando-os estveis e flexveis.
Nas verses iniciais a plataforma ainda conhecida como Java2EE no estava madura e seus
recursos nos servidores de aplicao eram carregados de forma hierrquica consumindo
muitos recursos e tornando o statup altamente custoso.
A arquitetura dos principais servidores de aplicao foi redesenhada para que seus recursos
possam ser iniciados de modo concorrente ou sob demanda. As melhorias tambm podem ser
notadas no consumo de memria, onde em uma simples mquina desktop, pode-se facilmente
configurar servios de alta disponibilidade e escalveis para realizao de testes em tempo de
desenvolvimento.
Se voc deseja um ambiente com alta disponibilidade, escalonvel e que seja independente de
fabricante (::vendor lock-in::) o Java EE e seus servidores de aplicao foram feitos para voc.









Introduo ao JBoss AS 7 Mauricio Magnani Jr


3


JBoss Application Server 7

JBoss Application Server 7 ou apenas JBoss AS 7 um servidor de aplicao de cdigo aberto
que 100% compatvel com a especificao Java EE 6. Em verses anteriores do Java EE
mesmo utilizando somente algumas tecnologias para o desenvolvimento da aplicao, ramos
obrigados a lidar como todos os recursos implementados no servidor. Para resolver esse
problema no Java EE 6 foi inserido o conceito de profile que tem como objetivo criar
configuraes com responsabilidades especificas como, por exemplo, o Web Profile que possui
tecnologias para o desenvolvimento web .
At o momento a verso atual do JBoss AS foi baixada mais de 150 mil vezes. Para mais
informaes visite o site do projeto http://www.jboss.org/jbossas.
Recentemente o projeto recebeu um novo nome e futuramente se chamar WildFly. Mais
informaes podem ser encontradas em: http://www.wildfly.org/faq/
Requisitos
Como todo servidor de aplicao o JBoss AS 7 requer um ambiente com JDK 1.6/JDK 1.7
devidamente configurado e instalado. O Java Development Kit (JDK) um conjunto de
utilitrios para criao de softwares para plataforma Java. Existem vrias implementaes cada
qual com a sua finalidade.
Para baixar o JDK 7 navegue at a pgina de download da Oracle em
http://www.oracle.com/technetwork/java/javase/downloads/index.html e escolha a opo
Java Platform (JDK). Em seguida voc ser direcionado para outra pgina onde dever aceitar a
License Agreement. Baixe a verso jdk-7u21-linux-x64.rpm.
Para instalar o JDK execute o seguinte comando:
$ sudo rpm -Uvh jdk-7u21-linux-x64.rpm
Execute o comando java --version para verificar se o JDK est instalado:

$ java --version
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)
Introduo ao JBoss AS 7 Mauricio Magnani Jr


4

Duvidas na instalao? Consulte o link:
http://docs.oracle.com/javase/7/docs/webnotes/install/index.html
Instalando o JBoss AS 7

O JBoss AS 7 pode ser baixado gratuitamente no site da comunidade:
http://www.jboss.org/jbossas/downloads/ Para instalar basta descompactar o arquivo jboss-
as-7.1.1.Final.zip utilizando um utilitrio de descompresso.
Boas Prticas
Em hiptese alguma inicie o JBoss utilizando o usurio root, pois a plataforma Java oferece
APIs para execuo de cdigos nativos do sistema operacional e mecanismos de
gerenciamento remoto. No Linux crie um usurio com privilgios de root para iniciar o servio
do JBoss. J no Windows crie um usurio com poderes administrativos, mas com privilgios
reduzidos.
Uma vez instalado fortemente aconselhvel iniciar o JBoss AS para verificar se existe alguma
incompatibilidade com a arquitetura do JDK utilizado ou at mesmo se a memria
disponibilizada suficiente.
Execute uma simples instncia standalone e acesse a url http://localhost:8080 para verificar se
o JBoss foi iniciado corretamente.
$ ./jboss-as-7.1.1.Final/bin/standalone.sh


Introduo ao JBoss AS 7 Mauricio Magnani Jr


5

Configurando JBoss AS 7 como Servio

Inicialmente edite o arquivo vim /usr/local/jboss/jboss-as-7.1.1.Final/bin/standalone.conf e
adicione a propriedade -Djboss.bind.address=0.0.0.0 para que o JBoss fique acessvel
externamente:
#sets interface to binding for applications to be accessed from
outside
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=0.0.0.0"
O JBoss AS 7 j vem com um exemplo de arquivo para colocar o JBoss como servio precisando
apenas fazer pequenas alteraes.
Copie o arquivo jboss-as-standalone.sh para /etc/init.d/ :
$ sudo cp /usr/local/jboss/jboss-as-7.1.1.Final/bin/init.d/jboss-as-
standalone.sh /etc/init.d/
Adicione tambm o diretrio /etc/jboss-as/ que conter o arquivo jboss-as.conf:
$ sudo mkdir -p /etc/jboss-as
Agora copie o arquivo de configurao:
$ sudo cp /usr/local/jboss/jboss-as-7.1.1.Final/bin/init.d/jboss-
as.conf /etc/jboss-as
O arquivo de configurao jboss-as.conf deve ser configurado como abaixo:
JBOSS_USER=jboss
JBOSS_CONSOLE_LOG=/var/log/jboss-as/console.log

Para finalizar edite o arquivo /etc/init.d/jboss-as-standalone.sh e altere a propriedade
JBOSS_HOME deixando exatamente como abaixo:
JBOSS_HOME=/usr/local/jboss/jboss-as-7.1.1.Final

Se for necessrio utilizar um perfil personalizado na propriedade
LAUNCH_JBOSS_IN_BACKGROUND devemos passar o parmetro
-Djboss.server.base.dir=$JBOSS_HOME/nomeperfil:

if [ ! -z "$JBOSS_USER" ]; then
if [ -x /etc/rc.d/init.d/functions ]; then
daemon --user $JBOSS_USER LAUNCH_JBOSS_IN_BACKGROUND=1
JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT -c $JBOSS_CONFIG -
Djboss.server.base.dir=$JBOSS_HOME/nomeperfil 2>&1 >
$JBOSS_CONSOLE_LOG &
else
su - $JBOSS_USER -c "LAUNCH_JBOSS_IN_BACKGROUND=1
JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT -c $JBOSS_CONFIG -
Djboss.server.base.dir=$JBOSS_HOME/nomeperfil" 2>&1 >
$JBOSS_CONSOLE_LOG &
fi
fi

Salve o arquivo.
Introduo ao JBoss AS 7 Mauricio Magnani Jr


6

Para facilitar altere o nome do arquivo /etc/init.d/jboss-as-standalone.sh para
/etc/init.d/jboss:
$ sudo mv /etc/init.d/jboss-as-standalone.sh /etc/init.d/jboss

D permisso para o script ser executado:
$ sudo chmod a+x /etc/init.d/jboss

Adicione o JBoss como servio:
$ sudo chkconfig --add /etc/init.d/jboss
$ sudo chkconfig --level 3 /etc/init.d/jboss

Para iniciar o JBoss execute:
$ sudo service jboss start

Starting jboss-as: [ OK ]
Criando um Novo Perfil

Em verses anteriores bastava apenas copiar um dos perfis disponveis como all, default ou
web. No JBoss AS 7 o diretrio JBOSS_HOME/standalone ou JBOSS_HOME/domain deve ser
duplicado para a criao de um novo perfil, Por exemplo:
$ sudo cp -Rap JBOSS_HOME/standalone JBOSS_HOME/meuperfil

Para iniciar o perfil criado execute:

$ sudo ./standalone.sh -c standalone-full.xml -
Djboss.server.base.dir=../meuperfil -Djboss.socket.binding.port-
offset=150

necessrio definir jboss.server.base.dir com o caminho completo ou como no exemplo acima
se voc estiver no diretrio JBOSS_HOME/bin.
O parmetro jboss.socket.binding.port-offset similar ao jboss.service.binding.set com a
diferena de que no parmetro antigo voc passava os intervalos de portas pr-definidos
como por exemplo ports-01 e j no novo modelo voc pode passar intervalos de sua
preferncia como 100, 150, 200, etc.

Deploy no JBoss AS 7

Em verses anteriores o arquivo da aplicao WAR/EAR era implantado no diretrio
${JBOSS_HOME}/server/<profile>/deploy e quando era necessrio realizar um BKP, bastava
apenas copi-lo para outro lugar.

Introduo ao JBoss AS 7 Mauricio Magnani Jr


7

No JBoss AS 7 em standalone mode bem simples: Basta copiar o arquivo que fica implantado
em ${JBOSS_HOME}/standalone/deployments.
No domain mode temos um problema. Quando realizamos o deploy do arquivo WAR/EAR, ele
descompactado e copiado para o diretrio content em
${JBOSS_HOME}/domain/data/content ficando quase impossvel encontrar o arquivo
implantado . Ento se voc est utilizando o domain mode sempre faa uma cpia de
segurana do arquivo WAR/EAR antes de realizar o deploy.
Desabilitando Hot Deployment no JBoss AS 7.1

O JBoss AS 7 (como verses anteriores) possui um recurso chamado deployment scanner
service. O deployment scanner responsvel pelo conhecido Hot Deployment (deploy com o
servidor em execuo). O problema que o deployment scanner consome uma quantidade
relevante de recursos j que ele fica varrendo o diretrio
JBOSS_HOME/standalone/deployments periodicamente em busca de novas aplicaes para
serem implantadas.
Esse intervalo definido na tag scan-interval=5000 que por padro 5 segundos. Para
alterar por exemplo para 60 segundos v at o subsystem deployment-scanner e defina o novo
valor:

<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1">
<deployment-scanner path="deployments" relative-
to="jboss.server.base.dir" scan-interval="60000" deployment-
timeout="600000"/>
</subsystem>

Caso realmente deseje desabilitar basta remover o subsystem deployment-scanner (opo no
recomendada) <subsystem xmlns=urn:jboss:domain:deployment-scanner:1.1>. Outra
maneira (recomendada) desabilitar o deploy das aplicaes exploded e zipped (.WAR por
exemplo):
<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1">
<deployment-scanner path="deployments" relative-
to="jboss.server.base.dir" scan-interval="5000" auto-deploy-
zipped="false" auto-deploy-exploded="false" deployment-
timeout="600000"/>
</subsystem>

Voc deve estar se perguntando: OK, desabilitei tudo! Como o JBoss vai saber que a aplicao
deve ser implantada? Simples basta renomear o arquivo implantado por exemplo
minhaapp.war para minhaapp.war.dodeploy e pronto! A aplicao ser finalmente publicada.
Para saber mais sobre as marcaes dos arquivos implantados no JBoss AS 7, aconselho a
leitura do JBOSS_HOME/standalone/deployments/README.txt.
Criando um DataSource no JBoss AS 7


Introduo ao JBoss AS 7 Mauricio Magnani Jr


8

O primeiro passo realizar o download do driver JDBC para o nosso banco de dados, que no
caso o MySQL 5.
O driver pode se baixado em: http://dev.mysql.com/downloads/connector/j/

A estrutura de diretrios do nosso mdulo deve ser criada conforme abaixo:
$sudo mkdir -p jboss-as-7.1.1.Final/modules/com/mysql/main

O diretrio main, conter os arquivos mysql-connector-java-5.1.18-bin.jar e o module.xml.
Para copiar o driver execute:

$sudo cp mysql-connector-java-5.1.18-bin.jar /jboss-as-
7.1.1.Final/modules/com/mysql/main/

O Prximo passo, criar o arquivo module.xml

$sudo vim jboss-as-7.1.1.Final/modules/com/mysql/main/module.xml

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java-5.1.18-bin.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
</dependencies>
</module>
No standalone.xml ou domain.xml do perfil desejado adicione o Datasource para o MySQL:

<datasources>
<datasource jndi-name="java:/MySQLDS" pool-name="MyPool"
enabled="true" jta="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:mysql://localhost:3306/brasil</connection-url>
<driver>mysql</driver>
<security>
<user-name>root</user-name>
<password>123456</password>
</security>
</datasource>
<drivers>
<driver name="mysql" module="com.mysql"/>
</drivers>
</datasources>

Reinicie o JBoss e o datasource para o MySQL estar disponvel.

Introduo ao JBoss AS 7 Mauricio Magnani Jr


9





Domain Mode x Standalone Mode

O JBoss AS 7 possui dos modelos de trabalho conhecidos como Standalone Mode e Domain
Mode. No Standalone mode podemos trabalhar com uma nica instncia muito semelhante a
verses anteriores do JBoss AS 5 e JBoss AS 6. Para utilizar o Standalone mode basta iniciar o
script JBOSS_HOME/standalone.sh no Linux .



Agora voc deve estar se perguntando se possvel criar um ambiente de alta disponibilidade
utilizando o Standalone Mode. A resposta Sim! possvel criar um ambiente com recursos
clusterizados, replicao de sesso e tudo mais. Se voc j utilizou outras verses do JBoss
deve estar pensando em utilizar o famoso Farm Deployment onde a aplicao era replicada
para todos os ns do cluster. Esse recurso no existe no Standalone Mode, voc ter que
realizar o deploy em todos os ns um por um. Isso no um problema se for 3 ou 4 instncias
mas imagine se forem umas 20 instncias.
Uma soluo para esse problema seria a utilizao de ferramentas como o RHQ para
realizao de deploy em mltiplas instncias o que acarretaria consumo de mais recursos e
tempo. Para solucionar esse problema temos uma soluo bem simples j embutida no
servidor de aplicao o Domain Mode e sobre isso que vamos falar no prximo tpico.
Introduo ao Domain Mode

Introduo ao JBoss AS 7 Mauricio Magnani Jr


10

Essa a melhor novidade da verso JBoss AS 7. O Domain Mode permite iniciar vrias
instncias e tambm oferece uma maneira centralizada de gerenciamento dos recursos
facilitando a administrao das instncias JBoss. O Domain Mode pode ser visto como uma
unidade de instncias que compartilham recursos e configuraes e so administradas por um
processo chamado Domain Controller.
Para iniciar o JBoss AS 7 de modo domain execute o script JBOSS_HOME/domain.sh no Linux
ou JBOSS_HOME/domain.bat no Windows.
Quando iniciamos o JBoss em Domain Mode na configurao default temos no mnimo Quatro
processos. Um Host Controller, um Process Controller e dois Servers.
Domain Controller: Ele quem controla o gerenciamento do domain. Nele esto as
configuraes que so compartilhadas entre as instncias que esto nesse domain.
Process Controller: Ele de grande importncia pois ele responsvel pela criao das
instncias e tambm do Host Controller que vamos falar a seguir. O Process Controller no
deve ser confundido com uma instncia, ele simplesmente um processo na JVM.
Host Controller: Como Domain Controller o Host Controller tambm coordena as instncias
do domain. Ele o responsvel por fazer algo semelhando ao Farm Deployment(no existe
nessa verso), ou seja, ele distribui o arquivo deployado para todas as instncias do domain.
Servers: So as instncias em si, onde esto as aplicaes deployadas. Um ponto importante
que cada server um processo Java.
Entre os benefcios da utilizao do Modo Domain que ns podemos citar esto:
Gerenciamento Centralizado;
Configurao Centralizada;
Deploy Centralizado;
Manuteno Centralizada;
Preparando a Infra Estrutura

Nesse artigo estamos utilizando Trs servidores. Dois deles sero utilizados pelas as instncias
JBoss e Um ser utilizado Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga.

Introduo ao JBoss AS 7 Mauricio Magnani Jr


11



Crie um grupo e adicione um usurio para ser utilizado pelo JBoss AS 7 em todos os servidores:
$ sudo groupadd jboss
$ sudo useradd -s /bin/bash -d /home/jboss -m -g jboss jboss

Faa tambm o download do JBoss AS 7 no diretrio tmp:
$ cd /tmp
$ wget http://download.jboss.org/jbossas/7.1/jboss-as-
7.1.1.Final/jboss-as-7.1.1.Final.zip

Crie a estrutura de diretrios para armazenar o JBoss:
$ sudo mkdir /usr/local/jboss
$ chown jboss:jboss /usr/local/jboss
$ su jboss
$ mkdir /usr/local/jboss/
$ cd /usr/local/jboss/
$ unzip /tmp/jboss-as-7.1.1.Final.zip

Finalmente o JBoss AS 7 est instalado em /usr/local/jboss/jboss-as-7.1.1.Final em todos os
servidores.

Configurando Cluster e Alta Disponibilidade

Para aplicaes como muitas solicitaes a busca pela melhora do desempenho quase que
constante. Um dos meios mais utilizados o Balanceamento de Carga, que consiste em
distribuir a carga das solicitaes em vrios servidores ou instncias proporcionando a melhora
no tempo de reposta.
Introduo ao JBoss AS 7 Mauricio Magnani Jr


12

O JBoss AS 7 possui um componente nativo conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga alinhados ao conceito de Cloud. O Mod
Cluster vem com algoritmos de balanceamento de carga mais avanados, que se baseiam na
carga da aplicao, ou seja, quantidades de sesses, conexes abertas, entre outros. Ele pode
ser customizado conforme a necessidade da aplicao visando um ambiente elstico. Um das
vantagens tambm o descobrimento automtico de novas instncias JBoss (Utilizando
Multicast), no havendo a necessidade de configuraes extras.
As configuraes do mod_cluster devem ser realizadas no JBoss AS 7 e no Apache Web Server
que ser utilizado como Proxy reverso.

Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server. Basta executar o seguinte comando:
$ sudo yum install httpd y

Inicie o servio e verifique se pgina de testes carregada:

$ sudo service httpd start


Instalando Mod Cluster

Ainda no Servidor Balancer instale o Mod Cluster. Ele pode ser baixado gratuitamente no site
da comunidade: http://www.jboss.org/mod_cluster/downloads/1-2-0-Final/ Para instalar
basta descompactar o arquivo mod_cluster-1.2.0.Final-linux2-x64-ssl.tar.gz utilizando um
utilitrio de descompresso e copiar os mdulos para o diretrio de mdulos do Apache Web
Server:
Introduo ao JBoss AS 7 Mauricio Magnani Jr


13

Para baixar e extrair o arquivo execute:
$ cd /tmp
$ wget
http://downloads.jboss.org/mod_cluster//1.2.0.Final/mod_cluster-
1.2.0.Final-linux2-x64-ssl.tar.gz
$ tar -zxvf mod_cluster-1.2.0.Final-linux2-x64-ssl.tar.gz

Copie os mdulos para o Apache:
$ sudo cp /tmp/opt/jboss/httpd/lib/httpd/modules/mod_advertise.so
/etc/httpd/modules/
$ sudo cp /tmp/opt/jboss/httpd/lib/httpd/modules/mod_manager.so
/etc/httpd/modules/
$ sudo cp /tmp/opt/jboss/httpd/lib/httpd/modules/mod_proxy_cluster.so
/etc/httpd/modules/
$ sudo cp /tmp/opt/jboss/httpd/lib/httpd/modules/mod_slotmem.so
/etc/httpd/modules/

Edite o arquivo /etc/httpd/conf/httpd.conf e comente a linha LoadModule
proxy_balancer_module modules/mod_proxy_balancer.so , para no ocorrer um conflito com
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so:
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

Crie o arquivo mod_cluster.conf e adicione a seguinte configurao:
$ sudo vim /etc/httpd/conf.d/mod_cluster.conf

#Content Mod Cluster
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so

<VirtualHost *:80>
<Directory />
Order deny,allow
Allow from all
</Directory>

KeepAliveTimeout 60
ManagerBalancerName mycluster
MaxKeepAliveRequests 0
ServerAdvertise On
EnableMCPMReceive On

</VirtualHost>

<Location /mod_cluster-manager>
SetHandler mod_cluster-manager
Order deny,allow
Allow from all
</Location>

Reinicie o Apache:
$ sudo service httpd restart

Introduo ao JBoss AS 7 Mauricio Magnani Jr


14

Acesse o mod_cluster-manager e verifique se as informaes sobre a verso do mod_cluster
esto aparecendo:


Arquitetura dos Servidores em Modo Domain

Para realizar os testes do balanceamento de carga com o mod_cluster, vamos subir o Domain
Controller e depois vamos conectar dois Hosts Controller com uma Instncia JBoss em cada.


Introduo ao JBoss AS 7 Mauricio Magnani Jr


15


Criando os Perfis dos Servidores JBoss

No Servidor Balancer crie o perfil chamado master que ser o Domain Controller:
$ cp -Rap /usr/local/jboss/jboss-as-7.1.1.Final/domain/
/usr/local/jboss/jboss-as-7.1.1.Final/master

No Servidor Host-01 crie o perfil chamado host01 que ser um dos Hosts Controllers:
$ cp -Rap /usr/local/jboss/jboss-as-7.1.1.Final/domain/
/usr/local/jboss/jboss-as-7.1.1.Final/host01

No Servidor Host-02 crie o perfil chamado host02 que tambm ser um dos Hosts Controllers:
$ cp -Rap /usr/local/jboss/jboss-as-7.1.1.Final/domain/
/usr/local/jboss/jboss-as-7.1.1.Final/host02

Configurando Toda a Arquitetura

Como vimos anteriormente todas as configuraes e gerenciamento so realizadas de forma
centralizada no Domain Controller. Quando for necessrio adicionar um novo grupo de
servidores, configurar logs, criar datasources, alterar portas entre outras coisas, tudo isso
dever ser feito no domain.xml do Domain Controller que nesse caso chamado de master.
Sendo assim todas as nossas instncias JBoss usufruiro das configuraes realizadas para o
Domain ou para o Server Group em questo.
A primeira coisa a ser feita definir qual o conjunto de tecnologias (subsystems) sero
utilizadas na aplicao. Isso pode variar conforme os requisitos de cada sistema. Um conjunto
de tecnologias (subsystems) no JBoss 7 chamado de profile.
<profile name="full-ha">

O JBoss AS 7 possui 4 profiles por padro: default, full, ha, full-ha , mas nada impede
de ns copiarmos qualquer um deles e renome-los conforme nossos requisitos. No Java EE 6
foi introduzido o conceito de Profiles, onde pode-se criar um subconjunto de tecnologias
presentes na spec Java EE ou at mesmo adicionar novas definidas pela JCP (Java Community
Process).
Mais informaes:
https://community.jboss.org/wiki/JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Ns vamos utilizar o profile ha, pois nele os recursos para clusterizao esto disponveis.
Depois de definir o profile o prximo criar um Grupo de Servidores: Server Group. Um server
group nada mais que um agrupamento de instncias JBoss. Nessa arquitetura vamos utilizar
apenas um server group. Isso pode ser definido na tag <server-groups> no domain.xml do
master (Domain Controller).
Introduo ao JBoss AS 7 Mauricio Magnani Jr


16

Crie um Server Group chamado apps que utilize o profile ha:
$ vim /usr/local/jboss/jboss-as-
7.1.1.Final/master/configuration/domain.xml

<server-group name="apps" profile="ha">
<jvm name="default">
<heap size="1303m" max-size="1303m"/>
<permgen max-size="256m"/>
</jvm>
<socket-binding-group ref="ha-sockets"/>
</server-group>

Os outros Server Groups podem ser removidos.
No profile ha especificamente no subsystem web adicione o atributo instance-id:
<subsystem xmlns="urn:jboss:domain:web:1.2" default-virtual-
server="default-host" instance-id="${jboss.server.name}"
native="false">

O instance-id ser passado como parmetro na inicializao do Host Controller.
O prximo passo configurar o atributo proxy list no subsystem modcluster:
<subsystem xmlns="urn:jboss:domain:modcluster:1.0">
<mod-cluster-config advertise-socket="modcluster" proxy-
list="192.168.238.186:80">
<dynamic-load-provider>
<load-metric type="busyness"/>
</dynamic-load-provider>
</mod-cluster-config>
</subsystem>

Nesse atributo est configurado o IP e porta do Apache Web Server.
No Servidor Host-01 edite o arquivo /usr/local/jboss/jboss-as-
7.1.1.Final/host01/configuration/host-slave.xml para criar a instncia JBoss.
Na tag <servers> onde esto de fato as nossas instncias JBoss. Quando criamos um novo
<server> estamos criando uma nova instncia JBoss.
Conforme foi definido na arquitetura o Host Controller 01 conter apenas uma instncia JBoss
chamada instance-one.
Deixe o <servers> como abaixo:
<servers>
<server name="instance-one" group="apps">
</server>
</servers>

Definimos que a instncia JBoss instance-one far parte do Server Group apps.
Para finalizar na tag <host> adicione o nome host01.
<host name="host01" xmlns="urn:jboss:domain:1.2">

Introduo ao JBoss AS 7 Mauricio Magnani Jr


17

Repita os procedimentos realizados no servidor Host-01 em Host-02 alterando apenas o nome
do servidor que ser instance-two e do <host> que ser host02.
No ambiente em que realizei os testes o sevidores possuem os seguintes IPs:
Domain Controller + Apache Web Server: 192.168.238.186
Hostr Controller 01: 192.168.238.187
Hostr Controller 02: 192.168.238.188
Inicie o Domain Controler (master) utilizando os seguintes parmetros:
./usr/local/jboss/jboss-as-7.1.1.Final/bin/domain.sh
-Djboss.domain.base.dir=/usr/local/jboss/jboss-as-7.1.1.Final/master/
-Djboss.host.default.config=host-master.xml
-Djboss.bind.address=192.168.238.186
-Djboss.bind.address.management=192.168.238.186

Verifique o log:
JBoss AS 7.1.1.Final "Brontes" (Host Controller) started in 15505ms - Started 11 of 11 services
(0 services are passive or on-demand)
O Domain Controller foi iniciado com sucesso.
Conecte primeiro Host Controller 01 (Host-01) ao Master. Inicie o Perfil host01 utilizando os
seguintes parmetros:
./usr/local/jboss/jboss-as-7.1.1.Final/bin/domain.sh
-Djboss.domain.base.dir=/usr/local/jboss/jboss-as-7.1.1.Final/host01/
-Djboss.host.default.config=host-slave.xml
-Djboss.domain.master.address=192.168.238.186
-Djboss.bind.address.management=192.168.238.187
-Djboss.bind.address=192.168.238.187
-Djboss.server.name=host-01

Agora observe os logs no Domain Controller e perceba que o Host Controller 01 se conectou
ao Domain:
JBAS010918: Registered remote slave host "host01", JBoss AS
7.1.1.Final "Brontes"

Observe tambm o Mod Cluster Manager em http://192.168.238.186/mod_cluster-manager e
veja que a nossa primeira instncia j apareceu:
Introduo ao JBoss AS 7 Mauricio Magnani Jr


18


Inicie o Host Controller 02 (slave02) utilizando os seguintes parmetros:
./usr/local/jboss/jboss-as-7.1.1.Final/bin/domain.sh
-Djboss.domain.base.dir=/usr/local/jboss/jboss-as-7.1.1.Final/host02/
-Djboss.host.default.config=host-slave.xml
-Djboss.domain.master.address=192.168.238.186
-Djboss.bind.address.management=192.168.238.188
-Djboss.bind.address=192.168.238.188 -Djboss.server.name=host-02

Observando novamente o log Domain Controller e verifque que o Host Controller 02 se
tambm conectou:
JBAS010918: Registered remote slave host "host02", JBoss AS
7.1.1.Final "Brontes"

No Mod Cluster Manager em http://192.168.238.186/mod_cluster-manager j esto as Duas
instncias:
Introduo ao JBoss AS 7 Mauricio Magnani Jr


19



Para testar o Balanceamento vamos fazer o deploy da aplicao SystemProps que pode ser
baixada http://goo.gl/yjynK
Para fazer o deploy conecte do domain controller utilizando o CLI:
$ sudo ./jboss-as-7.1.1.Final/bin/jboss-cli.sh -c
controller=192.168.238.186:9999
[domain@192.168.238.186:9999 /] deploy /tmp/systemprops.war --server-
groups=apps

A aplicao foi implantada para as instncias do server group apps.
Acesse a url do balanceador e verifique se a aplicao est disponvel:
http://192.168.238.186/systemprops/
Introduo ao JBoss AS 7 Mauricio Magnani Jr


20


Perceba que estamos na instance-one. Ento para testarmos o funcionamento do balanceador
vamos parar a Instncia instance-one e quando tentarmos um novo acesso ser redirecionado
para o instance-two:
No CLI execute o seguinte comando para parar o instance-one:
[domain@192.168.238.186:9999 /] /host=host01/server-config=instance-
one:stop
{
"outcome" => "success",
"result" => "STOPPING"
}

Acesse novamente a aplicao http://192.168.238.186/systemprops/
Introduo ao JBoss AS 7 Mauricio Magnani Jr


21


Perceba que agora estamos no instance-two. Conclumos assim que o balanceamento de carga
est funcionando.

Configurando Cluster
Anteriormente ns definimos que o profile utilizado seria o ha (high availability) que possui
tecnologias (subsystems) para utilizao de cluster. Nesse perfil podemos encontrar o JGroups
que a tecnologia utilizada no JBoss para fazer a comunicao entre os ns do cluster e
replicar o estado dos mesmos (entre muitas outras coisas). Ao implantarmos uma aplicao
web que no estava preparada para cluster portanto tais recursos no foram ativados.
Utilizando a tag <distributable/> no web.xml estamos basicamente habilitando clusterizao
para nossa aplicao.
<web-app 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/web-app_3_0.xsd"
version="3.0">

<distributable/>

</web-app>
Introduo ao JBoss AS 7 Mauricio Magnani Jr


22

Mais informaes podem ser encontradas na documentao:
https://docs.jboss.org/author/display/AS71/AS7+Cluster+Howto

Ao implantarmos uma aplicao <distributable/> os recursos de cluster sero carregados
automaticamente. claro que existem outras configuraes a serem feitas, mas podem variar
conforme o ambiente de cada administrador. Por exemplo, por padro utilizado UDP para
comunicao entre os ns do cluster, ento necessrio que o ambiente esteja preparado
para multicast.

Adicione uma nova rota:
route add -net 224.0.0.0 netmask 224.0.0.0 dev ethXYZ

Na inicializao basta fazer o binding com a opo -b IP ou -Djboss.bind.address=IP.

Para realizao dos testes eu criei uma simples aplicao Web com um contador utilizando um
Bean @Stateful. Essa aplicao pode ser baixada no seguinte link: http://goo.gl/uuUzj

Ao realizar o deploy da aplicao o servio de cluster inicializado:

[Server:server-one] 20:48:49,847 INFO [stdout] (ServerService Thread
Pool -- 66)
[Server:server-one] 20:48:49,847 INFO [stdout] (ServerService Thread
Pool -- 66) ----------------------------------------------------------
---------
[Server:server-one] 20:48:49,848 INFO [stdout] (ServerService Thread
Pool -- 66) GMS: address=slave01:server-one/ejb, cluster=ejb, physical
address=192.168.0.140:55200
[Server:server-one] 20:48:49,853 INFO [stdout] (ServerService Thread
Pool -- 66) ----------------------------------------------------------
---------
[Server:server-one] 20:48:49,884 INFO [org.jboss.as.osgi] (MSC
service thread 1-1) JBAS011907: Register module: Module
"deployment.cluster-example.war:main" from Service Module Loader
[Server:server-one] 20:48:50,117 INFO [stdout] (ServerService Thread
Pool -- 67)
[Server:server-one] 20:48:50,122 INFO [stdout] (ServerService Thread
Pool -- 67) ----------------------------------------------------------
---------
[Server:server-one] 20:48:50,122 INFO [stdout] (ServerService Thread
Pool -- 67) GMS: address=slave01:server-one/web, cluster=web, physical
address=192.168.0.140:55200
[Server:server-one] 20:48:50,123 INFO [stdout] (ServerService Thread
Pool -- 67) ----------------------------------------------------------
---------

Acesse a url http://192.168.0.186/cluster ( url do balanceador Apache nada tem a ver com a
localizao da instncia JBoss) e perceba que a aplicao iniciar a contagem. Pare um dos
servidores e perceba que o estado a aplicao ser replicada.



Introduo ao JBoss AS 7 Mauricio Magnani Jr


23

Concluso

O JBoss AS 7 trouxe a evoluo arquitetural que era esperada como pode ser vista nesse
artigo. Carregamento de mdulos dinmico, gerenciamento centralizado e tempo de startup
reduzido so apenas algumas das inmeras melhorias trazidas nessa verso.
Espera-se que a plataforma JBoss continue evoluindo trazendo sempre mais benefcios a todos
que utilizam os produtos desse ecossistema. Cada membro da comunidade tambm pode
fazer a sua parte seja colaborando com artigos ou participando de discusses para encontrar
melhorias para a plataforma.
Links e Materiais Adicionais

JBossDivers - http://jbossdivers.wordpress.com
MasterTheBoss - http://www.mastertheboss.com/
MiddlewareMagic - http://middlewaremagic.com/
JBUG Brasil - https://community.jboss.org/groups/jbug-brasil

Livros

http://www.packtpub.com/jboss-as-7-configuration-deployment-administration/book

Você também pode gostar