Anda di halaman 1dari 20

Explorando o WildFly 8

Fique por dentro


Neste artigo conheceremos as novidades do recm-lanado WildFly 8, substituto do JBoss Application
Server 7. Para isso, sero abordados os recursos acrescentados ao produto e as melhorias efetuadas no
funcionamento desta nova verso.
Conhecer os recursos de um servidor de aplicaes um pr-requisito essencial a todo desenvolvedor que
busca alcanar o melhor desempenho para suas aplicaes. Com a nova soluo da JBoss, esse desafio pode
ser alcanado atravs de diferentes e simples opes de configurao.
No final de 2012, a Red Hat realizou uma pesquisa pblica para determinar um novo nome para o JBoss AS.
A escolha foi feita atravs de uma enquete publicada no site da empresa que durou alguns dias, e a troca do
nome para WildFly, segundo a companhia, representa uma nova fase do software, bem como o surgimento
da prxima gerao dos servidores de aplicao.
Assim como nas verses anteriores, o produto ser mantido por um grupo de desenvolvedores no formato de
cdigo aberto e, aquilo que for implementado neste modelo e apresentar estabilidade, continuar servindo de
base para o lanamento do pacote pago do servidor de aplicao que compe a soluo JBoss Enterprise
Application Platform.
Entre as novidades, esto o alinhamento do produto com a plataforma Java EE 7, menor tempo para
inicializao, maior economia de memria, implementao de um novo log de auditoria e o controle de
acesso baseado no uso de papis.
Neste artigo, sero comentadas todas estas caractersticas mencionadas, bem como no deixaremos de fora
outras no menos importantes. Veremos que os novos recursos esto divididos em duas partes: os que dizem
respeito ao funcionamento do produto, e os que atingem diretamente o cotidiano do desenvolvedor.
Para concluir, aprenderemos a realizar configuraes administrativas importantes atravs de trs formas
diferentes de gerenciamento do servidor de aplicao.
Novidades no funcionamento
bvio que, como qualquer lanamento de software, o WildFly 8 no poderia deixar de lado novos recursos
e caractersticas de funcionamento melhoradas ou no existentes nas verses anteriores do JBoss AS.
Algumas delas sero detalhadas nas subsees seguintes para verificarmos o que mudou no produto.
Modos domnio e standalone
Assim como a verso 7 do JBoss AS, o WildFly conta com dois modos de funcionamento: o standalone,
baseado em um nico processo da JVM; e domnio, baseado em vrios processos da JVM, executados em
um ou mais hosts.
O gerenciamento do funcionamento do servidor feito de forma bastante parecida nos dois casos, porm,
pelo fato de possibilitar o funcionamento distribudo, o modo domnio apresenta um ponto central de
administrao chamado controlador de domnio (em ingls, Domain Controller).
A Figura 1 demonstra um cenrio de funcionamento do servidor no modo domnio envolvendo quatro
mquinas diferentes.

Figura 1. Exemplo de funcionamento em modo domnio. Fonte: Guia de Administrao do WildFly.


O Host 1 o Domain Controller, ou seja, o gerente do cluster. Alm dele, mais trs mquinas escravas esto
envolvidas no ambiente (Host 2, Host 3 e Host 4). Em cada uma delas, existe um Host Controller que faz a
comunicao com o Domain Controller quando alguma operao de leitura/escrita disparada , como
tambm o responsvel por inicializar/parar o processo individual do WildFly.
Para possuir um cenrio distribudo como o mostrado na Figura 1, no entanto, no significa que
necessrio investir em hardware de alta performance.
Os desenvolvedores do servidor de aplicao afirmam que o modo domnio consome recursos mnimos de
memria e processamento da mquina, e que este um quesito em que o WildFly se diferencia dos
concorrentes.
Outro recurso interessante apresentado no produto a possibilidade de obtermos mtricas de desempenho de
qualquer host que faz parte do domnio. Este um ponto importante, principalmente em cenrios que
envolvam infraestruturas muito grandes, pois temos como identificar mquinas que estejam com problemas
de performance, ou at mesmo sofrendo possveis ataques de hackers.
Gerenciamento e configurao unificados
Como era de se esperar, a configurao dos recursos no WildFly est mais fcil, uma vez que foi empregada
uma abordagem centralizada de gerenciamento promovida pelo Domain Controller. Nesta situao, mesmo
que voc esteja rodando o servidor no modo domnio, a configurao de todos os hosts envolvidos est
especificada de forma organizada em um nico arquivo.
2

