Documente Academic
Documente Profesional
Documente Cultură
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
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
Introduo ao JBoss AS 7
Mauricio Magnani Jr
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
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/
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
Starting jboss-as: [ OK ]
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.
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/
Introduo ao JBoss AS 7
Mauricio Magnani Jr
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 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;
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
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.
Introduo ao JBoss AS 7
Mauricio Magnani Jr
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
Reinicie o Apache:
$ sudo service httpd restart
13
Introduo ao JBoss AS 7
Mauricio Magnani Jr
14
Introduo ao JBoss AS 7
Mauricio Magnani Jr
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
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
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
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"
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" }
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.
Livros
http://www.packtpub.com/jboss-as-7-configuration-deployment-administration/book
23