Você está na página 1de 23

Mauricio Magnani Jr

Introduo ao JBoss AS 7

Mauricio Magnani Jr

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

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

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 jbossas-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

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-asstandalone.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/jbossas.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. 5

Introduo ao JBoss AS 7

Mauricio Magnani Jr

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.portoffset=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

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" relativeto="jboss.server.base.dir" scan-interval="60000" deploymenttimeout="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" relativeto="jboss.server.base.dir" scan-interval="5000" auto-deployzipped="false" auto-deploy-exploded="false" deploymenttimeout="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

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-as7.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

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

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.

10

Introduo ao JBoss AS 7

Mauricio Magnani Jr

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-as7.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.

11

Introduo ao JBoss AS 7

Mauricio Magnani Jr

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: 12

Introduo ao JBoss AS 7

Mauricio Magnani Jr

Para baixar e extrair o arquivo execute:


$ cd /tmp $ wget http://downloads.jboss.org/mod_cluster//1.2.0.Final/mod_cluster1.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

13

Introduo ao JBoss AS 7

Mauricio Magnani Jr

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.

14

Introduo ao JBoss AS 7

Mauricio Magnani Jr

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). 15

Introduo ao JBoss AS 7

Mauricio Magnani Jr

Crie um Server Group chamado apps que utilize o profile ha:


$ vim /usr/local/jboss/jboss-as7.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-virtualserver="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" proxylist="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-as7.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">

16

Introduo ao JBoss AS 7

Mauricio Magnani Jr

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:

17

Introduo ao JBoss AS 7

Mauricio Magnani Jr

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:

18

Introduo ao JBoss AS 7

Mauricio Magnani Jr

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 --servergroups=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/

19

Introduo ao JBoss AS 7

Mauricio Magnani Jr

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=instanceone:stop { "outcome" => "success", "result" => "STOPPING" }

Acesse novamente a aplicao http://192.168.238.186/systemprops/

20

Introduo ao JBoss AS 7

Mauricio Magnani Jr

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>

21

Introduo ao JBoss AS 7

Mauricio Magnani Jr

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.

22

Introduo ao JBoss AS 7

Mauricio Magnani Jr

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

23