Outra caracterstica importante est na arquitetura, que foi organizada em subsistemas. A configurao deles
fcil de compreender, pois segue padres inteligentes especificados nos arquivos XML do produto.
Isto significa que possvel excluir do servidor de aplicao os subsistemas que no forem necessrios no
seu ambiente. Por exemplo: se o projeto que vai rodar no WildFly no utiliza EJB, basta remover as linhas
que definem o subsistema Enterprise JavaBeans do XML.
No que diz respeito s formas de gerenciamento do servidor, possvel modificar ou obter parmetros de
funcionamento atravs das seis maneiras, listadas a seguir:
Alterando os arquivos internos do produto;
Executando instrues via linha de comando;
Acessando o console administrativo web;
Utilizando uma API Java nativa do WildFly;
Usando REST baseado em HTTP/JSON;
Acessando um gateway JMX.
Servidor web de alta performance incorporado (Undertow)
Um novo servidor web de alta capacidade de processamento foi criado para atender os requisitos de
performance do WildFly. Assim surgiu o projeto Undertow, um produto independente, patrocinado pela
JBoss, desenvolvido em Java e totalmente baseado na API New I/O.
Entre os recursos disponveis neste servidor web esto o suporte a Servlets 3.1 e a WebSockets, este ltimo
seguindo a especificao JSR 356.
Segundo os desenvolvedores do servidor web, ele tem a capacidade de processar milhes de conexes
simultaneamente. De acordo com testes realizados pela empresa de desenvolvimento de software
TechEmpower, o produto bateu concorrentes fortes de vrias linguagens no quesito taxa de transferncia,
comprovando o poder do Undertow (confira a seo Links).
Reduo no nmero de portas
Esta uma alterao que facilita muito a vida da equipe de infraestrutura. Para se adaptar aos servios de
computao em nuvem que rodam vrias instncias de mquinas virtuais em um nico servidor fsico , o
WildFly moveu todos os protocolos para serem multiplexados em apenas duas portas HTTP: uma para
gerenciamento (9990) e outra para as aplicaes (8080).
A Tabela 1 mostra os protocolos e servios que rodam em cada uma dessas portas.
Porta
9990
8080

Protocolos/Servios
Tipo
Gerenciamento
HTTP/JSON,
Atualizao
HTTP
Remota Gerenciamento
(Gerenciamento Nativo e JMX), Console Web de Administrao
HTTP (Servlet, JAX-RS, JAX-WS), WebSockets, Atualizao HTTP Aplicao
Remota (Invocao EJB, JNDI Remoto)

Tabela 1. Lista de portas utilizadas pelo servidor de aplicao WildFly.


3

Esta nova estratgia de conectividade foi motivada porque a execuo do WildFly configurado em modo
cluster em ambientes de nuvem deve ser cada vez mais praticada.
Esta realidade surgiu do crescimento da computao em nuvem e por conta da necessidade de elasticidade e
alta disponibilidade existente em grande parte das aplicaes atuais. Neste contexto, uma das provas da
aceitao do WildFly em infraestruturas com essas caractersticas vem da CloudBees, uma fornecedora de
plataforma como servio para aplicaes Java que anunciou o suporte ao novo servidor de aplicao antes
mesmo da verso final ter sido lanada.
Uso de papis para controle de acesso
O WildFly agora utiliza papis para o controle de acesso s operaes administrativas. Desta forma
possvel restringir a permisso de execuo de tarefas no servidor de acordo com a necessidade de cada
usurio. Os perfis existentes so: Administrator, Auditor, Deployer, Mantainer, Monitor, Operator e
SuperUser.
Cada um deles tem acesso a determinadas operaes como leitura/escrita de reas de configurao,
visualizao de operaes de auditoria, gerenciamento de usurios e execuo de operaes de runtime,
como iniciar ou parar servios.
O WildFly tambm permite a criao de grupos com um ou mais perfis associados. Por exemplo: possvel
criar o grupo desenvolvedor com os perfis Mantainer e Operator vinculados e depois associ-lo a um ou
mais usurios.
Log de auditoria aprimorado
O WildFly conta agora com um novo mecanismo de gravao de log de auditoria. Esta funcionalidade
permite determinar se instrues de gerenciamento do servidor sero registradas e se operaes de leitura de
configuraes tambm devem ser includas.
Os arquivos de log podem ser enviados para um servidor externo seguro e o formato padro de gravao o
JSON, facilitando a troca dos dados com algum plugin ou aplicativo.
Instalao facilitada de patches de correo
Outra melhoria para a equipe de infraestrutura foi a criao de uma nova estratgia de aplicao de patches
para correo de problemas no funcionamento do servidor. O procedimento pode ser feito inclusive
remotamente, atravs da utilizao do protocolo de gerenciamento do WildFly.
Novidades para o desenvolvedor
Do ponto de vista do desenvolvedor, o WildFly tambm no deixa a desejar ao trazer uma srie de melhorias
no funcionamento. Algumas inovaes facilitaro bastante a vida dos que produzem cdigo e os tpicos a
seguir mostraro o avano adquirido.
Certificao Java EE 7
O servidor de aplicao traz incorporado o que h de mais moderno no que diz respeito a Java EE. A verso
7 dessa especificao oferece uma srie de recursos que aumentam a produtividade, diminuem a
possibilidade de erros atravs da utilizao de melhores prticas de programao e permitem uma maior
integrao com servios em nuvem.

Entre as novidades presentes no WildFly esto o suporte a HTML 5, WebSockets, processamento de JSON,
uma nova verso do JAX-RS para trabalhar com servios RESTful, uma API para executar processos batch
e a atualizao das bibliotecas JPA, Bean Validation, JSF, CDI, JMS e JTA.
Todas essas tecnologias ajudam o desenvolvedor e facilitam em uma eventual mudana de servidor de
aplicao (para o GlassFish, por exemplo), j que fazem parte de um pacote padronizado de especificaes
que todos os produtos compatveis com a plataforma Java EE 7 devem adotar.
Inicializao mais rpida
Assim como na verso 7 do JBoss AS, a inicializao dos servios acontece de forma concorrente para
eliminar paradas desnecessrias e aproveitar a maior capacidade de execuo de tarefas dos processadores
com mais de um ncleo. Os desenvolvedores do servidor de aplicao prometem um tempo de inicializao
menor em torno de 10 vezes e garantem que o produto consegue ser mais rpido nesse quesito que os servlet
containers Tomcat e Jetty.
Outra abordagem bastante interessante a inicializao de algum servio no crtico por exemplo, o
suporte a processos batch , que passa a ser executada apenas quando h uma chamada ao recurso pela
primeira vez, economizando recursos.
Economia de memria aprimorada
Como forma de atingir uma melhor performance, foi feita uma reviso em vrios trechos de cdigo dos
servios de base do servidor. O procedimento resultou em respostas mais rpidas e em uma alocao menor
de memria no heap (ver BOX 1).
BOX 1. Heap
rea de memria criada pela JVM na qual so armazenados metadados de classes, mtodos carregados e
todos os objetos criados durante a execuo da aplicao.
Outra abordagem que ajudou na economia de memria foi a diviso do class loading em mdulos, ao invs
da tradicional abordagem hierrquica. O modelo foi projetado para que houvesse uma preveno na
duplicao de classes carregadas, com o intuito de facilitar o trabalho do garbage collector.
Por fim, o console de administrao foi feito de forma 100% stateless, ou seja, o software no armazena
informaes das requisies anteriores do usurio. Por esse motivo, os desenvolvedores do produto afirmam
que ele inicializa instantaneamente e requer memria zero para rodar.
Suporte web moderna
Como informado anteriormente, o servidor compatvel com a Java EE 7. Portanto, h suporte para
WebSockets, permitindo uma comunicao full-duplex (ver BOX 2) entre cliente e servidor. Este recurso
muito til em vrios tipos de aplicaes, como chats, mecanismos de sincronizao e sistemas voltados para
dispositivos mveis.
Outra novidade o suporte a JSON-P e a REST atravs da JAX-RS 2, o que alinha o produto a uma
arquitetura muito empregada atualmente em sistemas Java: o uso de front-end baseado em frameworks
JavaScript consumindo servios REST.
BOX 2. Full-duplex

Tipo de comunicao entre dois pontos em que o fluxo de dados bidirecional, ou seja, os pacotes podem
trafegar nos dois sentidos de forma simultnea.
Integrao com o Arquillian
O WildFly segue outra tendncia de mercado na rea de desenvolvimento: um investimento crescente na
poltica de cobertura de testes em aplicaes. Para isto, foi incorporado ao servidor o Arquillian, uma
plataforma de testes funcionais e de integrao para a camada de negcio.
Uma das grandes vantagens do Arquillian que ele permite que os testes sejam executados a partir do IDE
ou da ferramenta de build, facilitando a vida do desenvolvedor.
Instalando o WildFly
Diferentemente de alguns concorrentes, o WildFly s pode ser baixado em formato ZIP, e no existem
opes de download especficas de acordo com o sistema operacional. Para realizar o procedimento de
instalao, baixe o arquivo na seo de downloads do site do produto (confira a seo Links no final do
artigo) e descompacte o contedo na pasta de destino desejada. Este artigo baseia-se na verso 8.0.0.Final do
WildFly e a estrutura de diretrios gerada aps a extrao encontra-se exposta na Tabela 2.
Diretrio
<wildfly_home>/appclient
<wildfly_home>/bin
<wildfly_home>/bin/client
<wildfly_home>/docs/examples/config
<wildfly_home>/docs/schema
<wildfly_home>/domain
<wildfly_home>/modules
<wildfly_home>/standalone
<wildfly_home>/welcome-content

Contedo
Arquivos de configurao, rea para deploy e gravao de
alguns arquivos de controle.
Arquivos executveis e de configurao de inicializao e
parada, utilitrios de linha de comando e ferramenta de
diagnstico Java para ambientes Windows e Unix.
Arquivo JAR para uso em projetos no baseados em
Maven.
Exemplos de arquivos de configurao representando
vrios cenrios.
Arquivos de definio de schemas XML.
Arquivos de configurao, contedo de deploy e reas para
gravao de dados especficos do modo de funcionamento
domnio.
Armazena os mdulos usados pelo servidor.
Arquivos de configurao, contedo de deploy e reas para
gravao de dados especficos do modo de funcionamento
standalone.
rea com o contedo exibido na pgina de boas-vindas.

Tabela 2. Lista de pastas de uma instalao comum do WildFly.


Executando o WildFly
Para executar o WildFly, deve-se primeiro escolher entre dois modos de funcionamento: domnio ou
standalone. Ambos possuem vrias caractersticas semelhantes, porm existem algumas diferenas, como a
forma de gerenciamento dos ns quando criamos um cluster. Vamos detalhar os dois perfis mais um pouco a
seguir.
Modo domnio

O modo domnio executado a partir da chamada do arquivo domain.bat (plataforma Windows) ou


domain.sh (plataformas Unix e Linux), encontrados no diretrio <wildfly_home>/bin. Neste modo de
funcionamento h um ponto central de administrao (o Domain Controller, comentado anteriormente) pelo
qual podem ser controlados todos os hosts envolvidos no ambiente.
A partir deste n central possvel gravar informaes de configurao nos outros servidores que compem
a soluo e realizar o deploy de aplicaes em todo o grupo de mquinas do ambiente de cluster.
Os arquivos de configurao e a rea de deploy do modo domnio esto dentro da pasta
<wildfly_home>/domain. O contedo padro deste diretrio apresentado na Tabela 3.
Diretrio
configuration
content
lib/ext
log
servers
tmp

Contedo
Arquivos de configurao para o modo domnio, Host Controller e qualquer
servidor envolvido no ambiente.
rea interna para armazenamento de contedo de deploy manipulada pelo
Host Controller.
Pasta para colocar JARs referenciados por aplicaes publicadas no servidor.
Arquivos de log gravados pelo Host Controller e pelo Process Controller.
Local para gravao de arquivos de cada instncia do servidor de aplicao
pertencente ao domnio. Cada uma delas ter seu prprio subdiretrio.
Arquivos temporrios do servidor

Tabela 3. Lista de diretrios dentro da pasta domain.


Modo standalone
O modo standalone executado a partir do executvel standalone.bat ou standalone.sh, encontrados no
mesmo diretrio <wildfly_home>/bin.
Assim como o modo domnio, o standalone permite a configurao de ambientes de alta disponibilidade
atravs do uso de clusters, porm no existem os recursos de sincronizao e deploy de aplicaes no grupo
de servidores, j que no existe um ponto central de administrao.
Os arquivos de configurao e a rea de deploy do modo standalone esto dentro da pasta
<wildfly_home>/standalone. O contedo padro deste diretrio apresentado na Tabela 4.
Diretrio
configuration
data
deployments
lib/ext
log
tmp

Contedo
Arquivos de configurao para o modo standalone.
Armazena arquivos temporrios gerados pelo servidor para no perder o
sincronismo no caso de um reincio.
Diretrio para armazenar arquivos que podem ser publicados automaticamente
no servidor, como pacotes WAR e EAR.
Pasta para colocar JARs referenciados por aplicaes publicadas no servidor.
Arquivos de log do modo standalone.
Arquivos temporrios do servidor.

Tabela 4. Lista de diretrios dentro da pasta standalone.


Escolhendo entre modo domnio ou standalone

Como dito anteriormente, os dois modos permitem a montagem de clusters de alta disponibilidade. Isto
significa que a grande questo envolvida nesta escolha est relacionada a como os servidores sero
gerenciados, e no os servios que o seu ambiente fornecer, j que em ambos os casos o administrador do
servidor vai contar com os mesmos recursos.
Dessa forma, a estratgia de deciso por uma das opes pode seguir o seguinte raciocnio:
Se apenas um servidor for utilizado para rodar a aplicao, escolha o modo standalone. Ele mais leve e
mais simples de configurar;
No caso da utilizao de mltiplos servidores, a deciso pelo modo de funcionamento pode vir da
necessidade ou no de gerenciamento centralizado do ambiente. Em ambientes que envolvam uma
quantidade elevada de mquinas e onde for preciso sincronismo entre elas, o modo standalone totalmente
desaconselhado.
No entanto, podem haver situaes em que voc queira que uma parte das suas mquinas fique
temporariamente fora de sincronismo. Um caso real quando voc precisa publicar uma nova verso de um
sistema, mas deseja que a verso antiga fique sendo acessada por todos os usurios at que seja validado o
funcionamento da nova verso da aplicao.
Neste caso, podem ser criados mecanismos personalizados que sincronizem por etapas as configuraes
entre grupos de instncias standalone: primeiro, a sincronizao seria feita nos hosts que receberam a verso
nova do sistema, e somente aps a confirmao do administrador do WildFly, o procedimento seria feito nos
hosts restantes. Em situaes como esta, portanto, a escolha do modo de funcionamento vai depender das
caractersticas do ambiente desejado.
Executando o WildFly pela primeira vez
Em nossos testes, assumiremos que o host usa o sistema operacional Windows e vamos rodar o servidor no
modo standalone. Para realizar esta tarefa, abra o prompt de comando, entre no diretrio
<wildfly_home>/bin e execute standalone.bat (seria standalone.sh se voc estivesse no Linux ou Unix).
Aps a confirmao no console de que o servidor foi iniciado, abra o seu navegador e acesse o endereo
http://localhost:8080. A tela exposta na Figura 2 ser apresentada, confirmando que o WildFly est
rodando.

Figura 2. Tela de boas-vindas do WildFly.


Administrando o WildFly
Como dito no incio do artigo, existem seis formas de administrar o servidor de aplicao. Neste artigo
vamos detalhar as trs principais: via console web, atravs de instrues disparadas na linha de comando e
modificando os arquivos de configurao.
Administrando o servidor via console web
O console web uma aplicao com uma interface bastante moderna desenvolvida em GWT que acompanha
o produto. Para acess-lo, devemos abrir a URL http://localhost:9990. Ao entrarmos pela primeira vez neste
endereo, a tela mostrada na Figura 3 exibida, indicando que no foi criado um usurio administrativo
para gerenciar o servidor de aplicao.

Figura 3. Tela inicial de administrao do WildFly.


Para criar um usurio com acesso s operaes de gerenciamento do WildFly, precisamos executar algumas
instrues via linha de comando. Assim, abra o prompt de comando do Windows (se for no Linux, abra o
console), entre na pasta <wildfly_home>/bin e rode o executvel add-user.bat (no Linux, add-user.sh).
Como demonstra a Figura 4, o script ir perguntar que tipo de usurio voc deseja criar.

10

Figura 4. Tela inicial de adio de usurio via linha de comando.


Especifique que voc deseja criar um usurio de gerenciamento do servidor (opo Management User, letra
a) e aperte <ENTER>. Feito isso, informe o nome de usurio que voc deseja utilizar (se informar admin,
o script mostrar um aviso sugerindo a no utilizao deste valor, mas oferece a opo de confirmao) e
logo em seguida, a senha.
O WildFly sugere que ela tenha no mnimo oito caracteres compostos por letras, nmeros e pelo menos um
caractere especial. Se estas condies no forem satisfeitas, o script tambm exibir um aviso e confirmar
se voc realmente deseja usar uma senha fora do padro definido. Em seguida, informe a senha novamente.
No prximo passo, o script pede os grupos aos quais se deseja adicionar o usurio.
Como discutido anteriormente, os grupos so uma forma de facilitar a associao do usurio a vrios perfis
de maneira mais simples. Neste caso, vamos deixar em branco e apenas apertar a tecla <ENTER>. O script
solicita ento a confirmao do procedimento. Informe a letra y e tecle <ENTER>. Por fim, o utilitrio
questiona se o usurio ser utilizado para acesso a outro servidor. Digite a letra n e novamente aperte
<ENTER>.
Pronto! A partir deste momento voc pode testar o console web do servidor. Assim, acesse novamente o
endereo http://localhost:9990 e informe o usurio e a senha cadastrados. A Figura 5 mostra a tela inicial
do WildFly.

11

abrir imagem em nova janela


Figura 5. Tela inicial do console web.
Administrando o servidor via linha de comando
A segunda forma mais comum de administrar este servidor de aplicao atravs de instrues disparadas
via linha de comando. Para isto, o utilitrio jboss-cli.bat (no Linux, jboss-cli.sh) pode ser chamado para
gerenciar o controlador do domnio ou um servidor standalone. Para utiliz-lo, abra o prompt de comando
do Windows (no Linux, o console), entre na pasta <wildfly_home>/bin e rode a instruo jboss-cli.bat -connect, lembrando que o WildFly deve estar rodando para conseguir executar os comandos.
Por padro, o utilitrio funciona interativamente, o que significa que ele sempre aguardar pelo comando do
usurio (veja a Figura 6).

12

Figura 6. Interface de linha de comando aguardando comando do usurio.


Para sair do utilitrio, digite quit e confirme com <ENTER>.
possvel, no entanto, rodar comandos de forma no interativa. A diferena nesse tipo de abordagem que
o utilitrio vai executar os comandos sem pedir confirmao ou esperar alguma entrada de dados por parte
do usurio; uma abordagem essencial para a criao de scripts automticos pela equipe de infraestrutura.
Neste caso, basta passar o argumento --commands seguido do que se deseja executar no servidor. A Figura
7 mostra o exemplo do comando version, que exibe os dados do servidor e do ambiente envolvido.

Figura 7. Execuo de instruo via linha de comando de forma no interativa.


Como pde ser constatado, pedimos informaes atravs do comando version para o utilitrio e ele nos
retornou as verses de vrios softwares envolvidos no ambiente do servidor. A lista de instrues que podem
ser executadas via linha de comando, porm, bem extensa e um resumo das principais instrues de alto
nvel encontra-se na Tabela 5.
Instruo
cn (ou cd)
deploy
undeploy
Ls
quit
version
add-jms-queue
remove-jms-queue
add-jms-topic
remove-jms-topic
data-source

Descrio
Modifica o caminho do n atual para o especificado.
Publica uma aplicao no servidor.
Remove uma aplicao do servidor.
Lista o contedo do n atual.
Sai do utilitrio.
Exibe a verso do servidor e informaes do ambiente.
Adiciona uma fila JMS.
Remove uma fila JMS.
Adiciona um tpico JMS.
Remove um tpico JMS.
Permite adicionar, modificar ou remover um datasource.

Tabela 5. Lista de instrues de alto nvel do utilitrio de linha de comando.


13

Apesar de tantas funcionalidades, os comandos de alto nvel no resolvem tudo o que desejamos. Para isso
existem as instrues de baixo nvel, que permitem ler ou modificar os parmetros do servidor como se
estivssemos editando os arquivos XML.
Com o intuito de facilitar o acesso aos recursos, os desenvolvedores do WildFly estruturaram a configurao
do servidor como uma rvore de recursos, em que cada n permite que operaes de leitura e escrita possam
ser executadas.
A estrutura de uma operao est dividida em trs partes bsicas: um endereo (opcional em alguns casos), o
nome da operao e um conjunto de parmetros (opcional na maioria dos casos). O formato das operaes a
serem executadas pelo administrador do servidor tem o seguinte padro:
[(/tipo-de-n=nome-do-n)* : nome-da-operao [( [nome-do-parmetro=valor-do-parmetro (,nome-doparmetro=valor-do-parmetro)*] )]
A partir deste formato podemos observar que o endereo a ser acessado est especificado pelo trecho (/tipode-n=nome-do-n)*, a operao a ser executada, por nome-da-operao, e o conjunto de parmetros
passados encontra-se em [nome-do-parmetro=valor-do-parmetro (,nome-do-parmetro=valor-doparmetro)*].
Para facilitar o trabalho de quem est administrando o servidor, o utilitrio fornece a complementao dos
comandos atravs do uso da tecla <TAB>, o que pode ajudar bastante em algumas situaes. Um exemplo
de operao neste caso, de leitura descobrir qual porta est sendo usada pelo protocolo HTTPS. A
Figura 8 mostra esta instruo e o resultado dela.

Figura 8. Execuo de instruo para descobrir a porta utilizada pelo protocolo HTTPS.
Consultando o formato padro das operaes mostrado anteriormente, observamos que no comando
executado acessamos a rvore de configuraes do servidor a partir do tipo de n socket-binding-group
com o valor standard-sockets neste n que esto as configuraes de protocolo do WildFly e em
seguida entramos em outro tipo de n chamado socket-binding (filho do n standard-sockets) com o valor
https. Finalmente, para obtermos o nmero da porta, especificamos a operao read-attribute e passamos o
parmetro name com o valor port.
14

Ao administrarmos o servidor via linha de comando podemos executar operaes comuns que podem ser
disparadas em qualquer n read-attribute uma delas e serve para obter o valor de alguma configurao
do servidor e operaes especficas que pertencem a um conjunto restrito de recursos change-root-loglevel, por exemplo, s pode ser chamada no subsistema de logging. As operaes comuns so mostradas na
Tabela 6.
Instruo
add
read-attribute
read-children-names
read-children-resources
read-children-types
read-operation-description

read-operation-names
read-resource
read-resource-description
remove
validate-address
write-attribute

Tabela 6. Lista de operaes comuns para execuo via linha de comando.


Para uma descrio mais detalhada sobre o que pode ser realizado via linha de comando no WildFly,
consulte o Guia do Administrador do servidor de aplicao. O endereo est na seo Links.
Administrando o servidor via arquivos de configurao
A terceira opo para administrar o servidor de aplicao atravs da edio de trs arquivos XML. A
alterao de qualquer um deles permite modificar o funcionamento do WildFly, porm preciso conhecer a
responsabilidade de cada um para no efetuar algum procedimento equivocado e causar um funcionamento
incorreto do servidor. Os arquivos com as configuraes so os seguintes:
<wildfly_home>/domain/configuration/domain.xml: diz respeito configurao do domnio de forma
geral, como datasources criados, definies de interface, subsistemas utilizados, etc.;
<wildfly_home>/domain/configuration/host.xml: guarda parmetros de cada host que faz parte do
domnio;
<wildfly_home>/standalone/configuration/standalone.xml: armazena configuraes relativas ao modo
standalone. A maioria delas semelhante s do arquivo domain.xml.
importante ressaltar que quase todas as alteraes na configurao do servidor feitas via console web ou
linha de comando so refletidas nos arquivos XML mencionados. Por conta disto, os desenvolvedores do
produto recomendam que se evite a edio off-line dos arquivos XML.
As alteraes feitas neles podem facilmente ser sobrescritas, se ao mesmo tempo estiverem sendo realizadas
operaes no console web ou via linha de comando. Alm deste risco, o procedimento de alterao direta
dos arquivos oferece uma possibilidade maior de erro.
Configurando o WildFly no seu ambiente
Quando precisamos publicar uma aplicao web no WildFly, normalmente efetuamos ajustes de tuning para
obtermos melhor performance e, na maioria das vezes, tambm temos de configurar recursos necessrios
para o funcionamento do sistema, como datasources e sesses javamail. Com base nesta realidade, esta
seo tem por objetivo mostrar as principais configuraes efetuadas em grande parte dos ambientes de
produo.

15

Para isto, em cada um dos subtpicos a seguir, uma das trs principais maneiras de gerenciamento do
WildFly (console web, linha de comando e edio dos arquivos XML) ser abordada para vermos como usla na prtica.
Configurando a memria heap
Como padro, o WildFly utiliza 64Mb para o tamanho mnimo e 512Mb para o tamanho mximo do heap
nos modos domnio e standalone. Os dois modos, entretanto, recebem estes parmetros da JVM de forma
diferente. O modo domnio utiliza os arquivos XML, enquanto no modo standalone os argumentos esto em
um arquivo texto que lido pelo WildFly de forma automtica e transparente.
Isto acontece porque o modo domnio pode ter configuraes globais para todos os hosts que fazem parte da
soluo e, como existe um ponto central de gerenciamento do ambiente, o arquivo domain.xml relativo ao
Domain Controller usado para armazenar esses parmetros.
Assim, para os ambientes em que o WildFly est rodando no modo domnio e se deseja modificar a memria
heap, deve-se abrir o arquivo domain.xml e editar a linha 03 apresentada na Listagem 1.
Listagem 1. Trecho de configurao de memria do WildFly no arquivo domain.xml.
01 <server-group name="main-server-group" profile="full">
02
<jvm name="default">
03
<heap size="64m" max-size="512m"/>
04
</jvm>
05
<socket-binding-group ref="full-sockets"/>
06 </server-group>

J no caso de o modo standalone estar sendo utilizado, deve-se editar o arquivo standalone.conf.bat (no
Windows) ou standalone.conf (para Unix/Linux). Procure pelos argumentos -Xms e -Xmx (relativos ao
heap), e -XX:MaxPermSize (relativo ao PermGen). Todos eles so passados para a JVM no momento em
que chamamos o executvel do modo standalone.
Adicionando bibliotecas ao servidor
Colocar bibliotecas diretamente no servidor uma prtica recomendada porque muitas vezes temos mais de
uma aplicao utilizando os mesmos recursos. Quando realizamos este procedimento, evitamos que classes
sejam carregadas de forma duplicada na memria.
Como vimos anteriormente, o WildFly foi projetado para trabalhar com mdulos e atravs da configurao
de um novo mdulo que devemos adicionar um JAR ao servidor de aplicao.
Na simulao que iremos demonstrar, imagine que precisamos colocar o JAR de uma biblioteca em nosso
servidor. Para isto, nosso primeiro passo acessar a pasta <wildfly_home>/modules e dentro dela criar uma
estrutura de diretrios obedecendo a mesma organizao de pacotes do ncleo do projeto. Ao final, adicione
uma pasta chamada main para que o mdulo seja reconhecido corretamente pelo WildFly.
No nosso caso, o caminho final deve ser <wildfly_home>/modules/br/com/devmedia/projetoexemplo/main.
Dentro desta pasta, coloque o JAR do Projeto DevMedia e crie um XML chamado module.xml. Este arquivo
deve conter as definies da biblioteca utilizada, como possveis dependncias que ela tiver e o nome do
mdulo. O cdigo do arquivo XML deve ficar igual ao apresentado pela Listagem 2.
Listagem 2. Contedo do arquivo module.xml.
01 <?xml version="1.0" encoding="UTF-8"?>
02 <module xmlns="urn:jboss:module:1.0" name="br.com.devmedia.projetoexemplo">

16

03 <resources>
04
<resource-root path="projeto-devmedia-core-1.0.4.jar"/>
05 </resources>
06 </module>

Observe que na linha 02 informamos o nome do mdulo e na linha 04 colocamos o nome do JAR que foi
publicado na pasta. Estas informaes servem para o controle do servidor e so obrigatrias.
Configurando um datasource
A maioria dos sistemas utiliza bancos de dados para armazenar informaes. Devido a esta caracterstica,
uma das operaes mais comuns realizadas em servidores de aplicao a criao de datasources. O acesso
ao SGBD atravs deles um procedimento extremamente recomendado no desenvolvimento de aplicaes
pelos seguintes motivos:
Deixa a responsabilidade de gerenciar a conexo e a definio de parmetros do pool a cargo da equipe de
infraestrutura;
Evita que tenhamos que ficar manipulando usurio e senha do banco de dados atravs da aplicao;
Promove uma melhor utilizao das conexes, no caso da existncia de duas ou mais aplicaes que
compartilhem o mesmo banco de dados.
Dito isso, o primeiro procedimento a ser feito antes de criar um datasource disponibilizar o JAR com o
driver do banco de dados no servidor. Para este tipo de situao, temos duas opes: a primeira configurar
como um mdulo como explicado na seo anterior , e a segunda atravs de uma operao de deploy.
Esta ltima alternativa funciona apenas com drivers de banco de dados compatveis com JDBC 4, ou seja,
no se aplica a qualquer JAR e traz a vantagem de a publicao da biblioteca ser propagada para qualquer
instncia que seja incorporada a um domnio.
O outro mtodo, por sua vez, faz com que o administrador do servidor de aplicao tenha de configurar o
mdulo em cada instncia envolvida no ambiente.
Na nossa simulao, vamos configurar o driver como um mdulo do WildFly, e o banco utilizado para criar
o datasource ser o PostgreSQL.
Assim, baixe o driver compatvel com JDBC 4 do SGBD na URL informada na seo Links e coloque-o no
diretrio <wildfly_home>/modules/org/postgresql/main. Em seguida, salve um arquivo com o nome
module.xml dentro desta mesma pasta com o contedo da Listagem 3 para configurar o mdulo. Lembre-se
que o path do recurso (linha 04) deve mudar de acordo com o nome do arquivo baixado.
Listagem 3. Contedo do arquivo module.xml.
01 <?xml version="1.0" encoding="UTF-8"?>
02 <module xmlns="urn:jboss:module:1.0" name="org.postgresql">
03 <resources>
04
<resource-root path="postgresql-9.3-1101.jdbc41.jar"/>
05 </resources>
06 <dependencies>
07
<module name="javax.api"/>
08
<module name="javax.transaction.api"/>
09 </dependencies>
10 </module>

17

J a criao do datasource bastante simples. Neste exemplo, vamos realiz-lo atravs da linha de
comando. Para isso, assumiremos que o servidor j est funcionando no modo standalone. Com o driver do
banco de dados j enviado para o servidor, abra um prompt de comando do Windows (ou console, no Linux)
e entre na pasta <wildfly_home>/bin.
Logo aps, rode a instruo jboss-cli.bat --connect (jboss-cli.sh --connect no Linux). Agora, vamos fazer
com que nosso servidor de aplicao reconhea o driver do SGBD. Sendo assim, digite o comando a seguir
e confirme com <ENTER>:
/subsystem=datasources/jdbc-driver=org.postgresql:add(driver-name="org.postgresql",
name="org.postgresql", xa-datasource-class="org.postgresql.Driver")

driver-module-

O comando mostrado est executando a operao add a partir do tipo de n subsystem e passando o valor
datasources. Em seguida ocorre o acesso ao tipo de n jdbc-driver (filho de datasources) passando o valor
org.postgresql. Os valores entre parnteses so os parmetros passados para que o servidor de aplicao
reconhea corretamente o driver JDBC.
Analisando a instruo, podemos observar que o driver-name e o nome do recurso (valor digitado entre as
palavras jdbc-driver e add) batem com o nome do mdulo (org.postresql) especificado no arquivo
module.xml. Isto imprescindvel para que tudo seja corretamente configurado.
Aps a execuo do comando, ser exibida uma mensagem confirmando o procedimento. Agora que o
driver est sendo reconhecido pelo servidor de aplicao, vamos criar o datasource. Neste ponto,
precisamos de uma base de dados.
Para fins de simulao, vamos assumir que existe uma base de dados chamada javamagazine em um
servidor PostgreSQL local. Como j temos o banco, falta apenas criar o datasource atravs da instruo a
seguir:
/subsystem=datasources/data-source=PostgreSQLDS:add(driver-name="org.postgresql",
connectionurl="jdbc:postgresql://localhost:5432/javamagazine",
jndi-name="java:/JavaMagazine",
username="postgres", password="1234", driver-class="org.postgresql.Driver", min-pool-size=5, max-poolsize=10)
O comando apresentado est executando a operao add a partir do tipo de n subsystem e passando o valor
datasources. Em seguida ocorre o acesso ao tipo de n data-source (filho de datasources) passando o
valor PostgreSQLDS. Os valores entre parnteses so os parmetros passados para que as configuraes de
conexo do datasource sejam gravadas.
Nosso ltimo passo testar o datasource com o seguinte comando (lembre-se que o PostgreSQL deve estar
rodando):
/subsystem=datasources/data-source=PostgreSQLDS/:test-connection-in-pool
A instruo executada est entrando na rvore de configurao do servidor a partir do tipo de n subsystem
e passando o valor datasources. Em seguida ocorre o acesso ao tipo de n data-source (filho de
datasources) passando o valor PostgreSQLDS e a operao test-connection-in-pool executada. Se tudo
der certo, uma mensagem de sucesso ser exibida como retorno indicando que o datasource est pronto para
ser usado pelas aplicaes.
Efetuando o deploy de uma aplicao

18

A publicao de uma aplicao no WildFly pode ser feita de vrias maneiras: via linha de comando, atravs
do console web e, caso o servidor esteja rodando no modo standalone, o pacote (arquivo WAR, EAR, JAR,
SAR, etc.) pode ser colocado no diretrio <wildfly_home>/standalone/deployments. Em nosso teste,
veremos como esse procedimento efetuado atravs do console web e utilizaremos novamente o modo
standalone como base.
Publicaremos uma pequena aplicao web criada pelo autor cujo contedo possui apenas uma pgina JSP
para verificar o funcionamento do sistema (o endereo para download do arquivo WAR se encontra na seo
Links).
Aps efetuar o download do arquivo WAR, acesse o console web a partir do endereo
http://endereo_servidor:9990, entre com o usurio e a senha definidos anteriormente e escolha a opo
Manage Deployments. Em seguida, clique no boto Add. Na janela que ser exibida, clique em Escolher
Arquivo, selecione o WAR baixado e clique em Next. Na tela que surge, confirme ou mude os parmetros de
deploy gerados automaticamente e clique mais uma vez em Next.
Neste ponto a publicao j foi realizada, mas a aplicao ainda no est habilitada para uso. Para ativ-la,
clique em cima do nome da aplicao (se no tiver sido informado outro, ser jmweb.war), depois no boto
En/Disable e no boto Confirm na tela que surgir. Pronto! O sistema est disponvel para acesso, conforme
mostra a Figura 9.

abrir imagem em nova janela


Figura 9. Deploy efetuado com sucesso.
Caso queira visualizar a aplicao rodando, acesse o endereo http://endereco_servidor:8080/jmweb no seu
navegador.

19

Como pudemos verificar, o WildFly 8 chega com uma base consistente e bastante elogiada que surgiu na
verso 7 do JBoss AS. Porm, trata-se de um produto renovado, com uma srie de modificaes que devem
conquistar os adeptos de concorrentes como o GlassFish.
Entre essas novidades podemos citar o suporte recm-lanada Java EE 7, reduo no consumo de
memria, menor tempo de inicializao, um novo servidor web de alta performance e integrao com o
Arquillian.
No que diz respeito administrao do servidor, vimos que o console web uma ferramenta simples e de
fcil manuseio, assim como aprendemos a modificar os parmetros do servidor atravs de instrues via
linha de comando e da edio manual de arquivos XML.
Todas estas estratgias de gerenciamento do WildFly no apresentam grande complexidade e podem ser
facilmente compreendidas com uma rpida leitura da documentao. Estas caractersticas, somadas ao forte
apoio da Red Hat, tornam este produto um software diferenciado que certamente vai causar grande impacto
no mercado nos prximos anos.
Links
Datasheet de divulgao do WildFly.
http://design.jboss.org/jbossorg/branding/datasheets/pdf/
datasheet_wildfly.pdf
Testes da empresa TechEmpower mostram o poder de performance do Undertow.
http://www.techempower.com/blog/2013/10/31/
framework-benchmarks-round-7/
Pgina de download do WildFly.
http://wildfly.org/downloads/
Pgina de download do driver do PostgreSQL.
http://jdbc.postgresql.org/download.html
Pgina de download do WAR do projeto jmweb para teste de deploy no WildFly 8.
https://drive.google.com/file/d/0BxWhwJZjrYMrOFRqUjhlT2F6WE0/
edit?usp=sharing
Guia de administrao do WildFly.
https://docs.jboss.org/author/display/WFLY8/Admin+Guide
Primeiros passos com o WildFly.
https://docs.jboss.org/author/display/WFLY8/Getting+Started+Guide
Guia do desenvolvedor para o WildFly.
https://docs.jboss.org/author/display/WFLY8/Developer+Guide

20