You are on page 1of 76

Java

06 Mudanas nas certificaes Java


Confira as alteraes e as novidades
Sumrio
[ Everton Coimbra de Arajo e Scheila Giongo ]

12 EJB 3.1 versus CDI


Java CDI pode substituir os tradicionalmente mal afamados EJBs?
[ Adam Victor Nazareth Brandizzi ]
Java

20 Por dentro do JavaFX 2


Java Uma nova plataforma para desenvolvimento de aplicaes ricas para Web
[ Luiz Carlos Querino Filho ]

34 Mantenha suas verses em dia


Java, Tutorial Automatizando o versionamento de projetos com SVN, Maven e Nexus
[ Rodrigo Branas ]

42 Alta disponibilidade com GlassFish


Java Cluster de servidores, balanceamento de carga e tuning
Boas Prticas

Ol, eu sou o DevMan! Desta p-


[ Pablo Bruno de Moura Nbrega ]
gina em diante, eu estarei lhe aju-
dando a compreender com ainda
54 Paradigmas da Mobilidade mais facilidade o contedo desta
Mobile Um estudo sobre as abordagens web, nativa e hbrida edio. Ser um prazer contar com
[ Pedro E. Cunha Brigatto ]
sua companhia! Confira abaixo o
que teremos nesta revista:
de Software
Engenharia

Engenharia 66 Testes no Scrum


de Software
Processo de Teste de Software adaptado ao Scrum
[ Juvenal Feitosa, Gustavo Alves e Felipe Furtado ]

Brinde na web desta edio

Vdeos
2 2 vdeo-aulas sobre o padro Template Method.

Para visualizar acesse o link:


http://www.devmedia.com.br/articles/listcomp.asp?keyword=jm105&codigobanca=javafx2

Gostou das vdeo aulas? O portal www.devmedia.com.br possui mais de 2 mil vdeo aulas e dezenas de cursos online sobre desenvolvimento de software!
Agora voc pode comprar as vdeo aulas que preferir e fazer sua prpria combinao de vdeos! Saiba mais em www.devmedia.com.br/creditos

Feedback D seu feedback sobre esta edio!


eu
s

A Java Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que voc, leitor, acha da revista!
D

sobre e

D seu voto sobre esta edio, artigo por artigo, atravs do link:
www.devmedia.com.br/javamagazine/feedback
s

ta
edio
Para votar, voc vai precisar do cdigo de banca desta edio, que : javafx2
Carta ao Leitor
Ano IX Edio 105 2012 ISSN 1676-8361

Edio

D
Editor
Eduardo Spnola (eduspinola@gmail.com) esde a sua primeira verso, o JavaFX, at ento, no chegou a se firmar como uma das
preferncias dos desenvolvedores Java. Apesar de ter recebido bons investimentos
Produo durante o perodo de seu lanamento, por diversas caractersticas e decises de projeto,
Jornalista Responsvel Kaline Dolabella - JP24185 a nova plataforma Java acabou no agradando como se esperava. Um dos motivos para isso se

Distribuio chamava JavaFX Script. Esta nova linguagem, no entanto, no acabou, mas agora, para criar
aplicaes RIA com JavaFX, podemos utilizar nossos slidos conhecimentos de anos de experincia
FC Comercial e Distribuidora S.A
com a tradicional e forte API Java. Assim, no temos mais a barreira inicial, facilitando sua adoo
Rua Teodoro da Silva, 907, Graja - RJ
e ajudando a alavancar mais uma importante e promissora plataforma Java.
CEP 20563-900, (21) 3879-7766 - (21) 2577-6362
Dessa forma, Por dentro do JavaFX 2 apresentar esta renovada tecnologia, voltada
Atendimento ao leitor implementao de aplicaes cliente ricas para a Internet em mltiplas plataformas. Para isso, uma
A DevMedia possui uma Central de Atendimento on-line, onde voc pode introduo tecnologia, seu histrico e principais recursos sero apresentados, junto a exemplos
tirar suas dvidas sobre servios, enviar crticas e sugestes e falar com um de prticos onde sero demonstradas algumas das suas funcionalidades.
nossos atendentes. Atravs da nossa central tambm possvel alterar dados
Mudanas nas certificaes Java retrata as mudanas em relao s certificaes Java da Oracle.
cadastrais, consultar o status de assinaturas e conferir a data de envio de suas
revistas. Acesse www.devmedia.com.br/central, ou se preferir entre em As novas siglas, alteraes em contedos aplicados, cursos obrigatrios, de preparao, realizados
contato conosco atravs do telefone 21 3382-5038. antes de algumas certificaes, e as categorias das certificaes envolvendo as plataformas Java SE,
Java EE e Java ME tambm sero abordadas.
Edies anteriores Mudando um pouco de assunto, o desenvolvedor Java EE pode se sentir confuso diante da
Adquira as edies anteriores da revista Java Magazine ou de qualquer outra
verso 6 desta plataforma porque algumas tecnologias parecem se sobrepor notadamente EJB
publicao do Grupo DevMedia de forma prtica e segura, em
e CDI. Sendo EJB uma tecnologia tradicionalmente complicada e improdutiva, o programador se
www.devmedia.com.br/anteriores.
pergunta se possvel substituir EJB por CDI, e como faz-lo. EJB 3.1 versus CDI explorar as
Publicidade duas possibilidades: trocar EJB por CDI ou usar CDI com EJB. Veremos que ambas so viveis, e
publicidade@devmedia.com.br 21 3382-5038 que a segunda opo pode ser vantajosa.
Anncios Anunciando nas publicaes e nos sites do Grupo DevMedia, voc Em Mantenha suas verses em dia vamos aprender como criar um processo de versionamento
divulga sua marca ou produto para mais de 100 mil desenvolvedores de todo o e como extrair o melhor das ferramentas SVN, Maven e Nexus para automatizar o lanamento
Brasil, em mais de 200 cidades. Solicite nossos Media Kits, com detalhes sobre de novas verses com segurana e estabilidade. A adoo de um processo de versionamento
preos e formatos de anncios.
automatizado ajuda a elevar o nvel de maturidade e organizao da empresa, garantindo um
Reprints Editoriais Se foi publicado na Java Magazine um artigo que controle rgido sobre as modificaes realizadas pela equipe de desenvolvimento.
possa alavancar as suas vendas, multiplique essa oportunidade! Solicite a
No artigo Alta disponibilidade com GlassFish, mostraremos como configurar um cluster com
reimpresso da matria junto com a capa da edio em que saiu, e distribua
esse reprint personalizado entre seus clientes. balanceamento de carga no GlassFish para alcanar alta disponibilidade. Em seguida, veremos como

Encarte de CDs Faa como nossos maiores anunciantes. Encarte um CD efetuar tuning no desenvolvimento de sistemas e nas configuraes do servidor para conseguirmos
com uma amostra de seus produtos na Java Magazine e atinja um pblico ganho de performance.
segmentado e formador de opinio. O artigo Paradigmas da Mobilidade visa proporcionar uma leitura objetiva sobre os paradigmas
nativo, hbrido e web, adotados na codificao de solues mveis. Atravs de uma anlise de
Java, o logotipo da xcara de caf Java e todas as marcas e logotipos baseados
aspectos como consistncia e desempenho de plataformas e tecnologias j estabelecidas, bem como
em/ ou referentes a Java so marcas comerciais ou marcas registradas da Sun
Microsystems, Inc. nos Estados Unidos e em outros pases. de outras mais recentes e muito bem cotadas no cenrio de mobilidade, alm de aspectos como a
disponibilidade de capitais financeiro e humano, convidamos o leitor para uma reflexo sobre a
aplicabilidade de cada uma destas propostas.
Fale com o Editor!
Diante do crescimento das Metodologias geis, em especial, do framework Scrum, diversos
muito importante para a equipe saber o artigo na revista ou no site Java Magazine, desafios surgem para as atividades de testes nestes ambientes. Pensando nisso, no artigo Testes no
que voc est achando da revista: que tipo entre em contato com o editor, informando
Scrum, os autores levantaram estes desafios e propuseram uma adaptao do processo de testes
de artigo voc gostaria de ler, que artigo voc o ttulo e mini-resumo do tema que voc
mais gostou e qual artigo voc menos gostou. gostaria de publicar: fundamental s atividades do Scrum.
Fique a vontade para entrar em contato com Aproveitem ao mximo esta edio, e boa leitura!
os editores e dar a sua sugesto! Eduardo Spnola - Editor da Revista
Se voc estiver interessado em publicar um eduspinola@gmail.com

Eduardo Oliveira Spnola


eduspinola@gmail.com
eduspinola.wordpress.com

Assine agora e tenha acesso a


todo o contedo da DevMedia:
www.devmedia.com.br/mvp
Seo Java Nesta seo voc encontra artigos intermedirios e avanados sobre Java

Mudanas nas
certificaes Java
Cursos obrigatrios, nomenclaturas e contedos
aplicados sofreram modificaes nas certificaes
Java geridas pela Oracle

S Resumo DevMan
er um profissional certificado Java ter um dife-
rencial na carreira, pois a certificao confirma a
aptido para a tecnologia. Devido sua real impor- De que se trata o artigo:
tncia, a certificao um assunto muito discutido entre O artigo apresenta as mudanas em relao s certificaes Java da
desenvolvedores, pois depende de quem faz e para que Oracle. As novas siglas, mudanas em contedos aplicados, cursos obri-
objetivo a obtm. A abordagem aqui apresentada busca gatrios, de preparao, realizados antes de algumas certificaes, e as
responder as principais dvidas de um programador, categorias das certificaes envolvendo as plataformas Java SE, Java EE
em relao a uma certificao Java. e Java ME tambm sero abordadas.
importante ter cincia que os exames de cer-
tificao, para os fabricantes que os mantm, so Em que situao o tema til:
documentos que formalizam a competncia de pro- Para desenvolvedores que desejam informar-se sobre as mudanas nas
fissionais para atuarem no mercado, com destreza e certificaes Java e conhecer os assuntos e objetivos de cada exame, bem
conhecimento, para o produto, tecnologia ou meto- como as habilidades fundamentais que so necessrias em cada prova.
dologia ao qual o certificado se aplica. Esta situao
pode ser comprovada quando se verifica, dentre os Mudanas nas certificaes Java:
pr-requisitos das vagas ofertadas, a necessidade de A tecnologia Java oferece, por meio da Oracle, uma srie de certificaes
certificaes e no mais apenas a experincia profis- de diversas categorias e perfis. Com a aquisio da Sun, algumas modifi-
sional comprovada. caes ocorreram em relao a estas certificaes. Um exemplo a troca
A certificao pode ser vista, de maneira anloga, como de nomenclatura, que agora constituda com a marca da Oracle. Alm
um atestado de competncia, um diferencial na carreira dessas mudanas, outras so exemplificadas no artigo, que contextualiza,
profissional, mas apenas obter a certificao, sem experi- em sua introduo, a importncia de ser um profissional certificado. As
ncia, no o suficiente. A certificao pode tambm ser certificaes Java abrangem trs reas: Java SE, Java EE e Java ME, e dentro
vista como um meio para o profissional testar e adquirir dessas reas so aplicadas quatro categorias de provas: Associate, Pro-
conhecimento, pois o processo de tornar-se certificado, fessional, Master e Expert. Nessas categorias existem vrias certificaes
alm de desafiar a profundidade e a amplitude de suas embutidas, as quais sero abordadas ao longo do artigo.
habilidades tcnicas, uma maneira de ganhar em ter-
mos de aprendizado e crescimento como profissional
de TI. Pode-se assumir que no s a obteno de uma
certificao, mas tambm a preparao para obt-la, De acordo com Kathy Sierra (uma das desenvolvedoras do
um ponto importante e positivo, pois uma maneira exame), passar no exame provar trs itens importantes para
organizada para se conhecer melhor o Java. o empregador atual ou futuro: que voc sabe das coisas; que sabe
Deste modo, importante que o profissional que como estudar e se preparar para um teste desafiador; e acima de tudo que
julga a certificao como algo no to relevante tenha conhece a tecnologia e est de acordo com os objetivos cobrados para tal
cincia de que existem empresas (de todos os portes) exame. Se um empregador tiver que optar entre um candidato que passou
que se preocupam em ter em sua equipe profissionais no exame e outro que no tenha passado, ele saber que o programador
certificados. certificado no demorar no aprendizado.

6 Java Magazine Edio 105


Uma pesquisa realizada pela Oracle afirma que candidatos que Nesta plataforma, a primeira categoria conhecida como Associate,
conquistam a certificao conquistam tambm um diferencial em ou OCA Oracle Certified Associate. Esta categoria obrigatria
suas remuneraes, recebendo um retorno slido de seu inves- para o profissional que deseja avanar para os demais nveis.
timento. Em uma base global, profissionais que so certificados Uma das mudanas realizadas foi em relao nomenclatura, que
ganham 13,7% a mais do que aqueles que no so certificados. anteriormente possua a marca da Sun em sua assinatura, sendo
Levando em considerao todas as regies do mundo, indivduos conhecida como Sun Certified Java Associate (SCJA).
certificados ganham significativamente mais do que aqueles que O objetivo que abrange o nvel OCA garantir que o candidato
no so certificados. esteja equipado com as competncias fundamentais, como os
Possuir uma certificao contempla questes como maior sa- conceitos bsicos sobre OO e conhecimentos gerais sobre tec-
tisfao no trabalho, um dos quesitos que exercem influncia na nologias Java. Nessa categoria est incluso a certificao Oracle
carreira profissional. Alm de atingir uma remunerao mais Certified Associate (OCA), Java SE 5/SE 6, que possui o cdigo de
elevada, como indicado na pesquisa, aqueles que se tornam Oracle exame 1Z0-850, anteriormente conhecida como Sun Certified Java
Certified tm mais confiana e credibilidade, so mais produtivos e Associate (SCJA) SE 5/SE 6. Est incluso tambm a certificao
possuem maiores chances de empregabilidade, fatores adicionais beta Oracle Certified Associate, Java SE 7 Programmer I (exame
que elevam a satisfao. 1Z0-803), para a verso 7 do Java.
Com a compra da Sun pela Oracle, foram anunciadas algumas Uma novidade que a certificao OCJA 7 obrigatria, ou
modificaes para as certificaes, mudanas essas abordadas ao seja, pr-requisito para realizar a certificao OCJP 7, descrita no
longo do artigo. No entanto, importante ressaltar que mesmo nvel Professional no decorrer do artigo. Esta obrigatoriedade se
aps as alteraes nas certificaes Java/Oracle, as certificaes justifica pelas mudanas que ocorreram no seu contedo, que foi
da Sun continuam a ser reconhecidas. totalmente reformulado, no possuindo os mesmos objetivos da
antiga OCJA. O contedo abordado na OCJA implicava em um
Novas siglas e provas conhecimento conceitual, com questes sobre fundamentos, mo-
Uma das mudanas nas certificaes Java est relacionada s delagem UML e orientao a objetos, bem como uma viso geral
nomenclaturas, que agora levam a marca Oracle em seus nomes. sobre a plataforma Java. Agora o contedo muito mais prtico,
As certificaes Oracle abrangem trs plataformas de desenvol- envolvendo questes que antes eram aplicadas apenas na OCP. Os
vimento: Java Platform, Standard Edition (Java SE); Java Platform, novos tpicos do exame cobrados na certificao OCJA so:
Enterprise Edition (Java EE); e Java Platform, Micro Edition (Java Noes bsicas sobre Java;
ME), detalhadas em sees especficas neste artigo. Trabalhando com tipos de dados Java;
Dentro dessas trs plataformas so aplicadas quatro categorias Criar e manipular Strings;
para as certificaes, com o objetivo de demonstrar o grau de co- Criando e usando Arrays;
nhecimento e habilidade de cada profissional, que so: Associado, Usando Loop;
Profissional, Master e Especialista. Trabalhando com Mtodos e encapsulamento;
Outra mudana, decorrente aps a Oracle se tornar detentora Trabalhando com Herana;
dos direitos sobre o Java, foi a incluso de mais quatro provas de Tratamento de excees.
certificao, somando agora um total de doze.
Com essa mudana de contedo na certificao Java SE 7, se
Java SE exige um conhecimento mais elevado devido aos novos conceitos
As certificaes para a plataforma Java SE buscam qualificar cobrados. Contudo, o profissional s tem a ganhar, pois acrescenta
profissionais que dominem a construo de aplicaes para o maior valor e credibilidade para aqueles que desejam obter a cer-
ambiente corporativo. Java SE contm todo o ambiente neces- tificao em Java SE 7, e demonstra que o profissional proficiente
srio para a criao e execuo de aplicaes Java, sendo a base nos mais recentes avanos em programao Java.
para desenvolver qualquer tipo de sistema, seja ela mvel, web Cabe destacar que o profissional que possui a certificao OCJP 5
ou desktop. Confira na Figura 1 as certificaes disponveis para ou OCJP 6 no necessita realizar a prova OCJA, pois seu certificado
essa plataforma. continua a ser reconhecido.
A segunda categoria da plataforma Java SE compreende a
habilidade profissional voltada para conhecimentos tcnicos
necessrios para gerir e desenvolver aplicaes, bases de dados
ou middlewares em ambientes corporativos. Essa categoria des-
crita como Professional, OCP Oracle Certified Programmer, cuja
nomenclatura era anteriormente conhecida como Sun Certified
Java Programmer (SCJP).
Ao alcanar a certificao OCP, evidencia-se que o programa-
Figura 1. Certificaes Java SE dor entende a sintaxe e as estruturas bsicas da linguagem de

Edio 105 Java Magazine 7


Mudanas nas certificaes Java

programao Java, sendo capaz de criar um aplicativo em Java baseados na web e aplicaes corporativas. A plataforma Java EE
que seja executado em servidores e sistemas desktop. inclui muitos componentes do Java SE e incide em um conjunto de
A categoria OCP composta pelas seguintes certificaes: Oracle protocolos, servidores e APIs que fornecem a funcionalidade para
Certified Professional (OCP), Java SE 5 Programmer (exame 1Z0- desenvolver aplicativos multicamadas com base na web. Confira
853), anteriormente conhecida como Sun Certified Java Program- na Figura 3 as certificaes disponveis para Java EE.
mer (SCJP SE 5); Oracle Certified Professional (OCP), Java SE 6
Programmer (exame 1Z0-851), conhecida anteriormente como
Sun Certified Java Programmer (SCJP SE 6); e Oracle Certified
Professional, Java SE 7 Programmer II (exame 1Z1-804).
A prova Oracle Certified Professional, Java SE 7 Programmer II,
est em fase beta. Os tpicos do exame dessa certificao ainda no
foram apresentados, pois parte de seu contedo foi para a OCJA 7.
O caminho para atingir a OCJP 7 descrito na Figura 2.

Figura 3. Certificaes Java EE

Algumas das certificaes aplicadas para essa plataforma pos-


suem como pr-requisito outras certificaes, como o caso da cer-
tificao Oracle Certified Professional, Java EE 5 Web Component
Developer, destinada a profissionais que possuem conhecimento
especializado em desenvolvimento de aplicaes para web servi-
ces e contedo dinmico para a web usando JavaServer Pages e
Servlets. Para realizar essa certificao pr-requisito que o pro-
fissional tenha sido aprovado em uma das seguintes certificaes:
Oracle Certified Professional, Java SE 5 Programmer (de cdigo
1Z0-853), ou Oracle Certified Professional, Java SE 6 Programmer
(de cdigo 1Z0-851). A certificao Oracle Certified Professional,
Java EE 5 Web Component Developer tambm sofreu alterao
em sua nomenclatura, sendo antes conhecida como Sun Certified
Figura 2. Caminho para a certificao Java 7 Web Component Developer (SCWCD) EE 5.
A Oracle Certified Professional, Java EE 5 Business Component
Caso o profissional j possua uma certificao profissional (SCJP Developer, anteriormente Sun Certified Business Component
ou OCPJP, qualquer edio) e deseja obter a certificao OCPJP Developer (SCBCD) EE 5, outra certificao aplicada na rea
SE 7, basta realizar o exame chamado de Upgrade, 1Z0-805. O exa- de conhecimento Java EE. Ela testa as competncias de progra-
me formado por questes sobre os assuntos que mudaram de madores com experincia em projeto, desenvolvimento, teste,
uma verso para outra. Alm desse exemplificado, h exames de implantao e integrao de aplicaes utilizando a tecnologia
Upgrade para outras certificaes. Deste modo necessrio estar EJB (Enterprise JavaBeans). O exame se aplica a profissionais que
atento para faz-los quando disponveis. desenvolvem aplicativos de negcios que utilizam componentes
A terceira categoria da plataforma Java SE o nvel Master, do lado do servidor.
destinado para desenvolvedores que tm amplo conhecimento e O exame que verifica a habilidade de um programador em
que estejam interessados em demonstrar proficincia avanada criar servios Web para aplicaes que utilizam componentes da
na linguagem. Esta categoria conhecida como OCM Oracle tecnologia Java o Oracle Certified Professional, Java EE 5 Web
Certified Master, anteriormente chamada de Sun Certified Java Services Developer (OCPJWSD), anteriormente conhecido como
Developer (SCJD). Dentro desse nvel aplicada a certificao Sun Certified Developer for Java Web Services 5 (SCDJWS). Esta
Oracle Certified Master (OCM), Java SE 6 Developer. Uma das certificao tambm est disponvel para a verso Java EE 6, com
mudanas que ocorreram nessa certificao que para realiz-la a nomenclatura alterada para Oracle Certified Professional, Java
necessrio que o profissional faa um dos cursos obrigatrios EE 6 Web Services Developer.
oferecidos pela Oracle (mais informaes sobre esses cursos so Na categoria Master da rea de conhecimento Java EE, atualmente
descritas no sub tpico Cursos preparatrios). se tem apenas uma certificao, a Oracle Certified Master, Java
EE 5 Enterprise Architect, anteriormente conhecida como Sun
Java EE Certified Enterprise Architect (SCEA) EE 5. Esse exame destina-se
As certificaes voltadas para o ambiente Java EE so destina- a arquitetos corporativos, responsveis pela arquitetura e design
das a profissionais que possuem conhecimento em aplicativos de aplicativos. Para realizao do mesmo, necessrio fazer um

8 Java Magazine Edio 105


dos cursos obrigatrios da Oracle (esse assunto ser abordado com de certificao. Atualmente entraram para essa lista de novas
maior nfase no sub tpico Cursos preparatrios). exigncias duas certificaes:
Para profissionais que desejam obter um diferencial na carreira 1. Oracle Certified Master, Java SE 6 Developer (Certificao de
em reas mais especficas, existem as certificaes sobre: JSF, Desenvolvedor Java);
anteriormente conhecida como Sun Certified Developer for the 2. Oracle Certified Expert, Java EE 5 Enterprise Architect (Certi-
JSF for the Java EE 6 Platform, e atualmente modificada para ficao de Arquiteto Java).
Oracle Certified Professional, Java Platform, Enterprise Edition 6
JavaServer Faces Developer; EJB, anteriormente chamada de Sun
Certified EJB Developer for the Java EE 6 Platform, e atualmente
Oracle Certified Professional, Java Platform, Enterprise Edition 6
Enterprise JavaBeans; e a certificao referente JPA, conhecida
como Sun Certified JPA Developer for the Java EE 6 Platform, que
ganhou o nome de Oracle Certified Professional, Java Platform,
Enterprise Edition 6 Java Persistence API.
Uma novidade da Oracle o lanamento da certificao Oracle
Certified Expert, Java Platform, EE 6 Web Component Develo-
per, que substitui a de cdigo 1Z0-894 (Oracle Certified Expert,
Java Platform, Enterprise Edition 6 JavaServer Pages and Servlet
Developer). Essa certificao destinada a desenvolvedores ex-
perientes em aplicativos Java, com conhecimentos e habilidades
para construir rapidamente aplicaes web adequadas a qualquer
servidor de aplicao Java EE 6, utilizando JSP e servlet. No h
mudanas em relao ao contedo aplicado no exame 1Z0-894,
apenas em seu cdigo, que agora passa a ser 1Z0-899. Figura 5. Caminho para a certificao na plataforma Java ME
Alm da certificao OCE acima descrita, foram disponibilizadas
mais trs novas certificaes para Java EE, a saber: Oracle Certified
Expert, Java Platform, Enterprise Edition 6 Enterprise JavaBeans
Developer (OCEJEJBD); Oracle Certified Expert, Java Platform,
Enterprise Edition 6 Java Persistence API Developer (OCEJJPAD);
e a Oracle Certified Expert, Java Platform, Enterprise Edition 6
Web Services Developer (OCEJWSD).

Java ME
Na plataforma Java ME, o objetivo certificar profissionais que
desenvolvem aplicaes utilizando Java Platform, Micro Edition,
destinada a dispositivos mveis, PDAs, aparelhos celulares, dentre
outros. Veja na Figura 4 a certificao disponvel para Java ME.

Figura 4. Certificao Java ME

A Oracle oferece para esse ambiente a certificao Oracle Cer-


tified Professional, Java ME 1 Mobile Application Developer,
anteriormente conhecida como Sun Certified Mobile Application
Developer (SCMAD). Observe na Figura 5 o caminho a percorrer
para atingir esta certificao.

Cursos preparatrios
Uma novidade que no existia na metodologia utilizada pela Sun
a realizao de cursos obrigatrios antes de fazer uma prova

Edio 105 Java Magazine 9


Mudanas nas certificaes Java

Para o candidato que deseja realizar qualquer uma dessas duas Everton Coimbra de Arajo
certificaes, necessrio fazer pelo menos um dos cursos Oracle everton@utfpr.edu.br
listados abaixo: Desde 1987 atua na rea de treinamento e desenvolvimento. mestre
Linguagem Java (Java Programming Language, Java SE 6); em Cincia da Computao, e professor efetivo da UTFPR, Campus Me-
Fundamentos de Java (Fundamentals of the Java Programming dianeira. Tem se dedicado s disciplinas relacionadas ao desenvolvimento de
Language, Java SE 6); aplicaes web e na persistncia de objetos, focando seus estudos e pesquisas
na plataforma Java e .NET. autor da Visual Books, com oito livros j publicados.
Desenvolvimento de aplicaes (Developing Applications with
the Java SE 6 Platform);
Anlise orientada a objetos e Design usando UML (Object-
Oriented Analysis and Design Using UML); Scheila Giongo
Tuning de performance em Java SE (Java SE Performance Tuning). giongo.scheila@gmail.com
Graduada em Tecnologia em Anlise e Desenvolvimento de Sistemas pela
Os cursos preparatrios so realizados de maneira presencial ou Universidade do Oeste de Santa Catarina (UNOESC - Campus Xanxer).
Possui especializao em projeto e desenvolvimento de sistemas baseados
on-line nos centros de treinamento oficiais da Oracle.
em objetos para ambiente internet, na Universidade Tecnolgica Federal do
Paran (UTFPR - Campus Medianeira). Trabalha como desenvolvedora web na Viasoft, empresa
Concluso especializada na produo de softwares de gesto empresarial.
Este artigo apresentou as mudanas e novidades referentes s
certificaes Java, que envolvem: mudanas nas nomenclaturas,
novos contedos abordados, novas provas e os cursos obrigatrios,
de preparao, realizados antes de algumas certificaes. http://www.profissionaisti.com.br/2010/04/a-importancia-das-
Alm disso, foram apresentadas as categorias que abrangem as certificacoes-para-o-profissional-de-ti/
plataformas Java SE, Java EE e Java ME, e as habilidades exigidas A importncia das certificaes para o profissional de TI.
aos profissionais, decorrentes de cada rea. http://www.devmedia.com.br/websys.2/webreader.asp?cat=6&revista=
A importncia de ser um profissional certificado traz somente javamagazine_72#a-1888
vantagens no mercado de trabalho, ficando a cargo do profissional Certificaes Java.
que tiver interesse em testar seus conhecimentos e/ou conquistar
http://infoblogs.com.br/view.action?contentId=250152&Anunciadas-
um diferencial em sua carreira, decidir qual a melhor certificao
certificacoes-Java-7-Beta.html
para seus objetivos.
Certificaes Java 7 Beta.
http://www.devsexperts.com/2011/10/04/certificacoes-java-7-beta/
D seu feedback sobre esta edio! Novidades sobre a certificaes Java 7 Beta.
Feedback
eu
https://blogs.oracle.com/certification/?page=8
s

A Java Magazine tem que ser feita ao


D

seu gosto. Para isso, precisamos saber Algumas coisas para considerar sobre certificao - Harold Green.
sobre e

o que voc, leitor, acha da revista!


s

ta
edio
http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_
D seu voto sobre este artigo, atravs do link: id=457&get_params=pillar_id:6
www.devmedia.com.br/javamagazine/feedback Certificaes e caminhos para certificao.

10 Java Magazine Edio 105


Edio 105 Java Magazine 11
Seo Java Nesta seo voc encontra artigos intermedirios e avanados sobre Java

EJB 3.1 versus CDI


CDI pode substituir os tradicionalmente mal
afamados EJBs?

E Resumo DevMan
nterprise JavaBeans (EJBs) sempre foram com-
ponentes supervalorizados pelas especificaes
Java EE. Entretanto, sua adoo foi menor do De que se trata o artigo:
que o esperado de uma tecnologia oficial to central. A Duas novas especificaes de Java EE: EJB 3.1 e CDI. Estas tecnologias
principal razo a imensa complexidade de desenvol- possuem, por vezes, funcionalidades que se sobrepem, e parece possvel
vimento. EJBs exigiam a criao de vrias interfaces, substituir EJBs por CDI. realmente possvel? Como? vantajoso? Veremos
frequentemente redundantes; o empacotamento de respostas para estas perguntas neste artigo.
componentes em intricadas estruturas de pacotes; o uso
de servidores de aplicaes complexos e pesados etc. Em que situao o tema til:
Todas estas desvantagens elevavam muito o custo inicial Tanto CDI quanto EJB 3.1 so especificaes oficiais Java EE, de modo
de se usar EJBs, de modo que sua adoo se manteve que muito positivo conhec-las. Alm disto, e ao contrrio de vrias
mais ou menos restrita a grandes organizaes. Como especificaes, so tecnologias muito simples, prticas, teis e podero-
alternativa complexidade, surgiram frameworks leves, sas. Assim, conveniente que o desenvolvedor as conhea para saber
como Spring, que proviam vrias das vantagens de EJBs quando positivo utiliz-las, como integr-las ou mesmo como substituir
com muito menos recursos e complicaes. uma por outra.
As especificaes da plataforma corporativa de Java,
porm, evoluram para tornar EJBs mais palatveis. EJB 3.1 versus CDI:
A API Java EE 6 foi o mais recente e significativo passo O desenvolvedor Java EE pode se sentir confuso diante da verso 6 da
nesta direo, com a especificao EJB 3.1. Esta verso plataforma porque algumas tecnologias parecem se sobrepor notada-
dispensa muito da complexidade tradicionalmente as- mente EJB e CDI. Sendo EJB uma tecnologia tradicionalmente complicada
sociada arquitetura, provendo inclusive um pequeno e improdutiva, o programador se pergunta se possvel substituir EJB por
mas significativo subconjunto da especificao maior, CDI, e como faz-lo. Este artigo explorar as duas possibilidades: trocar
chamado EJB Lite. EJB por CDI ou usar CDI com EJB. Veremos que ambas so viveis, e que
Por outro lado, Java EE 6 tambm prov um novo mo- a segunda opo pode ser vantajosa.
delo de gerenciamento de objetos chamado de Contexts
and Dependency Injection (CDI). Esta especificao
(redigida na JSR 299) acrescenta a Java EE um sistema de o uso de EJBs quando se precisa dos servios que eles provm..
injeo de dependncias e o conceito de escopos, alm de Entretanto, muitos se perguntam: por que usar EJBs quando estes
vrias funcionalidades como eventos, interceptadores, mesmos servios podem ser usados atravs de CDI, s que de
entre outros. Muito de CDI foi inspirado em alternativas forma muito mais simples? Alis, pode CDI realmente fornecer
EJB, como Spring, Guice e Seam. Muitas funcionalida- todas as funcionalidades providas por EJBs? o que veremos
des que eram formalmente suportadas apenas por EJBs neste artigo.
podem, agora, ser utilizadas atravs de CDI. Ademais,
CDI mais simples que EJBs inclusive a verso 3.1 e, Uma breve histria dos EJBs
semanticamente, mais poderoso e flexvel. O conceito de EJB surgiu no final dos anos 90 e incio da dcada
A sobreposio de funcionalidades das duas tecnolo- passada. O propsito principal da arquitetura era prover um
gias levantou suspeitas e gerou boatos sobre o futuro de meio padronizado de se desenvolver a lgica de negcio de uma
Java EE e, especialmente, dos EJBs. Por exemplo, vrios aplicao, em oposio lgica da interface com o usurio. Com
desenvolvedores j cogitam substituir completamente EJBs, teoricamente seria possvel executar toda a lgica de uma
EJBs por CDI. bem verdade que a JSR 299 especifica aplicao em um ou mais servidores, utilizando qualquer tipo de
como EJBs devem ser relacionados com a nova arquite- interface. Assim, a lgica da aplicao validao, processamento
tura de injeo de dependncias, e a documentao de de dados, persistncia etc. rodaria no servidor, e interfaces dos
Weld (a implementao de referncia de CDI) recomenda mais variados tipos applets, programas em Swing, aplicaes

12 Java Magazine Edio 105


web etc. apenas invocaria os mtodos da aplicao. Os diversos especiais (chamados frequentemente de ejb-jars porque seu
EJBs seriam utilizveis da mesma maneira, independentemente nome deve terminar com -ejb.jar) que precisavam de um descri-
de estarem no mesmo servidor ou no isto , seriam distribudos tor XML complicado chamado ejb-jar.xml. Se uma aplicao web
de maneira transparente. A Figura 1 mostra um esquema do que fosse utilizar EJBs, era necessrio adicion-los em um ejb-jar e,
se propunha. paralelamente, adicionar o cdigo web (JSPs e outras classes) em
um arquivo WAR; posteriormente, os ejb-jars e o WAR deveriam
ser empacotados em um outro arquivo, denominado EAR (de
Enterprise ARchive).

Figura 1. Relao entre EJBs e interfaces.


Figura 2. Estrutura de uma aplicao corporativa mais simples e mais comum que a supor-
Alm disto, EJBs provinham uma srie de funcionalidades tada por EJBs
que abstraam detalhes de plataforma para o programador. Por
exemplo, EJBs controlam transaes e concorrncia de threads Como consequncia disto, EJBs passaram a ser menos popula-
automaticamente. Com EJBs, possvel responder a eventos, res. Para tornar o cenrio ainda mais sombrio para este modelo
executar chamadas assncronas e criar timers. Ademais, EJBs so de arquitetura, uma srie de alternativas comeou a ser desen-
acessveis remotamente atravs de RMI e web services, podem volvida. A principal, foi, provavelmente, o framework de injeo
exigir autenticao (por exemplo, via JAAS) e ser encontrveis de dependncias Spring. Lanado em 2002 por Rod Johnson, o
atravs de JNDI. framework Spring tinha como propsito claro criar uma arqui-
tetura mais leve e produtiva que EJBs. O resultado foi bastante
Os protestos contra a especificao positivo: Spring consolidou-se como uma das melhores e mais
A plataforma obteve uma adoo respeitvel por grandes compa- populares tecnologias para desenvolvimento em Java, populari-
nhias, inicialmente. Entretanto, a excessiva complexidade dos EJBs zou o conceito de injeo de dependncias (que viria a ser ubquo
comeou a gerar problemas. Desenvolvedores frequentemente sen- entre os javeiros) e foi pioneiro em utilizar menos XML e adotar
tiam que havia pouco ganho real: se, por um lado, EJBs provinham pesadamente anotaes.
funcionalidades como transaes e controle de concorrncia, por
outro lado o grande nmero de interfaces requeridas, excees A contrarreforma com EJB 3.x
a tratar, descritores XML complicados, etc. tornavam o processo Em resposta s evolues dos frameworks concorrentes no
de escrev-los notavelmente complicado. mercado, os EJBs evoluram tambm. Mudanas significativas
Alm disto, muitas das funcionalidades providas por EJBs j aconteceram em EJB 2.0 como a adio de interfaces locais
no eram necessrias em inmeros projetos. Muitas aplicaes para invocaes de mtodos no mesmo contexto mas a grande
corporativas eram basicamente aplicaes web rodando em um revoluo veio com as verses 3.x da arquitetura.
nico servidor como mostra a representao na Figura 2 e o Foi com EJB 3.0, por exemplo, que o descritor de implantao
foco em programao distribuda dos EJBs apenas tornavam o ejb-jar.xml deixou de ser obrigatrio, tornando-se inclusive des-
desenvolvimento destas aplicaes mais complexo. Por exemplo, necessrio em um grande nmero de situaes. Em seu lugar,
na verso original da arquitetura a nica maneira de se invocar consistentemente adotaram-se anotaes, recm-adicionadas,
um EJB era atravs de CORBA, o que tornava muito custoso o poca, em Java 5; agora beans de sesso, interceptadores, timers,
processo de chamar um mtodo na prpria mquina. At mais entre outros recursos passaram a ser configurados via anotaes.
recentemente, os EJBs deviam ser empacotados em arquivos JAR Tambm se tornou possvel escrever EJBs como POJOs anotados,

Edio 105 Java Magazine 13


EJB 3.1 versus CDI

dispensando a implementao de interfaces como SessionBean e arquivos WAR. E tanto os ejb-jars quanto os arquivos WAR, assim
EJBHome. Por sua vez, as interfaces locais tornaram-se desneces- como quaisquer arquivos JAR necessrios, deviam ser agrupados
srias para invocar um mtodo de um EJB localmente no era em um arquivo EAR, que tinha seu prprio descritor, chamado
mais necessrio criar uma interface separada. application.xml. A Figura 3 apresenta um diagrama que representa
As anotaes no foram adotadas apenas para configurar EJBs, a estrutura de um hipottico arquivo EAR.
mas tambm para permitir a injeo de recursos. At EJB 2.x, a ma-
neira padro de se obter a referncia a um EJB era atravs da classe
InitialContext, que recuperava instncias de recursos atravs de
lookup. Um EJB na camada de servio, por exemplo, que fosse
utilizar um EJB da camada de persistncia seria implementado de
maneira semelhante Listagem 1. Em EJB 3.0, porm, possvel
injetar uma instncia de um EJB utilizando-se a anotao, como
visto na Listagem 2. Os dois exemplos de cdigo mostram como
a nova abordagem bem mais prtica, clara e sucinta.

Listagem 1. Exemplo de recuperao (lookup) de dependncias em EJB 2.x.

public class PessoaService {


public List<Pessoa> getPessoas() {
try {
InitialContext contexto = new InitialContext();
PessoaDAO pessoaDAO = (PessoaDAO) contexto.lookup(ejb/PessoaDAO); Figura 3. Estrutura de um arquivo EAR
return pessoaDAO.getPessoas();
} catch (NamingException e) {
e.printStackTrace(); Com EJB 3.1, possvel empacotar EJBs diretamente em um
return null; arquivo WAR. Os arquivos ejb-jar tornaram-se desnecessrios
}
e, com eles, o arquivo EAR, que tinha o propsito de associ-los
}
} interface web. Assim, na nova especificao, uma aplicao
web corporativa pode ter uma estrutura como a apresentada
Listagem 2. Exemplo de injeo de dependncias em EJB 3.0.
na Figura 4. Como dissemos, o descritor ejb-jar.xml no mais
public class PessoaService { necessrio, tambm.
@EJB
private PessoaDAO pessoaDAO;

public List<Pessoa> getPessoas() {


return pessoaDAO.getPessoas();
}
}

Uma das maiores mudanas foi no modelo de persistncia de


EJB 3.0. Houve uma migrao dos antigos beans de entidade Figura 4. Arquivo WAR contendo EJBs
(Entity Beans), altamente abstratos e complicados, para a Java Per-
sistence API (JPA). A nova API para mapeamento objeto-relacional As interfaces de negcio tambm se tornaram desnecessrias,
(ORM) menos abstrata que os beans de entidade antigos (cuja bastando anotar os beans com @Remote embora ainda seja reco-
especificao fora projetada para lidar com qualquer tipo de base mendvel cri-las. Alm disso, EJB 3.1 permite criar EJBs singletons,
de dados, no apenas as relacionais) e, por isto mesmo, muito que permitam compartilhamento de estado entre vrios servios,
mais simples. Por isto, embora JPA no seja um componente e chamada assncrona de mtodos atravs de anotaes.
da especificao de EJBs (pode ser utilizada em contineres de Entretanto, a novidade que provavelmente melhor demonstra
servlets, aplicaes de desktop ou mobile), ainda assim acabou o esprito simplificador de EJB 3.1 o conceito de EJB lite. Como
tornando os beans de entidade obsoletos. toda tecnologia Java, EJBs so retroativamente compatveis: uma
EJB 3.1 deu sequncia simplificao. Uma das evolues mais aplicao implementada em, digamos, EJB 2.0, deve rodar em
notveis foi a dispensa do formato Enterprise Archive (EAR). At um servidor de aplicaes que suporte EJB 3.1, ao menos com
EJB 3.0, uma aplicao corporativa devia ser empacotada em um poucas alteraes. Entretanto, o legado de verses anteriores
complexo arquivo EAR. Os EJBs da aplicao vinham dentro pode tornar o desenvolvimento de novos servidores de aplicaes
de arquivos ejb-jar; as classes responsveis pela interface web, realmente complicado, e os novos desenvolvedores Java EE tm
assim como JSPs e outros recursos, eram empacotadas dentro de geralmente pouco interesse em padres antigos. Para reduzir o

14 Java Magazine Edio 105


custo de implementar e compreender verses antigas do padro, Entretanto, Java EE 6 trouxe muito mais que EJB 3.1. De fato, junto
Java EE 6 apresenta o conceito de EJB lite, que um subconjunto com a nova verso dos EJBs foi apresentada uma especificao que
das especificaes de EJB 3.1. Deste modo, um servidor de apli- poderia muito bem ser concorrente do prprio EJB 3.1. Esta especifi-
caes que implemente apenas EJB lite deve prover as seguintes cao conhecida como Contexts and Dependency Injection isto , CDI.
funcionalidades:
Beans de sesso stateless, stateful e singletons; Contexts and Dependency Injection
EJBs com interface local e EJBs sem interface; De todas as novidades em Java EE 6, talvez no seja exagero
Interceptadores; afirmar que a mais revolucionria seja CDI. Esta nova especifica-
Gerenciamento de transaes; o, definida na JSR-299, trouxe para o mundo dos padres Java
Recursos de segurana de EJBs, tanto declarativos quanto pro- funcionalidades h muito populares em frameworks de terceiros,
gramticos; e como injeo de dependncia e ciclos de vida baseados em con-
Embeddable API isto , a API para execuo de EJBs dentro da texto. CDI se destacou, porm, por seu modelo de programao
JVM do cliente, geralmente para testes unitrios. inesperadamente simples e, ainda assim, singularmente poderoso
e flexvel. Este novo modelo consegue, alm do mais, manter
A prpria ideia de uma verso mais simples de EJB j seria compatibilidade retrgrada com padres Java EE e, notadamente,
suficiente para mostrar o comprometimento da especificao no exige nem centrado em EJBs.
Java EE 6 com a simplificao do desenvolvimento corporativo
em Java. De fato, EJB 3.1 (tanto a verso lite quanto a completa) - CDI um assunto amplo demais para ser abordado neste artigo, de modo que
bem mais simples e prtico que seus predecessores, e possvel assumimos que o leitor j possua algum conhecimento sobre ele. Caso necessite
que recupere ao menos boa parte do mercado que havia perdido estud-lo, a Edio 84 da Java Magazine inicia uma srie de artigos bastante
para as solues mais leves. instrutivos sobre o tema. H um link para o incio da srie ao final deste artigo.

Edio 105 Java Magazine 15


EJB 3.1 versus CDI

O que CDI oferece melhor alternativa para aplicaes que tenham uma arquitetura
Os desenvolvedores Java EE experientes no puderam deixar de semelhante apresentada na Figura 2, na qual toda a lgica
notar a duplicao de algumas funcionalidades de EJB em CDI. executada em um nico servidor. Mesmo a comunicao entre
Por exemplo, a injeo de dependncias via @EJB agora pode ser servios distribudos possvel de ser feita, hoje em dia, atravs
feita com a anotao @Inject, que, no obstante, muito mais po- de web services, seja com SOAP ou REST.
derosa: alm de permitir injetar EJBs entre si, tambm capaz de Neste contexto, um desenvolvedor pode se perguntar: h ainda
executar a injeo de dependncias nos POJOs conhecidos como alguma vantagem em utilizar EJBs? possvel abandon-los
beans gerenciados. Em outras palavras, @Inject no s atende a completamente em favor de CDI?
todas as necessidades atendidas por @EJB, como tambm permite
utilizar injeo de dependncias em objetos que no sejam EJBs. Assim, O que CDI no oferece
se um programador almejava criar EJBs para poder executar inje- A resposta para esta questo mais complexa do que pode
o de dependncias de acordo com os padres, j no o precisa parecer primeira vista.
fazer em Java EE 6. Apesar de todo o seu poder, CDI no prov vrias funcionalida-
des dos EJBs, inclusive algumas muito teis no desenvolvimento
- Beans gerenciados (managed beans) so todos os beans criados e gerenciados por de aplicaes web no distribudas. Por exemplo, CDI no fornece
CDI. Podem ser tanto EJBs quanto POJOs que satisfaam umas poucas condies controle de transaes automaticamente; EJBs, por outro lado,
(ser classe concreta, possuir construtor padro, etc.). podem fazer gerenciamento de transaes de maneira declarativa
e quase transparente.
Outro ponto em que CDI reimplementa funcionalidades de EJB Algumas funcionalidades de EJB teis para grandes aplicaes
de maneira superior o gerenciamento de ciclo de vida de beans. corporativas tambm no tm contrapartidas imediatas em CDI.
Enquanto beans de sesso podem ser apenas stateless (criado e o caso dos timers, que permitem agendar a execuo de mtodos de
destrudo a cada acesso), stateful (criado e destrudo quando o beans para momentos especficos. Outra funcionalidade relevante
desenvolvedor determina) ou, em EJB 3.1, singletons, um bean ge- so os mtodos assncronos. Estes mtodos, quando invocados, no
renciado pode ter praticamente qualquer ciclo de vida. Para nos bloqueiam a thread; ao invs disto, so executados paralelamente e
restringirmos apenas aos j providos por CDI, um bean gerenciado seus resultados podem ser recuperados posteriormente.
pode estar em um dos seguintes escopos: Provavelmente, porm, a maior deficincia de CDI, quando
Escopo de requisio: quando instanciado e destrudo a cada comparado com EJBs, seja a falta de facilidades para programa-
requisio; o distribuda. No possvel invocar beans gerenciados em
Escopo de sesso: quando associado a uma sesso e destrudo servidores diferentes de maneira transparente, por exemplo.
junto com ela; Outros recursos, como monitorao de beans via JMX, tambm
Escopo de aplicao: quando sobrevive por todo o perodo de esto ausentes, dificultando a depurao e monitoramento de
execuo da aplicao; ou aplicaes. CDI tampouco suporta pooling de instncias e beans
Escopo de conversao: geralmente associado a uma aba de gerenciados no so encontrveis via JNDI nem invocveis
navegador, e passvel de ser destrudo pelo programador. via JMS.
Muitas destas funcionalidades podem ser providas por exten-
Esta uma maneira muito mais flexvel, intuitiva e prtica de ses de CDI ou outras bibliotecas. Por exemplo, o projeto Apache
gerenciar o ciclo de vida de instncias e, novamente, independem MyFaces CODI, que um conjunto de extenses para CDI, prov
de EJB. Por outro lado, possvel colocar EJBs em qualquer um uma anotao @Transactional que declarativamente envolve beans
destes escopos. ou mtodos em transaes. Timers podem ser substitudos pelo
Ademais, assim como EJBs, possvel escrever interceptadores agendador Quartz; o projeto teria mais uma dependncia, mas
para os beans gerenciados de CDI. Os interceptadores de CDI so Quartz em si bem poderoso, at mais que os timers. Mtodos
consideravelmente mais simples e flexveis que os interceptado- assncronos, por sua vez, podem ser implementados com threads.
res de EJB. Caso os interceptadores no sejam exatamente o que Por fim, h extenses para tornar beans CDI mais fceis de acessar
o desenvolvedor deseja, CDI permite a criao de decoradores, remotamente boa parte delas oriundas do claudicante projeto
que, dependendo da situao, podem ser bem mais adequados. Seam 3 como RESTEasy CDI e Seam JMS. Futuramente, ainda
Como usual, interceptadores e decoradores de CDI podem ser mais mdulos estaro disponveis.
aplicados a EJBs tambm. Entretanto, razovel se perguntar se realmente compensa
Os criadores de CDI enfatizam bastante, tanto na JSR quanto utilizar estas extenses em boa parte dos casos. Muitas, talvez a
nas documentaes de referncia, que a nova tecnologia no maioria, destas extenses ainda est em amadurecimento ou tm
veio para substituir EJBs. Entretanto, CDI bastante semelhante futuro indefinido, como as providas por Seam 3. Alm disto, CDI
a frameworks como Spring, Seam e Guice, que se consolidaram integra muito bem com EJB, de modo que possvel delegar aos
como alternativas prticas a EJB. Oras, estes frameworks e, por EJBs o que CDI no pode fazer. Como EJB 3.1 muito simples de
extenso, CDI so frequentemente considerados como uma utilizar e EJB lite relativamente fcil de ser implantado at em

16 Java Magazine Edio 105


contineres de servlets, no absurdo se cogitar o uso de CDI com esquematicamente pela Figura 5, a Figura 6 mostra graficamente
EJB, o que , por sinal, a recomendao dos grandes patrocinadores a arquitetura ECB.
de Java, como Oracle e JBoss.

Usando EJB com CDI


De fato, utilizar EJB 3.1 e CDI pode tornar o desenvolvimento
muito mais simples.
Por exemplo, considere a classe PessoaDAO da Listagem 3.
A classe tem a responsabilidade de persistir uma entidade cha-
mada Pessoa no banco de dados; entretanto, o cdigo apresentado
fatalmente falharia, porque no haver nenhuma transao aberta.
Uma soluo seria gerenciar as transaes manualmente, o que
seria trabalhoso e prolixo. Outra opo seria usar uma extenso
de CDI, como o Hibernate CDI ou MyFaces CODI.

Listagem 3. Classe de DAO sem gerenciamento de transaes.

public class PessoaDAO {


@PersistenceContext(unitName=GerenciadorEntidade)
private EntityManager entityManager;
public void atualizar(Pessoa pessoa) {
entityManager.merge(pessoa); Figura 5. Representao esquemtica de uma aplicao MVC
}
}

A simplicidade de EJB 3.1


A terceira opo seria transformar PessoaDAO em um EJB. O desen-
volvedor Java EE antigo pode imaginar que isto excessivamente
complexo para um problema to simples, mas em Java EE 6 esta , de
fato, a soluo mais simples: basta anotar a classe com @Stateless:

@Stateless
public class PessoaDAO

E isto: nosso EJB est pronto, com controle de transaes; como


EJBs so tambm beans gerenciados de CDI, possvel injetar nosso
PessoaDAO em qualquer outro bean CDI e injetar qualquer bean
gerenciado em PessoaDAO.

O modelo Entity-Control-Boundary
No nosso exemplo, utilizamos EJBs para gerenciamento de
transaes, mas poderamos converter nosso bean em um EJB
para criar mtodos assncronos, torn-lo acessvel via JMS, acres-
centar um timer etc. O mais frequente, porm, em aplicaes web
de complexidade mdia, utilizar EJBs por serem transacionais,
mas de acordo com o modelo Entity-Control-Boundary (ECB), uma
variante do modelo MVC. Figura 6. Representao esquemtica de uma aplicao ECB.
Neste modelo, a aplicao possui trs camadas antes do view:
camada de entidades (que contm elementos persistentes ou - A grande vantagem do modelo ECB a separao entre a lgica de negcio e a
objetos no gerenciados), camada de fronteira (cujos componen- lgica de apresentao. Esta separao importante porque o cdigo da interface
tes so acessados por cdigo cliente) e camada de controle (que de uma aplicao tende a mudar muito, ao contrrio da lgica de negcio, que
intermedeia fronteira e entidade). A lgica de apresentao est mais estvel.
isolada no view, que utiliza a camada de fronteira. Por sua vez,
a lgica de negcio implementada nas camadas de entidade, Se nosso exemplo for convertido ao modelo ECB, a classe Pessoa
controle e fronteira. Se uma aplicao MVC pode ser representada pertenceria camada de entidade, e PessoaDAO pertenceria camada

Edio 105 Java Magazine 17


EJB 3.1 versus CDI

de controle. Haveria, porm, uma nova classe, chamada, digamos, Java EE para injeo de dependncias e gerenciamento de contexto.
PessoaFacade, que seria a camada de fronteira. Nesta arquitetura, o CDI inspira-se em muitos frameworks bem-sucedidos de terceiros,
EJB no seria mais PessoaDAO, mas sim PessoaFacade. Isto faz sentido que j resolvem inmeros dos problemas que Java EE atacava h um
porque se, digamos, executarmos um mtodo que faa duas opera- bom tempo. Os programadores Java para web no puderam deixar
es de persistncia, e a segunda operao falhar, provavelmente de se perguntar, ento: possvel substituir EJBs por CDI?
ser necessrio que ambas as operaes sejam canceladas, pois a Em boa parte dos cenrios, possvel sim abandonar EJBs, pois
primeira operao s faria sentido junto com a segunda. A classe muitos dos seus recursos j so fornecidos por CDI. verdade que
PessoaFacade apresentada na Listagem 4. h funcionalidades de Enterprise JavaBeans que no so supridas
por CDI (ao menos no ainda), tais como gerenciamento de tran-
- Outra vantagem de usar EJBs na camada de fronteira que isto permite que os saes; entretanto, so frequentemente fceis de implementar e
servios sejam providos remotamente, sejam distribudos etc. Considerando que um rico ecossistema de extenses para CDI est florescendo. Se
o custo de criar EJBs em Java EE 6 baixo, pode ser uma boa estratgia. voc deseja gerenciamento declarativo de transaes, por exemplo,
basta usar projetos como MyFaces CODI.
O papel de CDI neste cenrio fazer o que melhor faz: servir de Por outro lado, o desenvolvedor pode ter muito a ganhar se der uma
cola entre os componentes da aplicao. Os componentes internos chance a EJB 3.1. De fato, o desenvolvimento de EJBs na nova verso
do software no precisaro ser mais EJBs e sero injetados via to simples quanto a criao de beans gerenciados por CDI, e EJB tem
CDI, que vantajoso at mesmo para fazer injeo de dependn- a vantagem de j estar disponvel em servidores de aplicao. Muitos
cias em EJBs, como pode ser visto na Listagem 4. CDI tambm dos problemas que demandariam extenses de CDI so resolvveis
ficaria responsvel por processar eventos, executar intercepta- e, o mais importante, facilmente resolvveis com EJB 3.1.
dores e decoradores, gerenciar ciclo de vida, entre outros. Caso Resumindo, o desenvolvedor Java EE tem duas escolhas: utilizar
um componente interno da aplicao venha a necessitar de uma CDI com extenses ou utilizar EJB 3.1 com CDI ambas as solues
funcionalidade de EJBs, adapt-lo pode ser to simples quanto so viveis. recomendvel, porm, que o programador avalie se
acrescentar a anotao @Stateless. EJB uma soluo para seu problema. No final das contas, esta
a melhor notcia: EJB pode ser a soluo, agora, e no mais um
problema por si s.
Listagem 4. Classe de facade, que cumpre o papel de fronteira na arquitetura ECB
de nosso projeto.
Adam Victor Nazareth Brandizzi
@Stateless brandizzi@gmail.com
public class PessoaFacade { desenvolvedor em vrias linguagens. Programa em Java h
@Inject private PessoaDAO pessoaDAO;
quatro anos, trabalhando majoritariamente com Struts 2 e com a
public Pessoa criar(String nome, String usuario, String senha, int idade) { ferramenta de portais Liferay. licenciado em Computao pela Univer-
return pessoaDAO.criar(nome, usuario, senha, idade); sidade de Braslia e atualmente trabalha para SEA Tecnologia.
}

public List<Pessoa> getTodas() { http://jcp.org/en/jsr/detail?id=299


return pessoaDAO.recuperarTodas(); JSR 299 - a especificao de CDI.
}
} http://docs.jboss.org/weld/reference/1.0.0/en-US/html/
Manual de referncia de Weld, a implementao de referncia de CDI.
http://www.devmedia.com.br/post-18231-CDI-Contextos-e-Dependencias.html
Concluses CDI - Contextos e Dependncias (Artigo da Java Magazine 84
Java sempre teve o estigma de ser uma linguagem complicada, e explicando como utilizar CDI).
a plataforma Java EE era emblemtica neste sentido. Muitas de suas
tecnologias centrais, como EJBs, eram extremamente complexas, http://www.adam-bien.com/roller/abien/entry/simplest_possible_ejb_3_15
trabalhosas e confusas. Java EE 6, porm, reverte boa parte deste Artigo de Adam Bien explicando como usar CDI com EJB.
quadro, ao trazer evolues de frameworks de terceiros para as http://myfaces.apache.org/extensions/cdi/
especificaes especiais, alm de reformar tecnologias antigas. Pgina do projeto Apache MyFaces CODI.
Por exemplo, considere EJB 3.1. Esta verso de EJBs, que faz parte
de Java EE 6, torna ainda mais simples a verso anterior da tecnolo- D seu feedback sobre esta edio! Feedback
eu
gia, EJB 3.0, que j tinha tornado EJBs praticamente irreconhecveis
s

A Java Magazine tem que ser feita ao


D

de to simples, quando comparados com verses anteriores. seu gosto. Para isso, precisamos saber
sobre e

Entretanto, o carter obscuro e trabalhoso dos EJBs antigos era to o que voc, leitor, acha da revista!
s

ta
edio
traumatizante que os desenvolvedores Java EE ainda buscam ma-
D seu voto sobre este artigo, atravs do link:
neiras de evitar ter de lidar com EJBs, mesmo na nova verso. Isto se
tornou ainda mais desejvel com a introduo de CDI, a especificao www.devmedia.com.br/javamagazine/feedback

18 Java Magazine Edio 105


Edio 105 Java Magazine 19
Seo Java Nesta seo voc encontra artigos intermedirios e avanados sobre Java

Por dentro do JavaFX 2


Uma nova plataforma para o desenvolvimento de
aplicaes ricas para web

D Resumo DevMan
esde a popularizao da Internet, vemos uma
tendncia crescer de maneira constante: a con-
vergncia de aplicativos, anteriormente isola- De que se trata o artigo:
dos em um computador desconectado, para a Web. O artigo apresenta a tecnologia JavaFX 2.0, voltada ao desenvolvimen-
Dentro da janela de um navegador, no so somente sites to de aplicaes cliente ricas para a Internet em mltiplas plataformas.
que prendem a ateno do usurio agora, aplicativos, Para isso, uma introduo tecnologia, seu histrico e principais recur-
jogos e contedo multimdia saltam literalmente da sos so apresentados, junto a exemplos prticos onde so demonstradas
Internet para o computador do usurio. algumas das suas funcionalidades.
Essa tendncia de criao de aplicaes Web cada vez
mais parecidas (e at mesmo equivalentes ou superiores) Em que situao o tema til:
com outros programas tradicionalmente no dependen- A criao de aplicaes cliente ricas hoje um segmento em ascen-
tes da Internet e que so costumeiramente chamados so na rea de desenvolvimento de software. Os programadores Java
de aplicativos desktop culminou com o aparecimento contam agora com o JavaFX 2.0 como uma nova opo, poderosa e
de uma nova categoria de aplicativos, a dos aplicativos flexvel, nesta rea.
ricos para a Internet (Rich Internet Applications, ou sim-
plesmente RIA). Por dentro do JavaFX 2:
A ideia por trs deste tipo de aplicativo justamente A tecnologia JavaFX, recentemente atualizada para a verso 2.0,
dar ao usurio os mesmos recursos e a mesma sen- possibilita a criao de aplicaes cliente ricas para a Internet utili-
sao de utilizao que ele possui com um aplicativo zando um novo conjunto de controles e recursos grficos, aliados
desktop tradicional, desfrutando das bvias vanta- s vantagens da linguagem Java que j so familiares aos desenvol-
gens da conexo rede. Um aplicativo deste tipo, por vedores. No so somente aplicaes grficas e jogos que podem
ser executado na maioria dos casos dentro de um tirar proveito da tecnologia. Qualquer tipo de software cliente pode
navegador, torna-se acessvel em qualquer local onde ser desenvolvido utilizando seus recursos e evidentes vantagens na
o usurio tenha acesso a um browser e uma conexo elaborao de uma rica interface.
Internet.
Uma outra caracterstica marcante da aplicao rica
para a Internet que esta geralmente faz uso intenso A plataforma Adobe Flash uma velha conhecida dos desenvol-
de animaes e grficos em alta qualidade tanto que, vedores Web; com ela, os mais variados tipos de aplicativos so de-
atualmente, alguns dos exemplos mais populares de senvolvidos atualmente, de jogos e softwares multimdia a aplicativos
aplicativos nesta categoria so jogos e programas com tradicionais, por meio do uso do AIR (Adobe Integrated Runtime).
uso abundante de recursos de multimdia. A aposta da Microsoft em RIA, o Silverlight, foi lanado em
Este conceito das Rich Internet Applications, apesar de Abril de 2007 e um competidor direto do Adobe Flash. Em seu
ser desconhecido por muitos, no novo. Programas benefcio, est a possibilidade de criao de aplicativos usando as
deste tipo tm sido desenvolvidos h anos, por meio linguagens do framework .NET e o Visual Studio como ferramenta
de plug-ins para navegadores (como o Adobe Flash), de desenvolvimento.
virtualizao e uso intenso de JavaScript e Ajax. O Java ocupa a segunda posio nesta estatstica, com o diferen-
Atualmente, as trs plataformas mais utilizadas para cial de ser j veterana neste quesito afinal de contas, applets
desenvolvimento de aplicaes ricas para a Internet so Java so usados h anos para desenvolvimento de aplicaes ricas
(por taxa de presena no mercado http://www.statowl. para a Internet.
com/custom_ria_market_penetration.php): Mas alm dos applets, uma nova alternativa para desenvol-
Adobe Flash (95.60 %); vimento de aplicaes ricas em Java foi apresentada em Maio
Java (75.81 %); e de 2007 pela ento Sun (hoje, como sabemos, incorporada pela
Microsoft Silverlight (67.32 %). Oracle): o JavaFX.

20 Java Magazine Edio 105


O que JavaFX: introduo e um breve histrico tradicionais (usando controles padro, como botes e caixas de
Nas palavras da prpria Oracle, JavaFX o prximo passo na texto), quanto no uso de desenhos, animaes e grficos 3D;
evoluo do Java como plataforma de desenvolvimento de aplica- Um novo mecanismo de mdia, para reproduo de udio, vdeo
es cliente ricas. E a Oracle vai ainda mais longe: no item 6 do e streaming;
FAQ do JavaFX (http://www.oracle.com/technetwork/java/javafx/over- Fcil integrao com aplicaes e controles Swing existentes;
view/faq-1446554.html), a empresa indica que a tendncia o JavaFX Um novo plug-in para os browsers, que visa aumentar o desem-
assumir o posto do Swing como principal biblioteca de interface penho na execuo das aplicaes JavaFX e utilizar as vantagens
do usurio da linguagem. Isso no quer dizer pouca coisa. da acelerao grfica.
Inicialmente apresentada em maio de 2007, a primeira verso
oficial (1.0) s foi disponibilizada pela Sun em dezembro de 2008.
Nas suas primeiras verses, antes da chegada da 2.0, os aplicativos
JavaFX eram criados em uma linguagem de scripting especfica,
denominada JavaFX Script.
O cdigo escrito nesta linguagem era posteriormente compilado
em bytecode, podendo ser executado em qualquer sistema com o
Java Runtime instalado. Mantendo a tradio do Java, uma apli-
cao rica JavaFX pode ser executada em plataformas distintas,
como celulares com Java ME, sistemas operacionais da famlia
Windows e variaes de Unix (Linux, Solaris e Mac OS X).
O lanamento da verso 2.0 marcou uma mudana significativa
no JavaFX, j que a partir dela as aplicaes puderam passar a
ser escritas em cdigo Java nativo. O suporte ao JavaFX Script foi
removido nesta verso, mas graas disponibilizao pblica do
seu cdigo-fonte em 2007, ganhou uma possibilidade de sobre-
vida com a ajuda da comunidade (como por exemplo o projeto Figura 1. Tela do exemplo Ensemble, fornecido pela Oracle, apresentando um grfico criado
Visage http://code.google.com/p/visage/). em JavaFX 2.0
Agora, com o JavaFX 2, a soluo apresentada como a forma do
programador Java tradicional reaproveitar seu conhecimento na Assim como outras tecnologias similares, como o Adobe Flash,
linguagem para o desenvolvimento de aplicaes ricas. o JavaFX tambm ideal para criao de jogos, dos mais simples
(Figura 2) aos mais complexos, utilizando o j comentado suporte
Caractersticas e recursos do JavaFX acelerao grfica por hardware.
O JavaFX traz uma srie de caractersticas e recursos interes-
santes aos desenvolvedores, sejam eles programadores Java ou
no, como por exemplo:
Um conjunto de mais de cinquenta controles totalmente repagi-
nados, incluindo os tradicionais (como botes, caixas de entrada de
texto, etc.) e outros mais sofisticados, como grficos (Figura 1), tabelas
e at mesmo uma verso do popular acordeo (accordion) encon-
trado em bibliotecas JavaScript. Afinal de contas, uma aplicao sria
e detalhista, como, por exemplo, uma que demonstra os indicadores
financeiros de uma empresa, no precisa ser necessariamente feia;
Drag and drop de aplicativos: uma aplicao JavaFX executada
dentro de um navegador pode facilmente ser arrastada at a
rea de trabalho, ou outra pasta qualquer, e posteriormente ser
executada sem necessidade do browser;
A partir da verso 2.0, com a mudana de JavaFX Script para
cdigo Java nativo, fica ainda mais intuitiva e rpida a familiariza-
o de usurios veteranos da linguagem com a nova tecnologia; Figura 2. Tela do exemplo BrickBreaker, fornecido pela Oracle
Uma separao da interface grfica e da lgica realizada ade-
quadamente. Para isso, o JavaFX traz a FXML uma linguagem Todas estas vantagens j esto disponveis aos desenvolvedores,
de marcao baseada em XML para definio da interface; nas principais plataformas (Windows, Linux este ainda em
Mecanismo de acelerao grfica que aproveita diretamente verso preview e Mac OS X), j que o JavaFX 2.0 est includo
os recursos das GPUs mais modernas, tanto nas interfaces mais diretamente no JDK 7.

Edio 105 Java Magazine 21


Por dentro do JavaFX 2

Quanto s ferramentas de desenvolvimento, o NetBeans, na javafx.scene.media: Media, para representar um arquivo; MediaPlayer,
verso 7.1.2 (a mais atual no momento da elaborao deste artigo), para reproduzi-los; e MediaView, para exibir a mdia como um n
possui suporte completo criao de projetos JavaFX 2, bem como no grfico de cena.
depurao dos mesmos. Como se trata de uma arquitetura multiplataforma, tambm
Para criao das interfaces grficas, a Oracle disponibiliza o so disponibilizados layouts para um correto e flexvel agru-
JavaFX Scene Builder. Com ele, o desenvolvedor pode montar pamento dos controles visuais dentro do grfico de cena. Estas
sua interface graficamente, arrastando os controles pela tela, e classes, do tipo container, esto disponveis no pacote javafx.
o cdigo apropriado em FXML ser gerado automaticamente. scene.layout.
Seguindo o preceito que uma plataforma de aplicaes ricas deve
Arquitetura do JavaFX utilizar bastante os recursos grficos, no faltam ao JavaFX classes
O JavaFX possui uma arquitetura interna dividida em camadas, para transformao 2D e 3D, assim como diversos efeitos visuais.
onde, como base principal, est a mquina virtual Java (Figura 3). Com as classes do pacote javafx.scene.transform, possvel realizar
No centro da arquitetura esto os componentes responsveis pela a translao e rotao de um n no grfico de cena, nos eixos x,
renderizao grfica (Prism), o toolkit de janelas (Glass) e os me- y e z. J no pacote javafx.scene.effects, encontram-se classes para a
canismos de suporte multimdia e interface Web. Na parte mais aplicao de diversos efeitos grficos em um n, como sombra e
externa, encontram-se as APIs pblicas do JavaFX e o grfico de reflexo, por exemplo.
cena (Scene Graph). Um outro elemento importante da arquitetura do JavaFX 2 a
O grfico de cena uma estrutura hierrquica composta por linguagem de marcao FXML. Baseada em XML, ela utilizada
ns (nodes) os elementos da interface do usurio. Para cada para definio da interface de uma aplicativo JavaFX. Criar uma
um destes elementos so definidas propriedades e eventos, assim interface JavaFX usando FXML, e no diretamente pelo cdigo
como se faz no tradicional toolkit Swing. Complementando o Java (o que tambm perfeitamente possvel), traz a vantagem
grfico de cena, na mesma camada, est a API pblica do JavaFX, da separao entre a lgica da aplicao e a definio da sua
constituda de classes para animaes, mdia e interao com os aparncia. Dentro do padro de desenvolvimento em camadas
controles visuais, entre outras. MVC (Model-View-Controller), pode-se dizer que a interface em
FXML se encaixa como a viso (View) da aplicao.
Um arquivo com a definio FXML de uma tela pode ser criado
diretamente em cdigo XML, por meio de um editor de texto sim-
ples, ou com o uso do JavaFX Scene Builder. Com este ltimo, o
usurio cria a tela arrastando e posicionando os controles visuais,
e o cdigo FXML gerado automaticamente.
No existe nada melhor para conhecer uma nova plataforma de
desenvolvimento do que por as mos na massa. Visando propor-
cionar um melhor entendimento do JavaFX, de sua arquitetura e
Figura 3. Diagrama da arquitetura do JavaFX 2 (adaptado da documentao da Oracle) funcionalidades, sero demonstrados a seguir exemplos prticos
que abrangem os conceitos fundamentais na elaborao de um
O sistema grfico do JavaFX est indicado pelos elementos de aplicativo baseado nesta tecnologia.
cor azul-escuro no diagrama da Figura 3. O Prism um elemento
fundamental nesta estrutura, sendo responsvel pela renderizao
grfica, utilizando para isto DirectX em sistemas Windows, Open-
GL em Mac e Linux, e Java2D quando a acelerao por hardware
no est disponvel.
O Toolkit Quantum o responsvel por unir o Prism, o toolkit
de janelas Glass, o mecanismo de mdia e o mecanismo de Web, Tutorial
para ento disponibiliz-los camada da API pblica e do grfico
de cena. Os controles visuais do JavaFX, parte do toolkit de janelas
Glass, so inseridos como ns no grfico de cena. A aparncia Instalando e testando o JavaFX 2
destes controles pode ser definida por meio de folhas de estilo Para desenvolver aplicativos em JavaFX, inicialmente, era ne-
CSS, o que facilita a padronizao e configurao da interface do cessrio obter o SDK apropriado como um download parte.
aplicativo. Porm, as verses mais recentes do JDK 7 para sistemas opera-
Com relao mdia, existe suporte nativo para arquivos de cionais Windows e Mac OS X j trazem o JavaFX SDK integrado.
udio em formato MP3 e WAV, bem como para vdeos no for- Para sistemas Linux, est disponvel uma verso beta, denomi-
mato FLV. A reproduo de arquivos de mdia extremamente nada JavaFX Developer Preview (o endereo para download est
simples, bastando para isso usar as classes existentes no pacote disponvel na seo Links, no final do artigo).

22 Java Magazine Edio 105


Os exemplos aqui demonstrados foram criados e testados com Na prxima tela, informe o nome do projeto como AloMundo-
a verso 7u4 do JDK, que inclui o JavaFX 2.1 (Figura 4), junto FX (Figura 6). Uma aplicao JavaFX, especificada pela classe
com o NetBeans 7.1.2. Para garantir total compatibilidade com os javafx.application.Application, contm sempre um Stage, que pode ser
exemplos que sero apresentados aqui, recomenda-se o uso de definido como o container superior de todos os objetos da tela (ou
verses iguais ou superiores a estas. seja, uma janela grosso modo). Dentro de um Stage, por sua
vez, fica uma Scene, que conter os controles visuais, como botes
e rtulos de texto. Na criao do projeto, o nome especificado
para ele ser usado automaticamente como o nome da sua classe
Application. Clique ento em Finalizar.

Figura 4. Tela inicial da instalao do JDK 7u4, que inclui o JavaFX 2.1 (em destaque)

Aps o encerramento da instalao padro do JDK 7u4, ser Figura 6. Definio do nome do novo projeto
apresentada a tela de instalao do JavaFX 2.1. Assim como no
caso do JDK, basta prosseguir clicando em Next (Figura 5). Ao Como pode ser visto na aba Projetos do NetBeans, a estrutura
finalizar a instalao, o sistema j estar pronto para executar e inicial de um projeto JavaFX bastante simples contm apenas
compilar aplicativos JavaFX. Para a criao dos exemplos, ser a biblioteca principal da plataforma e o arquivo com o cdigo da
utilizado o NetBeans verso 7.1.2, que tem suporte completo para Application.
a criao de aplicativos JavaFX 2.1. Todo projeto JavaFX criado pelo NetBeans contm um modelo
O primeiro exemplo consiste em uma verso JavaFX do tra- bsico de cdigo que j est pronto para ser executado e pode ser-
dicional Al, mundo, com o objetivo de testar se a instalao vir perfeitamente para testar a plataforma. Deste modo, pressione
da plataforma foi realizada corretamente. Assim, no NetBeans, a tecla F6 ou clique no boto Executar projeto principal do NetBeans
clique no menu Arquivo | Novo projeto.... Na janela que ser exibi- para execut-lo (lembre-se que, caso tenha mudado seu projeto
da, selecione a categoria JavaFX, esquerda, Aplicativo JavaFX, principal, clique com o boto direito do mouse sobre o projeto
direita, e clique em Prximo (Figura 5). AloMundoFX e selecione Definir como projeto principal). Em poucos
segundos uma janela com a aplicao JavaFX ser aberta, e ao
clicar no boto Say Hello world, esta mensagem ser exibida
no console, logo abaixo (Figura 7).
Vamos incrementar um pouco mais esta aplicao. Ao invs de
exibirmos a mensagem Hello World! no console, vamos mostrar
Al mundo! dentro da janela, usando um controle Label do pa-
cote javafx.scene.control. Para deixar o aplicativo com mais cara de
JavaFX, vamos aplicar um efeito DropShadow (Sombra), existente
no pacote javafx.scene.effect, neste Label.
Antes de passarmos ao cdigo-fonte, necessrio entender um
conceito importante em um aplicativo JavaFX a relao entre as
classes Scene e Stage, usadas na definio da tela.
Como foi abordado no tpico relativo arquitetura do JavaFX,
os elementos visuais do aplicativo so construdos em um gr-
fico de cena (Scene Graph). Este termo um velho conhecido
dos pesquisadores de programao grfica e realidade virtual,
Figura 5. Criando um novo projeto JavaFX

Edio 105 Java Magazine 23


Por dentro do JavaFX 2

e usado para determinar a estrutura das tradues para a palavra stage , li- Assim sendo, modifique o cdigo-fonte
hierrquica de elementos visuais em uma teralmente, palco. O Stage , deste modo, o da sua classe AloMundoFX de modo que ele
imagem ou tela. palco onde a(s) cena(s) acontecem. Dentro fique como o apresentado na Listagem 1
No JavaFX, um grfico de cena usado dele, colocada a Scene, e dentro da Scene, so (note que os comentrios foram re-
para definio de uma tela do aplicativo, inseridos os demais controles, como rtulos movidos para reduzir o tamanho da
por meio do uso da classe Scene. Um objeto e botes. O Stage funciona, sob o ponto de listagem).
desta classe , portanto, um grfico para vista de uma aplicao desktop tradicional, Neste primeiro projeto, importante ter
uma cena (ou tela) dentro programa. como sua janela principal. um entendimento especfico sobre cada
J a classe Stage f u nc iona como o Com os conceitos de Stage e Scene defini- uma das linhas do cdigo:
container de uma Scene. De fato, uma dos, podemos passar para a codificao. Linhas 3 a 14: so realizados os imports
para as classes utilizadas no programa;
Linha 16: a classe AloMundoFX herda a
Application, de javafx.application. Esta a classe
base de uma aplicao JavaFX o seu
ponto de entrada;
Linhas 18 a 20: o mtodo main() invoca o
mtodo launch(), passando os argumentos
recebidos. de launch(), herdado de Application,
a tarefa de iniciar a aplicao;
Linha 23: no mtodo start(), reescrito
da superclasse Application, que deve ser
colocado o cdigo inicial da aplicao.
Este mtodo, invocado automaticamente
na sequncia de inicializao do aplica-
tivo, recebe o Stage principal da aplicao
como parmetro, onde a cena dever ser
construda;
Linha 24: o mtodo setTitle() define o
texto da barra de ttulo do Stage (janela)
principal;
Figura 7. Execuo da aplicao AloMundoFX

Listagem 1. Cdigo da classe AloMundoFX.

01 package alomundofx; 26 btn.setText(As palavrinhas mgicas so...);


02 27 DropShadow sombra = new DropShadow();
03 import javafx.application.Application; 28 sombra.setOffsetY(3.5);
04 import javafx.event.ActionEvent; 29 sombra.setColor(Color.color(0.5, 0.5, 0.5));
05 import javafx.event.EventHandler; 30 final Label lab = new Label();
06 import javafx.scene.Scene; 31 lab.setEffect(sombra);
07 import javafx.scene.control.Button; 32 lab.setTextFill(Color.STEELBLUE);
08 import javafx.scene.control.Label; 33 lab.setFont(Font.font(null, FontWeight.BOLD, 42));
09 import javafx.scene.effect.DropShadow; 34 lab.setCache(true);
10 import javafx.scene.layout.VBox; 35 btn.setOnAction(new EventHandler<ActionEvent>() {
11 import javafx.scene.paint.Color; 36
12 import javafx.scene.text.Font; 37 @Override
13 import javafx.scene.text.FontWeight; 38 public void handle(ActionEvent event) {
14 import javafx.stage.Stage; 39 lab.setText(Al mundo!);
15 40 }
16 public class AloMundoFX extends Application { 41 });
17 42
18 public static void main(String[] args) { 43 VBox raiz = new VBox();
19 launch(args); 44 Scene cena = new Scene(raiz, 300, 100);
20 } 45 raiz.getChildren().add(btn);
21 46 raiz.getChildren().add(lab);
22 @Override 47 stagePrincipal.setScene(cena);
23 public void start(Stage stagePrincipal) { 48 stagePrincipal.show();
24 stagePrincipal.setTitle(Novo Al Mundo!); 49 }
25 Button btn = new Button(); 50 }

24 Java Magazine Edio 105


Linha 25: cria uma instncia de javafx.scene.control.Button, com o
nome btn;
Linha 26: define o texto que aparecer dentro do boto (o seu
rtulo);
Linha 27: instancia um objeto javafx.scene.effect.DropShadow, com
o nome sombra;
L inha 28: define o offset (deslocamento) da sombra no eixo Y.
Linha 29: define a cor da sombra. A cor indicada como trs Figura 8. Tela do aplicativo AloMundoFX
valores double, entre 0.0 e 1.0, representando, respectivamente,
vermelho, verde e azul; Com as classes, mtodos e conceitos que vimos neste aplicativo
Linha 30: cria uma instncia final de um objeto javafx.scene.control. simples, pudemos no somente testar o JavaFX, mas conhecer um
Label, onde ser exibida a mensagem Al mundo!; de seus conceitos fundamentais: a relao entre o Stage, a Scene
Linha 31: define o efeito a ser usado no Label. No caso, o efeito e os controles. Poderamos sumarizar esta relao, de maneira
de sombra criado anteriormente; simplificada, de acordo com o diagrama da Figura 9.
Linha 32: configura a cor de preenchimento do texto para Color.
STEELBLUE;
Linha 33: define a fonte a ser usada no texto. Isso realizado
por meio do mtodo esttico font(), da classe Font, que recebe como
parmetros:
- null: o primeiro parmetro indica o nome da famlia de fontes
desejada. O valor null determina que o runtime do JavaFX utilizar
uma fonte padro;
- FontWeight.BOLD: o segundo parmetro determina que ser usada
uma verso em negrito da fonte escolhida;
- 42: valor double indicando o tamanho da fonte, em pontos.
Linha 34: o mtodo setCache() importante por razes de de-
sempenho. Ele determina que o bitmap gerado pelo desenho do
texto e seu efeito sero salvos em cache, evitando a necessidade
de renderiz-lo novamente quando no for necessrio;
Linhas 35 a 41: define um manipulador de evento para o boto. Figura 9. Estrutura da interface grfica de uma aplicao JavaFX
Assim como os eventos que j conhecemos no Swing e em outras
plataformas, ser disparado quando a ao for realizada no objeto Esta abordagem de criao e configurao dos controles visuais
receptor (neste caso, quando um Action Event, como o clique dentro do cdigo-fonte Java vlida, e perfeitamente justificvel em
do mouse, ocorrer no boto); alguns casos. Porm, na maioria das vezes, mais interessante sepa-
L inha 43: instancia um objeto javafx.scene.layout.VBox. Um layout rar a lgica do programa da definio de sua interface, obedecendo
VBox (Vertical Box) alinha seus objetos em uma coluna, um aos preceitos de padres de desenvolvimento como o MVC.
abaixo do outro;
Linha 44: cria o objeto que representa a cena na interface. O Uma aplicao JavaFX dividida em camadas
construtor utilizado recebe trs parmetros: o n raiz da cena No exemplo anterior, criamos uma aplicao JavaFX onde os
no caso, o layout VBox; a largura da cena em pontos; e sua altura, seus componentes de interface so criados e dispostos na tela
tambm em pontos; diretamente por cdigo Java. Agora, veremos como uma aplicao
Linhas 45 e 46: adicionamos o boto btn e o rtulo de texto lab semelhante poder ser criada com uso da FXML, a linguagem de
aos filhos do layout VBox. Eles sero empilhados, de cima para marcao baseada em XML que o JavaFX usa na definio das
baixo, na ordem em que so adicionados; interfaces.
Linha 47: o Stage precisa saber qual sua cena. Por isso, invocamos Portanto, abra o NetBeans e clique em Arquivo | Novo projeto.... Na
seu mtodo setScene(), passando nosso objeto cena como parmetro; tela de escolha do tipo de projeto, selecione JavaFX na categoria,
Linha 48: finalmente, o mtodo show() do Stage principal invo- esquerda. No tipo de projeto, direita, marque Aplicativo FXML
cado, exibindo a janela. do JavaFX. Depois clique no boto Prximo (veja a Figura 10).
Na tela seguinte, defina o nome do projeto como AloMundo-
O resultado da execuo do cdigo da Listagem 1 pode ser FXML e clique em Finalizar. Ser criada uma estrutura de projeto
observado na Figura 8. Repare na qualidade da renderizao do como a indicada na Figura 11.
texto e sua sombra. Digna da qualidade obtida em um aplicativo Agora, ao invs de um nico arquivo, como tnhamos no Alo-
de desenho ou manipulao de imagens. MundoFX anterior, temos trs arquivos dentro do pacote:

Edio 105 Java Magazine 25


Por dentro do JavaFX 2

AloMundoFXML.java: contm a classe Appli-


cation, por onde o aplicativo inicializado
assim como tnhamos no projeto anterior;
Sample.fxml: contm a especificao
em FXML (que, como j vimos, baseia-se
em XML) da cena que define a tela do
aplicativo. No padro MVC, este arquivo
corresponde camada de viso do nosso
aplicativo;
Sample.java: esta classe onde colocare-
mos os mtodos associados aos eventos da
tela, ou seja, a interao do usurio com o
aplicativo por meio do mouse e do teclado.
Dentro do MVC, este arquivo representa o
controlador da viso.

Essa aplicao ser semelhante anterior,


entretanto, alm de entendermos como
funciona o uso dos arquivos FXML, vamos
dar uma incrementada nela:
Figura 10. Criando um projeto JavaFX com interface em FXML
O usurio poder inserir a mensagem
desejada, usando um componente caixa
de texto;
Utilizaremos outro efeito para o texto: o
reflexo.

O arquivo AloMundoFXML.java, gerado


automaticamente pelo NetBeans, precisa
de apenas uma pequena alterao: mudar
o ttulo da janela. Portanto, adapte sua
classe de modo que ela fique como a apre-
sentada na Listagem 2.
Figura 11. Estrutura de arquivos do projeto AloMundoFXML Como podemos reparar, o cdigo bas-
tante semelhante ao utilizado no exemplo
Listagem 2. Cdigo da classe AloMundoFXML.
anterior. A nica diferena significativa
est na linha 17. Nela, utilizamos o mtodo
01 package alomundofxml; load() da classe FXMLLoader para carregar o
02
03 import javafx.application.Application; layout da tela existente no arquivo Sample.
04 import javafx.fxml.FXMLLoader; fxml. Este mtodo retorna uma referncia
05 import javafx.scene.Parent; ao objeto raiz da hierarquia do grfico de
06 import javafx.scene.Scene;
07 import javafx.stage.Stage; cena, que armazenada na varivel root.
08 Posteriormente, na linha 19, definimos a
09 public class AloMundoFXML extends Application {
cena do Stage principal. Ela ser criada uti-
10
11 public static void main(String[] args) { lizando o n root como seu n raiz.
12 Application.launch(AloMundoFXML.class, args); Agora vamos modificar a interface do
13 }
aplicativo. Para isso, abra o arquivo Sample.
14
15 @Override fxml, clicando duas vezes sobre ele, e modi-
16 public void start(Stage stage) throws Exception { fique de acordo com a Listagem 3.
17 Parent root = FXMLLoader.load(getClass().getResource(Sample.fxml));
18 stage.setTitle(Gerador de texto artstico!);
Alteramos apenas alguns poucos elemen-
19 stage.setScene(new Scene(root)); tos do exemplo original. Primeiramente,
20 stage.show(); precisamos adicionar dois novos imports,
21 }
22 } para utilizarmos as classes de efeitos e
fonte (linhas 7 e 8).

26 Java Magazine Edio 105


Listagem 3. Cdigo do arquivo Sample.fxml. indicado o nome do mtodo que ser disparado, dentro do con-
trolador (Sample.java), quando o boto receber uma ao (no caso,
01 <?xml version=1.0 encoding=UTF-8?>
02
um clique). O programador pode especificar um nome qualquer
03 <?import java.lang.*?> para o manipulador do evento, desde que o valor aqui especificado
04 <?import javafx.scene.*?> corresponda a um mtodo existente no controlador Sample.java.
05 <?import javafx.scene.control.*?>
06 <?import javafx.scene.layout.*?>
Na linha 14 definido o rtulo de texto (Label) que exibir a men-
07 <?import javafx.scene.effect.*?> sagem. Aqui, possvel realizar todas as configuraes de estilo
08 <?import javafx.scene.text.*?> feitas pelo cdigo Java no exemplo anterior, como, por exemplo, a
09
10 <AnchorPane id=AnchorPane prefHeight=320 prefWidth=320 cor de preenchimento do texto, indicada em valor RGB no atributo
xmlns:fx=http://javafx.com/fxml fx:controller=alomundofxml.Sample> textFill. Repare que, contida no elemento <Label>, temos uma marca-
11 <children> o <effect>, e dentro dela a indicao do efeito desejado: Reflection.
12 <TextField id=text layoutX=60 layoutY=60 prefWidth=200
fx:id=text /> Em seguida, a marcao <Font> especifica a fonte que ser usada
13 <Button id=button layoutX=126 layoutY=90 text=Criar arte! para o texto (Arial Bold) e seu tamanho (42 pontos).
onAction=#handleButtonAction fx:id=button />
Basta agora escrevermos o cdigo do evento handleButtonAction()
14 <Label id=label layoutX=10 layoutY=180 textFill=#990000
fx:id=label> no arquivo Sample.java. Como neste mtodo mudaremos o texto
15 <effect> do objeto label, denominado text, tambm precisaremos adicionar
16 <Reflection />
ao Sample.java uma referncia a este objeto. O cdigo completo
17 </effect>
18 <font> para esta classe est na Listagem 4 (mais uma vez, os coment-
19 <Font name=Arial Bold size=42.0 /> rios adicionados pelo NetBeans foram removidos para diminuir
20 </font>
21 </Label>
o tamanho da listagem).
22 </children>
23 </AnchorPane>
Listagem 4. Cdigo da classe Sample.

Na linha 10, declarado o elemento AnchorPane, que mais um tipo 01 package alomundofxml;
de layout disponvel nas interfaces do JavaFX. Com ele, os contro- 02 import java.net.URL;
03 import java.util.ResourceBundle;
les podem ser posicionados livremente, em relao a sua margem 04 import javafx.event.ActionEvent;
esquerda (eixo X) e superior (eixo Y). Definimos que este nosso 05 import javafx.fxml.FXML;
AnchorPane ter altura (prefHeight) e largura (prefWidth) de 320 pontos. 06 import javafx.fxml.Initializable;
07 import javafx.scene.control.Label;
A ltima configurao do AnchorPane, fx:controller=alomundofxml. 08 import javafx.scene.control.TextField;
Sample, importantssima. Ela define o nome da classe que vai 09
atuar como controladora desta interface FXML. Dentro da classe 10 public class Sample implements Initializable {
11
Sample, colocamos os manipuladores de eventos de mouse e te- 12 @FXML
clados acionados na tela. No caso deste exemplo, ela vai conter o 13 private TextField text;
14
evento associado ao clique do boto.
15 @FXML
Na linha 11 aberto o elemento <children>. Dentro dele so coloca- 16 private Label label;
dos os ns filhos do layout. Na maioria dos casos, um controle do 17
18 @FXML
tipo layout definido como o n raiz da cena. Os demais controles
19 private void handleButtonAction(ActionEvent event) {
ficam ento hierarquicamente subordinados a ele. 20 label.setText(text.getText());
Adicionamos na linha 12 um elemento TextField, que a nossa 21 }
22
velha conhecida caixa de entrada de texto. Dentro da sua mar- 23 @Override
cao, so definidas as seguintes propriedades: 24 public void initialize(URL url, ResourceBundle rb) {
id=text: Informa o id que identifica este elemento dentro do 25 // TODO
26 }
arquivo FXML; 27 }
l ayoutX=60 e layoutY=60:
Informa a distncia em pontos, respectivamente, da margem es-
querda (X) e da margem superior (Y) do layout pai at este Assim como nos outros casos, reaproveitaremos bastante do
elemento; cdigo gerado pelo NetBeans. As excees ficam por conta de:
prefWidth=200: Define a largura do controle, em pontos; L inhas 16 e 17: declaramos uma varivel chamada label, do tipo
fx:id=text: Define uma varivel para acesso a este elemento pelo Label, e acima dela inclumos a annotation @FXML. Deste modo, esta
cdigo. varivel ser vinculada ao respectivo elemento label no arquivo
FXML;
No caso do boto, na linha 13, definimos um novo rtulo de texto Linhas 19 a 22: aqui est a definio do mtodo handleButton
para ele por meio do atributo text. Em onAction=#handleButtonAction, Action(), referenciado no FXML. Dentro dele, usamos a referncia

Edio 105 Java Magazine 27


Por dentro do JavaFX 2

ao label para mudar o seu texto para o con- Java, e outra onde um arquivo FXML etc.) e seu respectivo valor, e um grfico de
tedo do objeto text (a caixa de entrada de utilizado para esta finalidade. pizza (ou torta, como preferem alguns)
texto), tambm referenciado no FXML. Como voc pode perceber, as vantagens gerado, indicando a parcela de cada uma
do FXML so bvias: menor quantidade de destas categorias dentro dos gastos como
E somente isso que precisamos. Ao exe- cdigo (e consequente menos chances de um todo. A tela deste projeto ser elabora-
cutar o projeto, digitar um texto na caixa erros) e clara separao de camadas. da com o JavaFX Scene Builder.
e clicar no boto, a verso artstica da Porm, a criao dos arquivos FXML Para isso, abra o NetBeans e crie um
mensagem ser mostrada, como apresen- diretamente no cdigo XML tambm no novo projeto JavaFX, escolhendo Aplica-
tado na Figura 12. das mais atraentes. O cdigo FXML possui tivo FXML do JavaFX. Em seguida, defina
uma sintaxe rgida que deve ser obedecida, o nome do projeto como Despesas, e
Criando uma aplicao com o JavaFX e por ele no conseguimos ter uma noo remova estes dois arquivos criados auto-
Scene Builder precisa da aparncia final da tela, at a maticamente: Sample.fxml e Sample.java,
Os dois primeiros exemplos foram execuo do projeto. pois vamos criar a tela e seu controlador
simples e rpidos, mas serviram para po- Para nos auxiliar no processo de criao individualmente.
dermos entender as diferenas entre uma das telas, a Oracle disponibiliza o JavaFX O arquivo FXML com a especificao da
aplicao bsica, onde os controles so Scene Builder. Com ele, construmos as tela pode ser criado diretamente no Net-
instanciados e configurados pelo cdigo telas de modo grfico, arrastando e sol- Beans, e ser depois modificado no Scene
tando componentes, e o cdigo FXML Builder. Assim, clique sobre o nome do pa-
gerado automaticamente. cote despesas e, no menu, selecione Arquivo
O JavaFX Scene Builder pode ser obtido | Novo arquivo.... Na tela que ser aberta,
diretamente no site do JavaFX (veja o en- selecione a categoria JavaFX esquerda, e
dereo na seo Links). No momento da marque direita o tipo de arquivo, Modelo
elaborao deste artigo, o Scene Builder FXML. Depois clique em Prximo.
ainda estava em verso Developer Preview Especifique por fim o nome da classe
ou seja, beta mas j bastante estvel, como TelaDespesas e clique em Finalizar.
pronto para ser usado (Figura 13). Voc vai perceber que, alm do arquivo
Com o Scene Builder instalado, podemos FXML (TelaDespesas.fxml), a classe contro-
passar a um novo exemplo que utilizar ladora Java (TelaDespesas.java) tambm foi
esta ferramenta. gerada. Como nosso prximo passo abrir
O nosso prximo projeto ser um geren- o FXML no Scene Builder e modificar o seu
ciador de despesas pessoais. Nele, o usu- contedo, feche a aba relativa a este arqui-
rio inclui uma categoria de despesa (do vo (caso esteja aberta) no NetBeans.
Figura 12. Tela do aplicativo AloMundoFX em execuo tipo Alimentao, Combustvel, Educao,
Montando a tela no Scene Builder
Para customizar a cena do aplicativo
de despesas, precisamos abrir o Scene
Builder e carregar o arquivo FXML criado
no NetBeans. Na tela principal do Scene
Builder, clique no menu File | Open. Na tela
que ser apresentada, localize o arquivo
TelaDespesas.fxml, dentro da pasta src do
seu projeto, e clique em Abrir. Feito isso,
ser mostrada a tela padro criada pelo
NetBeans, como exibido na Figura 14.
Como ser elaborada uma nova tela,
necessrio remover o boto j existente
(Click Me!). Para exclu-lo, basta clicar
com o mouse sobre o mesmo e pressionar
a tecla Delete.
A interface do Scene Builder muito
semelhante de outras ferramentas de
construo de interface: esquerda, na
Figura 13. Tela do JavaFX Scene Builder parte superior, temos a palheta de con-

28 Java Magazine Edio 105


troles; tambm esquerda, mas na parte
inferior, temos uma viso da hierarquia
de controles dentro da cena; no meio,
a tela propriamente dita; e direita, as
propriedades do elemento selecionado
atualmente na cena.
O aplicativo de despesas precisa de um
tamanho de tela ligeiramente maior que o
atual, de forma a acomodar a tabela com
valores e o grfico. Para isso, use as alas
de redimensionamento ao redor da cena
para aument-la, deixando com uma altu-
ra e largura de cerca de 500 pontos. Voc
pode verificar o tamanho medida que
arrasta as bordas, ou direita, nas proprie-
dades pref Width e pref Height em Layout.
Para construir a cena, adicione os seguin-
tes controles:
Dentro da categoria de controles deno- Figura 14. Scene Builder com a tela padro criada pelo NetBeans aberta
minada Controls:
- D ois TextFields, para o fornecimento
da categoria de despesa e seu respectivo
valor;
- Dois Labels, utilizados para indicar os
valores que devero ser fornecidos pelo
usurio nas caixas de texto;
- Um Button, cujo clique adicionar a
categoria e seu respectivo valor tabela;
- Um Table View, para exibio dos dados
fornecidos.
Arraste dois objetos Table Column para den-

tro da Table View. Estes objetos tambm pos-
suem atributos prprios, e posteriormente
faremos a vinculao de cada coluna a seu
respectivo campo do modelo de dados.
Dentro da categoria de controles deno-
minada Charts:
- Um Pie Chart, onde ser exibido um gr-
fico de torta/pizza com a parcela de cada
despesa no montante total.

Posicione os controles na cena aproxi-


madamente como indicado na Figura 15.
Caso seu grfico de torta fique em branco,
Figura 15. Layout da cena do arquivo TelaDespesas.fxml
dificultando seu posicionamento, clique
no menu View | Show sample data para que T extField inferior
dados de exemplo sejam provisoriamente L abel Superior - Properties|fx:id: txtValor
mostrados dentro dele. - Properties|Text: Categoria - Properties|Text: (vazio)
Precisamos agora configurar as proprie- L abel Inferior B utton
dades individuais dos controles (dispo- - Properties|Text: Valor - Properties|Text: Adicionar
nveis no canto direito do Scene Builder, T extField superior - Events|OnAction: #handleButtonAction
quando o controle est selecionado na - Properties|fx:id: txtCategoria T ableView
cena): - Properties|Text: (vazio) - Properties|fx:id: tabDespesas

Edio 105 Java Magazine 29


Por dentro do JavaFX 2

-
Para selecionar uma coluna individualmente e definir suas pro- Parent root = FXMLLoader.load(getClass().getResource(Sample.fxml));
priedades, clique na coluna usando o painel Hierarchy, no canto
esquerdo inferior do Scene Builder. E modifique para:
Table Column Esquerda
-
Parent root = FXMLLoader.load(getClass().getResource(TelaDespesas.fxml));
Properties|fx:id: colCategoria
Properties|Text: Categoria Criando o modelo
Layout|Pref Width: 150.0 Dentro do padro MVC (Modelo-Viso-Controle), o arquivo
Table Column: Direita FXML representa a viso, ou seja, a interface com o usurio. O
P roperties|fx:id: colValor modelo define os dados utilizados pela aplicao e as regras de
P roperties|Text: Valor negcio associadas a estes. O papel do controle, ou controlador,
L ayout|Pref Width: 90.0 por sua vez, fazer a conexo entre a viso e o modelo.
PieChart Neste momento necessrio definir o modelo para o aplicativo
- Properties|fx:id: chartDespesas de despesas, que representa os dados que sero exibidos pela vi-
- Properties|Title: Despesas Domsticas so. O modelo neste caso ser simples, contendo apenas uma String
- Properties|Legend visible: desmarcado com o nome categoria e um campo double para seu respectivo valor.
Para criar a classe modelo, clique sobre o pacote despesas, acesse o
Durante a definio dos fx:id dos controles, uma mensagem pode menu Arquivo | Novo arquivo..., selecione esquerda a categoria
ser exibida pelo Scene Builder, indicando que um campo injetvel Java, direita escolha Classe Java e clique em Prximo.
(uma varivel que referncia os controles) no existe na classe Na tela seguinte, informe o Nome da Classe como Despesa e
controladora. Isso ser feito nas prximas etapas. clique em Finalizar. Por fim, implemente o cdigo da classe como
O aspecto final da tela dever ficar como o da Figura 16. o da Listagem 5.

Listagem 5. Cdigo da classe Despesa.

01 package despesas;
02 import javafx.beans.property.SimpleDoubleProperty;
03 import javafx.beans.property.SimpleStringProperty;
04
05 public class Despesa {
06 private final SimpleStringProperty categoria = new SimpleStringProperty();
07 private final SimpleDoubleProperty valor = new SimpleDoubleProperty(0);
08
09 public Despesa() {
10 this(, 0);
11 }
12
13 public Despesa(String cat, double val) {
14 categoria.set(cat);
15 valor.set(val);
16 }
17
18 public String getCategoria() {
19 return categoria.get();
20 }
21
22 public void setCategoria(String cat) {
Figura 16. Layout final da tela principal do aplicativo 23 categoria.set(cat);
24 }
25
O layout da tela est pronto. Neste momento j possvel salvar
26 public double getValor() {
o layout e encerrar o Scene Builder. Para que este layout possa ser 27 return valor.get();
utilizado pelo aplicativo, deve ser feita uma pequena alterao na 28 }
classe de aplicao do projeto (Despesas.java), referente ao carre- 29
gamento do FXML como n raiz da cena. 30 public void setValor(Double val) {
31 valor.set(val);
Voltando ao NetBeans, abra o arquivo da aplicao (Despesas.
32 }
java) e altere a indicao do arquivo FXML base do programa. 33 }
Isto , localize a linha:

30 Java Magazine Edio 105


Listagem 6. Cdigo da classe TelaDespesas.

01 package despesas; 27
02 import java.net.URL; 28 @FXML
03 import java.util.ResourceBundle; 29 private TableColumn colCategoria;
04 import javafx.collections.FXCollections; 30
05 import javafx.collections.ObservableList; 31 @FXML
06 import javafx.event.ActionEvent; 32 private TableColumn colValor;
07 import javafx.fxml.FXML; 33
08 import javafx.fxml.Initializable; 34 @FXML
09 import javafx.scene.chart.PieChart; 35 private PieChart chartDespesas;
10 import javafx.scene.control.TableColumn; 36
11 import javafx.scene.control.TableView; 37 @FXML
12 import javafx.scene.control.TextField; 38 private void handleButtonAction(ActionEvent event) {
13 import javafx.scene.control.cell.PropertyValueFactory; 39 Despesa despesa = new Despesa(txtCategoria.getText(), Double.
14 parseDouble(txtValor.getText()));
15 public class TelaDespesas implements Initializable { 40 listaDeDespesas.add(new PieChart.Data(despesa.getCategoria(),
16 despesa.getValor()));
17 private ObservableList<PieChart.Data> listaDeDespesas = 41 tabDespesas.getItems().add(despesa);
FXCollections.observableArrayList(); 42 }
18 43
19 @FXML 44 @Override
20 private TextField txtCategoria; 45 public void initialize(URL url, ResourceBundle rb) {
21 46 colCategoria.setCellValueFactory(new PropertyValueFactory(categoria));
22 @FXML 47 colValor.setCellValueFactory(new PropertyValueFactory(valor));
23 private TextField txtValor; 48 chartDespesas.setData(listaDeDespesas);
24 49 }
25 @FXML 50 }
26 private TableView tabDespesas;

Como pode ser notado pela listagem, definimos duas proprie- que todos os elementos da tela, contidos no arquivo FXML, tiverem
dades nesta classe: a categoria e o valor de uma despesa. Quem est sido carregados. Portanto, este mtodo pode ser usado para fazer a
familiarizado com a arquitetura de componentes JavaBeans, se conexo da viso ao modelo: a linha 47 vincula o valor das clulas
beneficiar do fato que o JavaFX utiliza o mesmo conceito de da coluna de categorias propriedade categoria do modelo; em segui-
propriedades para vincular estas com os controles visuais, como da, o mesmo feito para a coluna do valor e a respectiva propriedade
os dados apresentados por um Table View. em Despesa; finalmente, configuramos a fonte de dados do grfico
Na prxima seo implementaremos o cdigo do controlador para a lista de despesas, declarada na linha 18.
Despesas.java. A funo do controlador fazer a ligao entre os Quando o usurio clicar no boto, o mtodo handleButtonAction(),
dados e a viso. definido nas linhas 39 a 42 ser disparado. Na linha 40, criamos
um novo objeto Despesa, passando ao seu construtor os valores
Definindo o controlador Despesas.java informados nas caixas de texto. Posteriormente, na linha 41,
Como comentado anteriormente, a funo do controlador re- adicionamos os dados da despesa lista de valores que sero usa-
alizar a ligao dos dados existentes no modelo com a interface dos na gerao do grfico; e na linha 42, adicionamos o objeto
apresentada na viso. No JavaFX, o controlador implementado tabela, para que os valores includos possam ser mostrados nas
como uma classe que contm as referncias aos controles na suas linhas.
interface e as implementaes dos mtodos associados aos even- O resultado final do aplicativo pode ser observado na Figura 17.
tos. Deste modo, abra o controlador TelaDespesas.java e adapte-o Aps digitar o nome da categoria e um respectivo valor, o cli-
de acordo com a Listagem 6. que no boto adiciona estes tabela e ao grfico. A atualizao
A primeira mudana importante est na incluso da linha 18. do grfico acontece na hora, e utiliza efeitos de animao na sua
Nela, declarado um objeto do tipo ObservableList<PieChart.Data>. modificao.
Trata-se de uma coleo de objetos PieChart.Data, que sero usados
para a gerao automtica do grfico de pizza/torta. Concluses
Nas linhas 20 a 36, esto as declaraes das referncias aos A plataforma JavaFX 2 trouxe significativas melhorias em relao
controles existentes na interface (TelaDespesas.fxml) que sero primeira verso. Dentre elas, podemos destacar um conjunto
acessados por este controlador. Os nomes so os mesmos indicados nativo de APIs Java, substituindo o uso do JavaFX Script. Dessa
pelo atributo fx:id, existente na descrio XML dos controles. forma, a familiarizao de um programador Java com a tecnologia
O mtodo initialize(), contido nas linhas 46 a 50, invocado assim torna-se ainda mais rpida e produtiva.

Edio 105 Java Magazine 31


Por dentro do JavaFX 2

Luiz Carlos Querino Filho


querino@me.com
Possui graduao e mestrado em Cincia da Computao.
Professor Associado e Pesquisador da Fatec, no curso de Anlise
e Desenvolvimento de Sistemas da unidade de Gara, SP. Desenvolve
aplicaes web h mais de dez anos, utilizando Java, PHP e ASP. Tambm
desenvolvedor de aplicaes mveis para dispositivos Android e iOS

http://www.javafx.com
Site oficial JavaFX.

http://www.oracle.com/technetwork/java/javafx/downloads/index.html
Download do JavaFX.

http://www.oracle.com/technetwork/java/javafx/tools/index.html
Download do JavaFX Scene Builder Developer Preview.

http://docs.oracle.com/javafx/2/api/index.html
API do JavaFX 2.

http://docs.oracle.com/javafx/
Documentao completa do JavaFX.
Figura 17. Resultado da execuo do aplicativo Despesas
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Download do JDK 7.
O uso de arquivos de definio de interface FXML, junto de
classes controladoras, condiciona o desenvolvedor a implementar http://www.oracle.com/technetwork/java/javafx/downloads/ssLINK/1429449
sua aplicao JavaFX dividida em camadas, trazendo diversos Download do JavaFX 2 Developer Preview para Linux
benefcios de projeto, manuteno e legibilidade do software.
As possibilidades de aplicaes que podem ser desenvolvidas
com JavaFX so imensas, indo de jogos e multimdia aplicativos D seu feedback sobre esta edio! Feedback
eu
comerciais e empresariais srios, sendo que todos podem se

s
A Java Magazine tem que ser feita ao

D
seu gosto. Para isso, precisamos saber

sobre e
beneficiar da qualidade grfica da plataforma.
Ricamente documentada e agora parte oficial do JDK Java, o o que voc, leitor, acha da revista!

s
ta
edio

JavaFX 2 vai se confirmando como, nas prprias palavras da D seu voto sobre este artigo, atravs do link:
Oracle, a nova plataforma de interface grfica da linguagem, e
www.devmedia.com.br/javamagazine/feedback
deve ser conhecida por todo desenvolvedor Java.

32 Java Magazine Edio 105


Edio 105 Java Magazine 33
Seo Java Nesta seo voc encontra artigos intermedirios e avanados sobre Java

Mantenha suas
verses em dia
Automatizando o versionamento de projetos com
SVN, Maven e Nexus

E Resumo DevMan
m que verso seu projeto de software se encontra
atualmente? Se voc no conseguir responder a esta
pergunta, cuidado! A falta de uma poltica de ver- De que se trata o artigo:
sionamento adequada pode levar a um cenrio perigoso, Neste artigo vamos aprender como criar um processo de versionamento
abrindo espao para instabilidade e desorganizao. Por e como extrair o melhor das ferramentas SVN, Maven e Nexus para auto-
conta disso, de extrema importncia incluir etapas de pla- matizar o lanamento de novas verses com segurana e estabilidade.
nejamento de releases e versionamento dentro do processo
de desenvolvimento de software da sua empresa. Em que situao o tema til:
Um projeto de software normalmente composto, A adoo de um processo de versionamento automatizado ajuda a
alm de seu prprio cdigo, por diversas dependncias, elevar o nvel de maturidade e organizao da empresa, garantindo um
tanto externas quanto internas. importante observar controle rgido sobre as modificaes realizadas pela equipe de desenvol-
que da mesma forma que damos importncia para as vimento. Dessa forma, possvel evitar o lanamento de verses instveis
verses das dependncias externas como do Hibernate e aumentar a qualidade do produto entregue ao cliente.
ou do Spring, tambm devemos nos preocupar com
as verses das dependncias internas, criadas por ns Mantenha suas verses em dia :
mesmos, dentro do ambiente corporativo. O objetivo deste artigo mostrar como criar um processo de versiona-
A cada novo lanamento dos nossos projetos de sof- mento simples e automatizado com base nas ferramentas open source
tware, bugs so corrigidos, novas funcionalidades so mais utilizadas pelo mercado: SVN, Maven e Nexus.
criadas e APIs pblicas so modificadas, muitas vezes
quebrando a compatibilidade com outros projetos. Por
esse motivo fundamental manter uma documenta- um grande desperdcio olhar para o nmero de verso de um
o consistente, capaz de identificar essas alteraes, software e no conseguir interpretar seu real significado. Ao estu-
atribuindo-as a uma determinada verso. dar e entender seu processo de formao possvel compreender
Neste artigo, vamos abordar como criar e manter importantes informaes semnticas, escondidas atrs de um con-
verses de forma automatizada utilizando a ferramenta junto de nmeros, que normalmente passariam despercebidas.
Apache Maven 3, e ainda utilizar o servidor de artefa- Um exemplo didtico que ilustra bem esse fato a ocorrncia
tos Nexus, da Sonatype, para armazenar, gerenciar e de uma atualizao da verso 3.7.2 para a verso 3.7.3 de um de-
compartilhar artefatos de softwares gerados entre as terminado software. Nesse cenrio, o esquema de versionamento
equipes de desenvolvimento. adotado possui trs nmeros (X.Y.Z) e cada um deles possui seu
significado prprio. Se apenas o ltimo nmero variar, a inten-
Definindo uma estratgia de versionamento para o o comunicar que a atualizao contm apenas correes de
seu projeto defeitos e no mximo alteraes na estrutura interna do cdigo,
Versionamento de software o processo que tem como no agregando novas funcionalidades ao produto final ou mesmo
resultado final a atribuio de um identificador nico, modificaes em sua API pblica que possam causar incompatibi-
capaz representar e comunicar o estado do software em lidade. Veremos mais a frente detalhes sobre esse tipo de esquema
um determinado momento. de versionamento.

34 Java Magazine Edio 105


Entretanto, importante observar que a evoluo do nmero Essa forma de versionamento a preferida pela maior parte das
das verses de um software pode seguir diferentes esquemas de empresas que desenvolvem ferramentas, frameworks e biblio-
numerao e que essa escolha vai depender muito do nvel de tecas. Por exemplo: a Apache (Maven 3.0.4, ServiceMix 3.4.0), a
detalhes que se pretende atingir para controlar e principalmente JBoss (Hibernate 4.1.2), o Google (GWT 2.4.0), a SpringSource
comunicar a evoluo do software. O mercado adota os mais va- (Spring Framework 3.1.0), a Eclipse Foundation (Eclipse 3.7.2),
riados padres e no existe uma regra oficial na hora de definir o entre outras;
nmero de verso de um determinado software. Por isso, consulte - Acima de trs nmeros: Existem diversas formas ainda mais
sempre os detalhes a esse respeito na documentao publicada customizadas de versionar projetos de software, como com a
pelo fabricante. utilizao de esquemas com mais de trs nmeros. No entanto
Abaixo, esto relacionados alguns tipos de padres de versio- importante ter em mente que isso deve vir naturalmente, caso
namento e nomenclatura adotados pelo mercado: exista a necessidade.
Sequencial: Este tipo de versionamento o mais simples e pode Atribuio de apelidos s verses: No incomum utilizar,
ser utilizado em situaes onde no seja necessrio manter um alm do nmero de verso, um apelido para identificar unica-
controle semntico rigoroso a respeito do tipo de modificao mente o estado de um software. Este tipo de prtica pode estar
realizada no software. muito utilizado para versionar arquivos associada a aes de marketing e no investimento em uma forma
individualmente, no entanto pode apresentar desvantagens se for de comunicao mais simples e direta com o cliente final.
empregado para produtos inteiros. A prpria Microsoft utilizou este modelo quando deixou de evo-
bemprovvel que o nmero da verso suba muito rpido, trans- luir o Windows das verses 3.0, 3.1 e 3.11 e passou a disponibilizar
mitindo uma falsa impresso de evoluo, quando na verdade os as verses 95, 98, 2000, Millenium, XP e Vista. Outros exemplos
incrementos podem acontecer por conta de correes ou pequenas recentes so do Android, que lanou a verso 4.0, tambm co-
funcionalidades sendo adicionadas ao produto; nhecida como Ice Cream Sandwich, de seu sistema operacional
Combinado: Boa parte dos projetos de software utiliza uma para smartphones, o Eclipse, que atualmente est na verso 3.7,
combinao de nmeros para comunicar semanticamente o nvel ou Indigo, e tambm o Mac OS X, que vem desde 2000 lanando
de importncia das modificaes contidas em cada release. A verses com nomes das sete grandes espcies de felinos: Cheetah
seguir, esto relacionadas algumas formas de como combinar (10.0), Puma (10.1), Jaguar (10.2), Panther (10.3), Tiger (10.4), Leopard
nmeros para versionar um software: (10.5), Snow Leopard (10.6) e a mais recente Lion (10.7).
- Dois nmeros (X.Y): Representa a evoluo do produto na forma
de dois nmeros combinados. O primeiro deles indica o lana- Uma recomendao importante sempre utilizar um esquema
mento de funcionalidades maiores e de grande importncia. J o que se consiga manter consistente ao longo do tempo. comum
segundo nmero incrementado apenas para indicar alteraes ver empresas adotando padres complexos demais e que frente
menores como correes de defeitos, refatoraes ou pequenas s dificuldades acabam caindo no esquecimento e sendo aban-
funcionalidades. donados, retornando ao caos. Portanto, vale mais a pena investir
Enquanto o software estiver em estgio beta, recomendado em- em um formato suficientemente simples no incio e, conforme
pregar o zero na primeira posio do nmero da verso. Somente a equipe de desenvolvimento for amadurecendo, deixar que a
no momento em que o software ganha estabilidade suficiente evoluo acontea naturalmente.
para sair do estado de beta que se recomenda definir a verso Agora que j temos como definir um esquema de versionamento
como 1.0. adequado para as necessidades dos nossos projetos, veremos como
considerada uma prtica comum saltar algumas verses, como tirar proveito do SVN para armazenar e organizar um processo
de 5.1 para 5.5, por exemplo, ao perceber que uma quantidade de desenvolvimento versionado.
significativa de funcionalidades de menor importncia foi
desenvolvida, mas no justifica o incremento do nmero mais Utilizando o SVN para gerenciar as linhas de desenvolvimento
significativo da verso; O Subversion, ou SVN, como mais conhecido, atualmente um
- Trs nmeros (X.Y.Z): Com um nmero a mais, possvel aumen- dos softwares mais utilizados no mercado para realizar o controle
tar a semntica transmitida e ainda controlar melhor o tipo de de verses dos arquivos fontes em projetos de software. Ele desen-
alterao feita no software. No entanto, a complexidade tambm volvido pela Apache e tem como principal misso ser reconhecido
aumenta e para manter esse tipo de modelo necessrio ter tanto e adotado como uma ferramenta de cdigo aberto, caracterizada
um processo quanto uma equipe mais madura e pragmtica. A pela sua confiabilidade, simplicidade e principalmente habilidade
primeira posio do nmero representa, assim como no esquema em atender as necessidades de todo o tipo de usurio e projeto.
anterior, o lanamento de funcionalidades de maior relevncia. Para utilizar um nvel adequado de versionamento, funda-
A principal diferena vem no segundo e terceiro nmeros, que mental conhecer os recursos que o SVN oferece para gerenciar
representam, respectivamente, funcionalidades de menor rele- diferentes linhas de desenvolvimento ao mesmo tempo e saber
vncia e modificaes como correes de defeitos e alteraes na como tirar proveito da sua estrutura interna para manter as ver-
estrutura interna do cdigo. ses estveis e sob controle.

Edio 105 Java Magazine 35


Mantenha suas verses em dia

Uma analogia interessante para entender o funcionamento problemas causados pela introduo de novas funcionalidades,
da estrutura interna do SVN a do crescimento de uma rvo- facilitando o lanamento de verses contendo correes de defeitos
re. Tudo sempre comea com o nascimento de um tronco, ou e atualizaes importantes.
trunk, que aos poucos vai crescendo at comear a dar origem Os branches do bastante liberdade aos desenvolvedores, pro-
aos primeiros galhos, mais conhecidos como branches. Com o porcionando a possibilidade de realizar grandes modificaes
tempo, mesmo os galhos tambm podem crescer, dando ori- no software sem ter medo de causar instabilidades na verso de
gem a outros galhos, branches a partir de um branch. Mas, se produo, no entanto, importante ter cautela e moderao em
o tronco ficar doente, naturalmente todos os galhos podem ser relao a sua utilizao. Com o tempo, comum que eles fiquem
afetados e tambm correm o risco de morrer, se nada for feito desatualizados em relao ao trunk, causando conflitos e muitas
para impedir que a doena se alastre. No entanto, se apenas um dores de cabea no momento da integrao. Essa operao co-
dos galhos adoecer, este pode ser facilmente cortado, mantendo nhecida como merge (Figura 2).
tanto o tronco quanto os outros galhos saudveis e seguros.
Tambm podem acontecer casos em que um galho, que no foi
cuidado adequadamente, cresa tanto e fique to pesado que o
tronco acabe no conseguindo suport-lo, correndo o risco de
quebrar. Por isso sempre importante controlar o crescimen-
to dos galhos, podando adequadamente e no deixando que
cresam demasiadamente.
Ento, chega aquele momento em que voc acha que a sua r- Figura 2. Realizando operaes de merge com o trunk
vore est bonita e saudvel e quer registrar aquele momento para
sempre. Nesse caso, recomendado tirar uma foto, mais conhecida A tag como uma fotografia feita a partir de um branch ou
como tag, e guard-la com carinho. mesmo do prprio trunk. Basicamente uma cpia, mantida
Esta foi uma analogia para entender de forma didtica e des- inalterada e associada ao identificador de verso. A partir
contrada o funcionamento e principalmente os problemas exis- dela, uma verso candidata a ir para produo pode ser homo-
tentes no dia-a-dia de trabalho com a estrutura do Subversion. logada antes de ter contato com o cliente final. Evite colocar
A seguir, vamos entender em detalhes tcnicos os conceitos de em produo qualquer pacote gerado diretamente a partir do
trunk, branch e tag. trunk ou mesmo de um branch. Estes, por estarem sujeitos a
O trunk o lugar onde deve ser armazenado o cdigo estvel modificaes, podem comprometer a estabilidade da release.
do projeto. Ele conhecido como linha base, e a partir dele que Ao utilizar servidores de integrao contnua para gerar os
tero origem outras linhas de desenvolvimento do projeto (veja pacotes que vo para homologao e produo, prefira ger-los
a Figura 1). Essas linhas so conhecidas como branches e servem a partir da tag.
para que o desenvolvimento de novas funcionalidades ocorra de A deciso de utilizar branches semprepolmica e existem
forma organizada e sem deixar que a linha base se torne instvel. diferentes pontos de vista na indstria de desenvolvimento
Por conta disso, as modificaes no trunk devem acontecer moti- de software em relao a isso. O prprio Extreme Program-
vadas por correes de defeitos ou outras aes que contribuam ming, metodologia gil proposta por Kent Beck, sugere uma
para aumentar a sua estabilidade. prtica conhecida como Single Code Base, onde todo o cdigo
mantido em uma nica linha de desenvolvimento. No res-
tam dvidas de que a estratgia de desenvolver todo o cdigo
diretamente no trunk, evitando a criao de branches, mais
simples e pode economizar algumas horas em operaes de
merge no futuro.
Entretanto, este pode ser um caminho perigoso e instvel caso
a equipe de desenvolvimento no tenha bastante maturidade e
deixe de seguir outras prticas consideradas primrias no Ex-
treme Programming, como Test-First Programming, 10-Minute
Build, Continuous Integration, entre outras.
Independentemente da utilizao ou no de branches, o uso
de tags obrigatrio para realizar o versionamento do projeto,
Figura 1. Criao de branches a partir do trunk e este pode ser feito a partir do trunk. Assim, escolha a estrat-
gia que mais combinar com o seu modelo de desenvolvimento
Geralmente, criamos um branch a partir da base de cdigo atual e introduza o uso de branches se estiver sofrendo com a
existente no trunk, dando origem a uma nova linha de desen- instabilidade do trunk. Caso contrrio, mantenha o processo
volvimento. Dessa forma, possvel isolar o trunk de possveis da maneira que est.

36 Java Magazine Edio 105


1. Configuraes de SCM: A configurao de SCM, ou Source
Control Management, feita por meio da tag <scm> dentro do
arquivo pom.xml do projeto. O Maven utiliza essas informaes
para criar a tag referente release que ser lanada e tambm
Tutorial para atualizar as modificaes feitas no nmero de verso do
pom.xml. Confira o trecho de cdigo que deve ser adicionado e
customizado conforme a localizao do SVN em seu ambiente de
Automatizando o lanamento de releases com Maven desenvolvimento na Listagem 1;
O Maven uma poderosa ferramenta desenvolvida pela Apache
para realizar a automao e o gerenciamento de configurao de
Listagem 1. Detalhes da tag <scm> que deve ser adicionada ao arquivo pom.xml
projetos na plataforma Java.
do projeto.
Tudo no Maven feito por meio de plugins. Eles promovem
flexibilidade e servem como base para a implementao de todas <scm>
<connection>scm:svn:http://192.168.0.1/svn/nome_do_projeto/trunk</connection>
as suas funcionalidades bsicas e ainda estimulam a extenso e <developerConnection>
customizao da ferramenta de maneira fcil e rpida. Entre seus scm:svn:http://192.168.0.1/svn/nome_do_projeto/trunk
principais plugins esto os de gesto de dependncias, controle </developerConnection>
<url>http://192.168.0.1/svn/nome_do_projeto/trunk</url>
de qualidade de cdigo (com o PMD, Checkstyle e Sonar), testes </scm>
automatizados (com Selenium e FitNesse), integrao com os prin-
cipais servidores de aplicao do mercado (como o JBoss, Tomcat
e WebSphere), lanamento de releases, entre outros. 2. Configuraes dos repositrios de distribuio: A palavra
A lista completa de plugins disponveis pode ser visualizada deploy, que em nosso idioma significa distribuir, disponibilizar
em: http://mojo.codehaus.org/plugins.html. ou publicar, uma das etapas mais importantes do processo de
lanamento de uma release. Aps ter os pacotes do projeto cons-
Conhecendo o Release Plugin trudos pelo Maven, ser necessrio disponibiliz-los em algum
O plugin de release do Maven, atualmente na verso 2.2.2, lugar para que toda a equipe tenha acesso. Para que o Maven saiba
utilizado para automatizar as atividades manuais e repetitivas onde deve fazer o upload dos artefatos, ser necessrio configurar
que envolvem o lanamento de uma nova verso de um projeto a tag <distributionManagement> dentro do pom.xml do projeto. Confira
de software. Este tipo de automao auxilia na preveno de o trecho de cdigo que deve ser adicionado e customizado confor-
erros e estimula a equipe de desenvolvimento a incluir no seu me a localizao do Nexus em seu ambiente de desenvolvimento
processo de desenvolvimento de software a prtica de versionar na Listagem 2;
adequadamente os seus projetos.
As principais goals, terminologia utilizada pelo Maven para
descrever aes, definidas pelo plugin de release e que sero Listagem 2. Detalhes da tag <distributionManagement> que deve ser adicionada
ao arquivo pom.xml do projeto.
abordados neste artigo so:
r elease:prepare Prepara todo o ambiente necessrio e a release <distributionManagement>
para ser lanada; <repository>
<id>releases</id>
release:perform Executa o lanamento da release criada pela ao
<name>Release Repository</name>
de prepare; <url>http://192.168.0.1/nexus/content/release</url>
release:clean Limpa os arquivos temporrios gerados pelo proces- </repository>
<snapshotRepository>
so de preparao. Essa ao sempre chamada automaticamente <id>snapshots</id>
no momento em que a release lanada; <name>Snapshot Repository</name>
r elease:rollback Desfaz a preparao da release, abortando o seu <url>http://192.168.0.1/nexus/content/snapshots</url>
</snapshotRepository>
lanamento. Vale lembrar que aps ser lanada, por meio do comando </distributionManagement>
svn:perform, no mais possvel voltar atrs, sendo necessrio apagar
os pacotes diretamente no repositrio, caso seja necessrio.
3. Configuraes de autenticao nos repositrios de distribui-
Configurando o pom.xml o: Os gerenciadores de repositrios como o Nexus, que veremos
Antes de seguir em frente e entender como funciona a prepara- mais a frente, exigem autenticao para permitir o upload de
o e o lanamento da release, ser preciso configurar o pom.xml artefatos para seus repositrios, impedindo que pessoas no auto-
com uma srie de informaes necessrias como configuraes de rizadas distribuam verses incorretas, que possam comprometer
SCM (nesse caso o SVN), localizao dos repositrios de distribui- a estabilidade dos projetos.
o (vamos utilizar o Nexus neste artigo) e a prpria configurao Sendo assim, ser necessrio configurar a tag <server> dentro do
do plugin de release do Maven. Vamos a elas: arquivo settings.xml, localizado no diretrio de instalao do Maven.

Edio 105 Java Magazine 37


Mantenha suas verses em dia

As informaes contidas neste arquivo so compartilhadas por todos .classpath, ou os especficos do seu ambiente de desenvolvimento.
os projetos que utilizem o Maven, centralizando a configurao e Lembrando que uma boa prtica nunca comitar estes tipos de ar-
evitando a repetio de dados em todos os arquivos pom.xml. Confira quivos, pois eles devem sempre ser gerados em cada ambiente.
o trecho de cdigo que deve ser adicionado e customizado conforme Aps garantir que todo o cdigo est sincronizado corretamente,
o nome de usurio e senha definidos no Nexus na Listagem 3; o release plugin analisa o pom.xml em busca de dependncias que
contenham a palavra SNAPSHOT. Se forem encontradas, o proces-
so abortado. Isso acontece por um motivo simples, uma verso
Listagem 3. Detalhes da tag <server> que deve ser adicionada ao arquivo settin- SNAPSHOT considerada transitria, ou seja, representa o cdigo
gs.xml do Maven.
escrito apenas na mquina de um determinado desenvolvedor. Com
<servers> o objetivo de garantir segurana e estabilidade, o correto gerar
<server> releases que tenham dependncias apenas para bibliotecas que j
<id>releases</id>
foram lanadas, ou seja, no sejam SNAPSHOT ou transitrias.
<username>rodrigo</username>
<password>1234</password> Se mesmo assim seu projeto tiver esse tipo de dependncia,
</server> possvel informar ao plugin para ignorar o risco e seguir em
<server>
<id>snapshots</id>
frente com o processo de preparao da release. Para tanto, basta
<username>rodrigo</username> utilizar a opo DignoreSnapshots=true juntamente com o restante
<password>1234</password> do comando para preparar a release.
</server>
</servers>
Outra informao importante que deve ser informada por par-
metro so as credenciais, username e password, para acesso ao re-
positrio. Dessa forma, ser necessrio utilizar Dusername=usuario
4. Configuraes do Release Plugin: O Release Plugin, assim e Dpassword=senha.
como qualquer outro plugin do Maven, deve ser configurado
dentro da tag <plugins>, localizada dentro da tag <build> no pom.xml Pronto, agora basta executar o comando abaixo para preparar
do projeto. Confira o trecho de cdigo que deve ser adicionado a release:
na Listagem 4.
mvn release:prepare Dusername=usurio Dpassword=senha
Listagem 4. Detalhes da configurao do plugin de release, que deve ser adicio-
nada ao arquivo pom.xml do projeto.
Em seguida ser necessrio informar ou apenas confirmar trs
<build> informaes importantes, conforme pode ser visto na Figura 3:
<plugins> 1. Qual a verso que se deseja lanar? A sugesto que seja
<plugin>
<groupId>org.apache.maven.plugins</groupId> escolhida a mesma definida na tag <version> do pom.xml, sem a
<artifactId>maven-release-plugin</artifactId> palavra SNAPSHOT. No entanto, caso tenham sido implementadas
<version>2.2.2</version>
funcionalidades importantes e que no estavam previstas, siga o
</plugin>
</plugins> esquema de versionamento utilizado pela sua empresa e defina
</build> o nmero de verso mais adequado;
2. Qual o nome da tag que dever ser criada no SCM? Neste
momento, caso a empresa adote a utilizao de apelidos para as
Preparando a Release releases, estes podem ser utilizados principalmente para facilitar a
O comando mvn release:prepare utilizado para iniciar a pre- identificao das verses dentro do repositrio de cdigo fonte;
parao da release, e como todos os outros comandos, deve ser 3. Para qual verso o projeto dever ser atualizado? Nem sempre
executado no diretrio raiz do projeto que por sua vez deve conter atualizado da verso 7.2 para a 7.3. Muitas vezes os planos para
o arquivo pom.xml configurado corretamente. a prxima release incluem importantes funcionalidades que jus-
O primeiro passo na preparao da release ter certeza de que tificam ir para a verso 8.0.
no existem alteraes locais ainda no comitadas. Caso existam,
ser necessrio sincronizar o cdigo fonte e deix-lo atualizado em Se tudo der certo, e isso verificado executando rigorosamente
relao ao que existe no repositrio. O release plugin possuium todos os testes do projeto, o plugin vai criar a tag no SCM conforme
mecanismo de proteo que no permite a criao de releases o nome definido no item 2, contendo o nmero de verso aceito
quando o cdigo no est sincronizado, por este ser considerado no item 1 e ainda ir atualizar e comitar o arquivo pom.xml com a
transitrio, ou seja, existindo apenas na maquina que originar o verso planejada no item 3. Este processo pode ser visto na Figura 4.
lanamento da release. Dessa forma, aps a preparao da release, quando todos os desen-
Um detalhe importante e que pode fazer a diferena a utiliza- volvedores do time sincronizarem suas cpias de trabalho, tero
o do comando svn ignore. Este ignora diretrios gerados, como uma verso atualizada do pom.xml j contendo a nova verso em
o caso do target, e tambm arquivos do Eclipse, como os .project e que devem trabalhar. Todo esse processo ser muito mais proveitoso

38 Java Magazine Edio 105


se estiver associado a um planejamento de
releases bem feito.
A partir deste momento est tudo prepara-
do para realizar o lanamento da release.

Lanando a Release
O lanamento da release a parte mais sim-
ples de todo o processo, uma vez que a parte
mais trabalhosa j foi finalizada durante a
preparao da release. Ele executado por
Figura 3. Confirmaes sobre a verso a ser lanada, nome da tag no SCM e prxima verso de desenvolvimento
meio do comando mvn release:perform, chama-
do aps a preparao da release. Feito isso,
as seguintes aes sero realizadas:
1. feito o checkout do contedo da tag
criada durante a etapa de preparao da
release;
2. A partir da tag, feito o processo de
deploy, enviando a verso recm-criada
para o Nexus.

Para lanar a release, basta executar o


comando abaixo:

mvn release:perform Dusername=usurio


Dpassword=senha

Uma importante etapa do ciclo de vida


do Maven, geralmente incompreendida
por boa parte das pessoas que o utilizam, Figura 4. Criao da tag e o commit do arquivo pom.xml j atualizado com a nova verso
a de deploy. primeira vista, possvel
tentar associar essa etapa com o processo de
deploy que se faz com servidores de aplica-
o, como o JBoss ou Tomcat. No entanto, o
deploy do ciclo de vida tem um significado
um pouco diferente, tendo como inteno
disponibilizar o pacote criado no reposi-
trio para que toda a equipe tenha acesso.
Ou seja, ao execut-lo, a ao que o Maven
realiza copiar os pacotes para o local defi-
nido na tag <distributionManagement> do pom.
xml e utilizando a autenticao definida na
tag <server> do settings.xml. Figura 5. Arquivos gerados pelo processo de preparao (prepare) da release
Por questes de curiosidade, existem
plugins especficos para JBoss e Tomcat a release, como vimos anteriormente, a tag a limpeza dos arquivos temporrios uti-
que tm como objetivo as operaes de e os arquivos de lanamento so gerados, lizados para preparar e lanar a release.
deploy, tanto por meio de JMX quanto por conforme apresenta a Figura 5. Por meio Caso seja necessrio realizar esta limpeza
cpia para a pasta de deploy. do comando mvn release:rollback, possvel manualmente, ela deve ser feita por meio
desfazer o processo (veja a Figura 6). deste comando.
Desfazendo a Release
Algumas vezes, por conta de algum Limpando os arquivos temporrios da preparao Gerenciando repositrios com Nexus
problema, pode ser necessrio abortar da Release O Nexus um dos servidores de ge-
a release, sincronizando novamente o Aps o processo de lanamento da relea- renciamento de artefatos mais utilizados
cdigo e s ento preparando a release se (perform), chamado automaticamente e conhecidos pela comunidade Java. Ele
novamente. O problema que ao preparar o comando mvn release:clean para efetuar tem como principal misso armazenar,

Edio 105 Java Magazine 39


Mantenha suas verses em dia

compartilhar e disponibilizar artefatos proporcionar aos desenvolvedores uma a um processo de testes e homologao
de software dentro de uma organizao, forma estvel e segura para compartilhar formalizado. Dessa forma, o plugin de
facilitando a interao entre os membros estes tipos de dependncias dentro da release do Maven impede o lanamento
da equipe de desenvolvimento. Mantido equipe de desenvolvimento. de qualquer projeto caso ele tenha em
pela Sonatype, atualmente existem duas Um repositrio armazena fundamental- sua lista de dependncias uma biblioteca
verses, sendo uma open-source, que mente dois tipos de artefatos: Releases e cuja verso seja snapshot. Se ainda assim
pode ser utilizada, customizada e distri- Snapshots. A principal diferena entre eles o responsvel pelo lanamento da release
buda gratuitamente sob a licena Eclipse est relacionada com a sua estabilidade. quiser assumir o risco de ter uma biblio-
Public License (EPL) Version 1.0, e outra Releases so estticas e versionadas, ou teca snapshot, poder utilizar o parmetro
comercial, mais completa, denominada seja, uma vez lanadas no mudam mais. DignoreSnapshots=true no comando de pre-
Professional. Portanto, possvel utiliz-las de maneira parao da release.
estvel dentro dos projetos, sem incorrer Outra importante facilidade de geren-
O que um gerenciador de repositrios? no risco de ter problemas futuros por conta ciadores de repositrios como o Nexus
Um gerenciador de repositrios atua de possveis alteraes realizadas. ter repositrios internos atuando como
como um ponto central dentro da organi- J os Snapshots, palavra cujo signifi- proxies para repositrios de artefatos
zao, disponibilizando uma srie de repo- cado remete a fotografia instantnea, remotos, na internet. Deste modo, basta
sitrios para realizar o armazenamento de estilo Polaroid, refletem o estado atual que apenas um desenvolvedor tenha
diferentes tipos de artefatos de software, do cdigo existente apenas na mquina utilizado uma determinada dependncia
como releases e snapshots. Estes artefatos de um determinado desenvolvedor. Por para que ela seja armazenada no cache
so colocados nos repositrios por meio do motivos bvios, verses snapshot so do repositrio. Sem a utilizao desse
comando mvn deploy, pertencente ao ciclo consideradas transitrias e normalmente tipo de recurso, sempre que qualquer
de vida do Maven. Deste modo possvel instveis por no terem sido submetidas desenvolvedor precisar de uma determi-
nada dependncia que no exista em seu
repositrio local, ser necessrio baix-la
da internet.

Instalando o Nexus
Assim como em outros servidores basea-
dos na tecnologia Java, para instalar e uti-
lizar o Nexus necessrio ter instalado o
Java Runtime Environment (JRE) verso 5
ou superior. Tambm necessrio ter dis-
ponvel um servidor de aplicao, como o
Tomcat ou Jetty, para rodar a distribuio
do Nexus Open-Source.
Para obter a distribuio gratuita do
Figura 6. Release sendo desfeita pelo processo de rollback
Nexus, acesse o site da Sonatype em
http://www.sonatype.org/nexus/go e realize
o download, atualmente na verso 2.0.3,
diretamente pelo site.
Feito isso, recomendado renomear a
distribuio de nexus-2.0.3.war para nexus.
war com o objetivo de reduzir a verbosida-
de e facilitar o acesso. Em seguida, basta
copiar o arquivo para a pasta de deploy do
servidor de aplicao. No caso do Apache
Tomcat, ela fica localizada na pasta web
apps, dentro do diretrio de instalao do
servidor.
Se tudo der certo, ser possvel acessar
a tela inicial do Nexus por meio da URL
http://localhost:8080/nexus, conforme mos-
trado na Figura 7.
Figura 7. Tela inicial do Nexus

40 Java Magazine Edio 105


Outro detalhe importante diz respeito
necessidade de utilizao do usurio e
senha configurados por padro para con-
seguir acessar a interface de administrao
do servidor. Por padro, o nome do usurio
admin e a senha admin123.

Listando os repositrios disponveis


O acesso lista completa de repositrios
que o Nexus gerencia pode ser feito por
meio do link Repositories, localizado no
menu principal, como pode ser visto na
Figura 8.

Integrando o Nexus ao Maven


Por padro, o Maven configurado para
Figura 8. Tela de repositrios do Nexus
buscar as dependncias em seus reposit-
rios pblicos na internet. Para fazer com
que ele busque as dependncias por meio Listagem 5. Configurao do mirror que deve ser adicionada ao arquivo settings.xml do Maven.
do Nexus, reduzindo a banda de rede utili-
<mirrors>
zada, necessrio configurar a tag <mirror> <mirror>
dentro do arquivo settings.xml do Maven. <id>public</id>
<url>http://192.168.0.1/nexus/content/groups/public/</url>
Confira o trecho de cdigo que deve ser
<mirrorOf>*</mirrorOf>
adicionado e customizado conforme a </mirror>
localizao do Nexus em seu ambiente de </mirrors>
desenvolvimento na Listagem 5. Listagem 6. Configurao dos repositrios que deve ser adicionada ao arquivo settings.xml do Maven.
Por fim, para que o Maven encontre as
releases e snapshots lanadas pela equipe, <repositories>
<repository>
necessrio configurar os repositrios locais <id>releases</id>
do Maven apontando para o Nexus. Esta <url>http://192.168.0.1/nexus/content/repositories/releases</url>
configurao feita por meio da tag <reposi- </repository>
<repository>
tories>. Confira o trecho de cdigo que deve <id>snapshots</id>
ser adicionado e customizado conforme a <url>http://192.168.0.1/nexus/content/repositories/snapshots </url>
localizao do Nexus em seu ambiente de </repository>
</repositories>
desenvolvimento na Listagem 6.

Concluso susceptveis a erros. Por fim, utilizamos


Neste artigo, vimos como definir uma o Nexus para gerenciar os repositrios de Rodrigo Branas
estratgia de versionamento para nosso releases e snapshots visando armazenar @rodrigobranas
projeto capaz de tanto controlar o esta- e compartilhar os artefatos gerados pelos Formado em Computao na
UFSC e MBA em Gesto de
do do software quanto comunicar sua lanamentos de release entre a equipe de
Projetos na FGV, atua no mercado
evoluo. Por meio do SVN, vimos que desenvolvimento do projeto.
de desenvolvimento de software h
possvel gerenciar diferentes linhas de 10 anos, se especializando em projetos baseados na
desenvolvimento de forma estvel e segu- arquitetura Java. Possui as certificaes SCJA, SCJP,
D seu feedback sobre esta edio! Feedback
ra, preservando o trunk de instabilidades eu SCJD, SCWCD e SCBCD e PMP. Atualmente trabalha
s

causadas por implementaes pertencen- A Java Magazine tem que ser feita ao
D

como consultor na rea de desenvolvimento de


seu gosto. Para isso, precisamos saber
sobre e

tes a novas verses. Tambm aprende- software e tambm instrutor das Academias Java e
o que voc, leitor, acha da revista!
mos a configurar o plugin de release do Agile da Globalcode, onde j acumula cerca de 1.000
s

ta
edio

Maven para automatizar completamente D seu voto sobre este artigo, atravs do link: horas em sala de aula. Para mais informaes, visite
o processo de preparao e lanamento www.rodrigobranas.com.br
www.devmedia.com.br/javamagazine/feedback
da release, compreendendo uma srie de
etapas que, se forem feitas manualmente,
alm de consumir tempo, acabam sendo

Edio 105 Java Magazine 41


Seo Boas Prticas artigos sobre as tecnologias que podero aumentar a qualidade do desenvolvimento de software

Alta disponibilidade
com GlassFish
Cluster de servidores, balanceamento
de carga e tuning

O Resumo DevMan
s servidores de aplicao surgiram na dcada
de 1990 para dar suporte aos desenvolvedores
atravs de um ambiente para execuo de siste- De que se trata o artigo:
mas web, abstraindo do programador a complexidade da Nesse artigo mostraremos como configurar um cluster com balancea-
infraestrutura de comunicao e de acesso aos sistemas mento de carga no GlassFish para alcanar alta disponibilidade. Em segui-
publicados. Esse tipo de software fornece vrios recursos da, veremos como efetuar tuning no desenvolvimento de aplicaes e nas
essenciais em um cenrio de deployment, como barreiras configuraes do servidor para conseguirmos ganho de performance.
de segurana, garantia de disponibilidade, tratamento
global de excees, gravao do log de aplicaes, pool de Em que situao o tema til:
conexes com bancos de dados e servios de diretrio, O modelo de alta disponibilidade de aplicaes Java web baseado em
sesses javamail, entre outros. Atualmente, existem v- cluster e balanceamento de carga se torna extremamente importante
rias solues de servidores de aplicao, sendo algumas quando h necessidade de se reduzir a possibilidade de falha em sistemas
pagas e outras gratuitas. e de aumentar o poder de processamento das requisies. Aplicaes que
Nesse contexto, o GlassFish surgiu de forma tmida exigem alta disponibilidade, como sistemas bancrios ou sites de comr-
em 2006 atravs do Projeto GlassFish, ainda pelas mos cio eletrnico, devem usar uma arquitetura como esta, acompanhada de
da Sun Microsystems. Hoje considerado por muitos um monitoramento real-time dos ns da soluo.
especialistas a melhor soluo gratuita da categoria,
possuindo recursos diferenciados e uma comunidade Alta disponibilidade com GlassFish:
ativa por meio do frum java.net. Com o forte crescimento na utilizao das aplicaes web, a alta dispo-
Para servir contedo web, o servidor de aplicaes da nibilidade de sistemas se tornou uma necessidade em muitos ambientes
Oracle emprega uma derivao do Apache Tomcat, e a computacionais da atualidade. Nesse cenrio, o GlassFish 3 inclusive na
fim de obter maior performance e escalabilidade, faz uso sua distribuio open source fornece uma soluo robusta utilizando
do componente Grizzly, uma biblioteca baseada no Java uma arquitetura baseada em cluster combinada com o Apache HTTP
New I/O (NIO) que exerce um papel fundamental na Server no papel de balanceador de carga.
arquitetura do GlassFish, j que permite o crescimento Para aumentar ainda mais a confiabilidade da soluo, possvel ga-
no nmero de requisies atravs de mltiplas threads. nhar em performance efetuando tuning na programao, no servidor
De forma isolada, porm, o Grizzly no capaz de de aplicao, na JVM, no hardware e at mesmo no sistema operacional.
atender a um grande volume de acessos, normalmente Veremos que pequenos ajustes podem significar uma melhoria signifi-
encontrado em sistemas crticos. Neste caso, preciso cativa, permitindo um crescimento maior na escalabilidade. sobre tudo
montar um ambiente que apresente uma grande capa- isso que analisaremos nesse artigo.
cidade de throughput, aliado a solues de redundncia
e balanceamento de carga, oferecendo transparncia de
acesso ao usurio final. que se rode o mesmo programa de forma paralela em mltiplas
O GlassFish possui suporte criao de cluster e inte- mquinas, oferecendo melhor experincia atravs da redundncia
grao com balanceadores de carga para a montagem proporcionada por essa configurao. O balanceador de carga, por
de ambientes crticos. O cluster, nesse cenrio, permite sua vez, o n central da soluo que recebe toda requisio de

42 Java Magazine Edio 105


entrada e a direciona para algum dos ns do cluster de acordo com utilizam APIs Java EE avanadas. Nessa simulao, faremos uso
um algoritmo. atravs dele que conseguimos a transparncia de do profile Full Platform, e nossa instalao ser realizada nas duas
acesso, isentando o usurio de modificar a URL da requisio de mquinas atravs de arquivo compactado, que independente de
acordo com o n do cluster que fornecer o recurso. plataforma. Os passos a serem seguidos so:
No entanto, independente de se montar um ambiente de alta 1. Baixe o arquivo compactado de instalao em http://glassfish.
disponibilidade com cluster e balanceamento de carga, sempre java.net/downloads/3.1.2-final.html;
aconselhada a realizao de algumas prticas que melhorem o 2. Descompacte o arquivo na pasta desejada (o diretrio de destino
desempenho do ambiente como um todo. Esse processo conhe- ser onde o Servidor de Aplicao ficar instalado);
cido como tuning de performance (ou simplesmente tuning), e tem 3. Por fim, entre na pasta /<dir_glassfish_v3.1.2>/bin e inicialize o
sido aplicado principalmente em aplicaes web. Vrias tcnicas GlassFish atravs do executvel asadmin:
podem ser empregadas para realizao dessa tarefa, porm as
mais comuns so otimizao de cdigo, estratgia de cache, tuning cd /<dir_glassfish_v3.1.2>/bin
asadmin start-domain
do servidor de aplicao e tuning da JVM.
Nesse artigo, apresentaremos como instalar o GlassFish, criar Como podemos perceber, estamos iniciando o domnio padro
clusters, instncias, configurar o balanceamento de carga e empre- domain1 criado automaticamente quando instalamos o servidor
gar tcnicas de tuning atravs de simples configuraes e padres de aplicao com o comando start-domain, atravs do utilitrio
de programao. Nosso objetivo aumentar a confiabilidade das asadmin.
aplicaes publicadas, visto que em um ambiente de cluster como O asadmin o principal comando utilizado pelo administrador do
o que vamos criar, se uma das mquinas envolvidas apresen- servidor de aplicao. Ele serve para diversas tarefas, como parar e
tar problemas, a outra responde pelas requisies. Outro fator iniciar o servidor, gravar configuraes, publicar aplicaes, entre
importante para a preveno de falhas a realizao de tuning. outras. Existem, no entanto, vrias outras maneiras de efetuarmos
Veremos que ao seguir algumas prticas no desenvolvimento de o controle do GlassFish, porm as mais utilizadas so:
sistemas e efetuando certas configuraes no servidor de aplica- Atravs do console administrativo, no endereo http://host_do_
o, podemos obter um rendimento muito superior, melhorando servidor:4848;
o gerenciamento de memria, o desempenho de aplicaes e o Atravs de ferramentas de linha de comando. Como mencionado,
tempo de resposta para as requisies. asadmin uma delas e ser utilizada durante todo esse artigo.

O Servidor de Aplicao composto por um ou mais domnios


que, conceitualmente, podem ser encarados como repositrios que
armazenam grupos de instncias autnomas (standalone) ou de
cluster. Uma instncia um processo da JVM que armazena as
Tutorial aplicaes do servidor, possui sua prpria rvore de diretrios e
algumas configuraes individuais. Cada domnio, por sua vez,
utiliza uma rea de memria separada, possui vrios recursos
Passos para instalao exclusivos, como Pools JDBC e EJB Timers, armazena seus logs
Em primeiro lugar, antes de instalarmos o GlassFish, precisa- particulares e tem sua rea administrativa chamada de Servidor
mos ter a mquina virtual Java configurada. Para a verso do de Administrao de Domnio (em ingls, Domain Administration
servidor de aplicao que vamos trabalhar (3.1.2), necessrio Server DAS).
que seja a verso 1.6 da JVM. Portanto, realize antecipadamente
a instalao da JDK nas duas mquinas que faro parte do cluster - Instncia Autnoma: as instncias autnomas esto vinculadas a um domnio,
na nossa simulao. possuem suas prprias configuraes e podem ser criadas independentemente de
Agora devemos instalar e iniciar o GlassFish. H duas opes haver um cluster criado.
disponveis para download:
Open Source Edition, disponvel no site da comunidade GlassFish - Instncia de Cluster: esse tipo de instncia vinculado a um cluster e gerenciado
em https://glassfish.dev.java.net; por um dos ns da soluo.
O racle Glassfish Server, verso paga que pode ser baixada em
http://www.oracle.com/technology/products/glassfish/index.html. Na Figura 1 podemos visualizar os diversos componentes de
uma instncia do servidor de aplicao, como o gerenciador
Nesse artigo faremos uso da distribuio open source. impor- de transaes, o container EJB, o servidor HTTP, entre outros.
tante ressaltar, entretanto, que o GlassFish 3 trouxe o conceito de O GlassFish j vem configurado com uma instncia standalone
profile nas opes de download. Assim, foram criados os perfis Web de nome server, que atende s necessidades da maior parte
e Full Platform, onde a grande diferena entre os dois est no fato dos usurios e onde so publicadas as aplicaes em uma
de a segunda opo ter sido projetada para desenvolvedores que instalao padro.

Edio 105 Java Magazine 43


Alta disponibilidade com GlassFish

servlet, normalmente testando se a URL possui um pattern previamente definido.


Em caso positivo, ele assume o processamento da requisio e invoca o servlet
apropriado.

Criando um cluster com duas mquinas envolvidas


Um cluster no GlassFish um grupo de instncias que comparti-
lham configuraes, recursos e aplicaes. Podemos criar clusters
abrangendo vrias mquinas com uma ou mais instncias em
cada uma delas , ou com todas as instncias no mesmo servidor.
A primeira abordagem, porm, traz a grande vantagem de ter-
mos a redundncia da aplicao em outros ns, portanto nossa
simulao seguir esse modelo.
No ambiente que iremos criar, as mquinas envolvidas tero os
nomes appserver1 e appserver2. A primeira delas, appserver1, ser
o DAS, ou seja, o n administrativo. Ela armazenar o cluster e
uma das instncias dele, chamada inst_local; j appserver2 ser a
mquina que possuir a instncia remota do cluster, chamada
inst_remota.
Na verso 2 do GlassFish precisvamos criar antecipadamente
um agente antes de termos uma instncia de cluster. Isso acon-
tecia porque tnhamos que associar a instncia ao agente. J na
verso 3 o procedimento um pouco diferente, pois no existem
Figura 1. Instncia do GlassFish (Fonte: http://docs.sun.com/app/docs/doc/820-4335/ablaz?a=view)
comandos para gerenciar agentes. Outra mudana significativa
que no h mais necessidade de habilitar o suporte para cluster
Por que utilizar cluster? antes de conseguirmos criar um. A instalao padro j traz tudo
Em um cluster, dois ou mais computadores trabalham de forma configurado, independente de estarmos utilizando o perfil web
conjunta para realizar algum tipo de processamento como se ou full platform do servidor de aplicao.
fossem uma nica mquina. Solues baseadas nessa arquitetura Para permitirmos a administrao central das instncias pelo
normalmente utilizam servidores conectados a uma rede local DAS, necessrio configurar alguma forma de comunicao
e se tornaram mais populares a partir da melhoria na relao entre o DAS e os ns. O GlassFish d suporte a SSH e DCOM
preo/performance dos computadores pessoais e workstations. para essa tarefa, porm h a opo de no usar nenhuma das
Em ambientes de produo, os clusters so utilizados mais co- duas alternativas, o que fora o controle da instncia (criao,
mumente como: inicializao, parada, etc.) localmente, ou seja, os comandos de-
Clusters de alto desempenho quando computadores so ligados vem ser disparados na prpria mquina em que a instncia foi
para realizar operaes distribudas envolvendo alto volume de criada. Esse tipo de n chamado de CONFIG. A Oracle sugere
processamento, como clculos matemticos complexos; que para clusters com poucos ns se use controle local, mas para
Clusters de balanceamento de carga tm por funo controlar grandes infraestruturas o ideal possuir a administrao central
a distribuio equilibrada do processamento entre as mquinas para gerenciamento das instncias.
que os compem; Nesse artigo veremos um exemplo prtico com administrao
Clusters de alta disponibilidade aplicados a situaes em que local em cada n, por uma questo de facilidade. Se h a necessi-
os sistemas do cluster precisam permanecer ativos por um longo dade de configurar DCOM ou SSH no seu ambiente, consulte o
perodo de tempo e em plena condio de uso. documento High Availability Administration Guide, disponvel em
http://docs.oracle.com/cd/E26576_01/doc.312/e24934.pdf.
Na nossa simulao queremos garantir maior disponibilidade, A Figura 2 mostra um n DAS (representado por Administration
deixando nossas aplicaes sempre acessveis. Para isso, criaremos Node) e um cluster com duas mquinas envolvidas, denominadas
um cluster que envolver duas mquinas e empregaremos o uso SSH Node 1 e Config Node 2. O DAS se comunica com o n 1 atravs
de balanceamento de carga com o conector mod_jk, que realizar de SSH para gerenciar as instncias e atravs de HTTP e HTTPS
a funo de distribuio do processamento das requisies. para sincronizao de dados. J com o n 2 a comunicao feita
apenas atravs de HTTP e HTTPS, por conta de as instncias
- mod_jk: um conector da Apache Foundation utilizado para realizar a no terem suas execues (inicializao e parada) controladas
comunicao atravs do protocolo AJP entre um servlet container ou servidor de pelo DAS.
aplicao e servidores web como Apache Web Server e IIS. Ele trabalha verificando Na instalao atravs de arquivo compactado, o usurio admi-
se as requisies que chegam ao servidor web devem ser direcionadas para um nistrativo padro do GlassFish vem sem senha para autenticao.

44 Java Magazine Edio 105


Como consequncia, permitido o acesso s operaes de ge- Agora vamos habilitar a administrao segura, atravs do
renciamento apenas na prpria mquina em que o servidor de comando:
aplicao est instalado. Para criarmos as instncias nos outros
ns (instncias remotas), precisamos habilitar a administrao asadmin --passwordfile=credencial.txt enable-secure-admin

segura, um recurso que aumenta a segurana na comunicao


entre o DAS e os ns remotos. Para isso, vamos primeiro alterar a Feito isso, pare e inicie novamente o domnio com os passos a
senha do admin executando o seguinte comando a partir da pasta seguir para que o GlassFish carregue as novas configuraes:
/<dir_glassfish_v3.1.2>/bin da mquina appserver1:
asadmin stop-domain
asadmin change-admin-password asadmin start-domain

Antes de criarmos as instncias, precisamos ter o cluster confi-


gurado. Desse modo, execute o seguinte comando para configurar
o cluster no servidor DAS:

asadmin create-cluster --passwordfile=credencial.txt cluster1

Agora iremos criar e deixar nossas instncias preparadas para


que o cluster possa utiliz-las. Como dito anteriormente, nosso
cenrio possuir uma instncia na mquina em que se encontra
o DAS (appserver1) e outra na mquina remota (appserver2). Dessa
forma, a partir do diretrio /<dir_glassfish_v3.1.2>/bin do DAS,
execute o seguinte comando:

asadmin create-local-instance --cluster cluster1 --passwordfile=credencial.txt --system-


properties HTTP_LISTENER_PORT=18080 inst_local

Figura 2. Instalao do GlassFish com cluster que utiliza duas mquinas e quatro instncias Nosso prximo passo ser criar a outra instncia. Assim, na
(Fonte: http://glassfish.java.net/public/clustering31.html) mquina remota (appserver2), rode o comando:

Ser solicitado o nome de usurio. Entre com admin. Na senha asadmin create-local-instance --host appserver1 --cluster cluster1 --passwordfile=credencial.
anterior, deixe em branco. Em seguida digite a nova senha dese- txt --systemproperties HTTP_LISTENER_PORT=18080 inst_remota
jada nos dois passos seguintes e confirme.
Para no ficarmos informando sempre a senha e o usurio importante ressaltar que no precisamos iniciar o domain1
administrativo do DAS em todas as operaes com o utilitrio na mquina appserver2, ou seja, no necessrio que o processo
asadmin, e termos a possibilidade de colocar um script de inicia- de administrao do domnio esteja sendo executado, apenas as
lizao do GlassFish no carregamento do sistema operacional, instncias. Isso porque a funo de gerente caber mquina
vamos criar um arquivo chamado credencial.txt dentro da pasta appserver1.
/<dir_glassfish_v3.1.2>/bin nas duas mquinas do cluster contendo Como j temos as instncias criadas, podemos iniciar o cluster
a senha informada no passo anterior. O arquivo deve ficar com atravs do seguinte comando, executado a partir do diretrio
a seguinte linha: /<dir_glassfish_v3.1.2>/bin da mquina com o DAS:

AS_ADMIN_PASSWORD=<digite_aqui_a_senha_informada_anteriormente> asadmin start-cluster --passwordfile=credencial.txt cluster1

O utilitrio dispara a inicializao do cluster e da instncia local


Assim como vrios outros softwares open source, o GlassFish do cluster (inst_local). Como no estamos usando DCOM, nem SSH,
possui essa caracterstica de salvar a senha em texto puro. Por a execuo da instncia remota (inst_remota) no efetuada. Nesse
esse motivo deve-se ter extremo cuidado com as permisses caso, precisamos rodar o comando manualmente na mquina
do arquivo credencial.txt. Porm, h uma alternativa: existe a appserver2 para inicializ-la:
funcionalidade de criao de alias de senha, um recurso que au-
menta a segurana na execuo das tarefas de administrao do asadmin start-local-instance --passwordfile=credencial.txt inst_remota
servidor. Caso queira saber mais sobre essa operao, consulte
a seo Administering Password Aliases do documento Security Pronto! Nosso cluster est iniciado e as duas instncias rodando.
Guide disponvel em http://download.java.net/glassfish/3.1.2/release/ A vantagem dessa configurao que, ao fazer o deploy de uma
glassfish-ose-3.1.2-docs-pdf.zip. aplicao, ela ficar visvel para acesso em todas as mquinas

Edio 105 Java Magazine 45


Alta disponibilidade com GlassFish

do cluster, melhorando a disponibilidade. seguintes endereos no nosso navegador: P ermitir escalabilidade horizontal atra-
Entretanto falta um passo importante: a http://appserver1:18080/clusterjsp e http:// vs de mltiplos hosts fsicos ou lgicos,
instalao do balanceador de carga, uma appserver2:18080/clusterjsp. deixando o endereo do sistema com uma
etapa que realizaremos posteriormente. A Figura 3 ilustra como est montado o nica URL;
nosso ambiente e de que forma os clientes Possibilitar adicionarmos mquinas e/ou
Testando o Cluster devem direcionar as requisies ao siste- instncias ao balanceador sem pararmos o
Para efetuarmos nossos testes, iremos ma clusterjsp. servio;
baixar uma aplicao simples disponibi- Se tudo der certo, aparecer uma pgina Permitir isolar o usurio de falhas no host
lizada pelos prprios desenvolvedores do com vrias informaes sobre o n e a ins- em quedas do servidor;
GlassFish que fornece informaes sobre tncia, porm temos um problema: o usu- Aumentar a segurana ao esconder a rede
o ambiente em que ela est publicada. O rio nunca saber para qual das duas URLs interna do usurio.
endereo para download do arquivo http:// direcionar sua requisio. Se a instncia
developers.sun.com/appserver/reference/te- inst_local, do appserver1 ficar indisponvel, - Escalabilidade horizontal: a escalabilidade
chart/load-balancing/clusterjsp.zip e devemos o endereo http://appserver2:18080/clusterjsp um conceito que demonstra a capacidade de
salv-lo em qualquer pasta do servidor em correspondente instncia inst_remota do um sistema, rede ou processo de manipular uma
que se encontra o DAS (appserver1). appserver2 dever ser acessado. A situao poro crescente de trabalho de forma uniforme.
Em seguida, descompacte o arquivo bai- inversa tambm acontece, forando a mo- No caso da escalabilidade horizontal esse
xado em algum diretrio. Na raiz da pasta dificao da URL no navegador. Fica claro aumento conseguido colocando mais ns ao
de destino da extrao, h uma aplicao que precisamos deixar isso transparente sistema, como adicionar um novo computador a
chamada clusterjsp no formato EAR (En- para o usurio. A soluo configurar um um cluster.
terprise Archive). Efetue o deploy no cluster, balanceamento de carga que receber a
executando o seguinte comando: requisio e escolher qual das duas ins- O GlassFish d suporte aos servidores
tncias realizar o processamento. web Oracle HTTP Server, Microsoft IIS,
asadmin deploy --target cluster1 --passwordfile=credencial.txt Apache HTTP Server e Oracle iPlanet
<diretorio_de_destino_estrao>/clusterjsp.ear Instalando o Balanceamento de Carga Web Server para realizar o balanceamen-
O balanceador de carga funcionar como to de carga, mas a soluo da Apache
Aguarde a publicao da aplicao nas o n central da nossa soluo, ou seja, Software Foundation a mais comum.
duas instncias do cluster. Como definimos receber as requisies dos clientes e as Na nossa configurao, vamos utilizar
que ambas respondero na porta 18080 distribuir entre os ns do cluster. Alm a verso 2.2, juntamente com o plugin
para requisies HTTP no momento em desse papel-chave para o funcionamento mod_jk, que far uso do protocolo AJP.
que as criamos, podemos testar o fun- do ambiente, proporcionar uma srie de Dessa forma deixaremos o web server
cionamento do cluster entrando com os vantagens. Entre elas, podemos citar: funcionando como front-end do nosso
cluster, ou seja, responsvel por distribuir
a carga entre os ns, com apenas alguns
passos.
Em relao instalao do Apache
HTTP Server, no existe nada de especial.
Basta que seja realizado o procedimento
padro na mquina em que se encontra
o DAS, j que appserver1 ser tambm
responsvel pelo balanceamento. O
download do servidor web pode ser feito no
endereo http://httpd.apache.org/download.
cgi. As instrues para instalao podem
ser encontradas em http://httpd.apache.org/
docs/2.2/install.html.

- AJP: o AJP, de Apache JServ Protocol, um


protocolo binrio, orientado a pacotes, que permite
a um servidor web obter vrias informaes de
gerenciamento do servidor de aplicao. Ele utiliza
conexes TCP e empregado normalmente em
balanceamento de carga.
Figura 3. Representao do ambiente montado com o cluster1

46 Java Magazine Edio 105


Configurando o Balanceador de Carga no endereo http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/
Cada instncia que faz parte do balanceador de carga deve binaries/. Ao abrir a URL, selecione o sistema operacional em que o
ter uma propriedade chamada jvmRoute especificada em sua Apache HTTP Server est instalado, clique na pasta com a verso
configurao, conforme veremos a seguir. Ela indicar qual das mencionada (1.2.31) e baixe o arquivo relativo ao Apache 2.2.
instncias do cluster respondeu pela ltima requisio do cliente.
O balanceador de carga obter essa informao atravs da URL ou
Listagem 1. Comandos para definir os valores das variveis em cada instncia.
de um cookie HTTP, permitindo que se saiba para onde direcionar
as solicitaes subsequentes. Alm da propriedade jvmRoute, pre- asadmin create-system-properties --target inst_local --passwordfile=credencial.txt
cisamos indicar a porta que ser usada pelo balanceador de carga AJP_INSTANCE_NAME=instancia_local_worker
asadmin create-system-properties --target inst_local --passwordfile=credencial.txt
em cada instncia atravs da varivel AJP_PORT. AJP_PORT=8020
Pelo fato de serem configuraes do n administrador do asadmin create-system-properties --target inst_remota --passwordfile=credencial.
cluster, os passos de 1 a 7 a seguir devem ser realizados no DAS txt AJP_INSTANCE_NAME=instancia_remota_worker
asadmin create-system-properties --target inst_remota --passwordfile=credencial.
(appserver1). Inicialmente vamos configurar os parmetros de txt AJP_PORT=8020
comunicao do GlassFish com o Apache:
1. Adicione um Listener HTTP associado ao cluster:
O arquivo binrio do mod_jk um mdulo extra do Apache HTTP
asadmin create-network-listener --protocol http-listener-1 --passwordfile=credencial.txt Server e servir para que o conector seja carregado no servidor web.
--listenerport ${AJP_PORT} --jkenabled true --target cluster1 jk-connector
- Workers: so instncias do servidor de aplicao que aguardam para executar
- Listener HTTP: componente do GlassFish responsvel por realizar a comunicao servlets ou servir qualquer outro contedo, simulando serem respostas do
HTTP entre o servidor e os clientes. Conceitualmente um socket de escuta que servidor web.
possui um IP e uma porta de escuta.
5. Configure o arquivo httpd.conf para trabalhar com balancea-
No se esquea das aspas simples no valor do parmetro listener- mento de carga adicionando as instrues da Listagem 2 (coloca-
port. Com o comando create-network-listener, estamos criando um remos aps a linha 53 do arquivo, que est comentada).
listener do protocolo HTTP associado ao cluster. O listener usar a
porta especificada pela varivel AJP_PORT nas instncias para
Listagem 2. Linhas a serem adicionadas no arquivo httpd.conf.
se comunicar com o mod_jk.
2. Crie uma propriedade da JVM chamada jvmRoute associada LoadModule jk_module modules/<nome_do_arquivo_binario_do_mod_jk>
ao cluster: JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
asadmin create-jvm-options --passwordfile=credencial.txt --target cluster1 JkLogStampFormat [%a %b %d %H:%M:%S %Y]
JkRequestLogFormat %w %V %T
-DjvmRoute=\${AJP_INSTANCE_NAME}
JkMount /clusterjsp/* loadbalancer

Assim como no comando anterior, no se esquea das aspas


duplas no final do comando. Ao realizar esse passo estamos infor- O arquivo httpd.conf possui todas as configuraes do Apache e,
mando que a propriedade jvmRoute do cluster ser especificada nas ao adicionar as linhas especificadas, estamos indicando:
instncias por uma varivel chamada AJP_INSTANCE_NAME. Linha 1: o mdulo mod_jk deve ser carregado na inicializao
3. Agora precisamos informar os valores das variveis AJP_PORT do servidor web atravs do seu arquivo binrio (o nome mudar
e AJP_INSTANCE_NAME, definidas anteriormente para cada de acordo com sua plataforma);
instncia do cluster, executando os comandos da Listagem 1. Linha 2: o arquivo de configurao com os workers;
Linhas 3, 4, 5 e 6: respectivamente, o arquivo em que ser
Nossa ateno nesse momento volta-se para o servidor web. Pre- gravado o log do conector, o nvel de log, o padro de hora a ser
cisamos criar dentro da pasta conf do Apache HTTP Server (que gravado e o formato;
nesse momento j deve estar instalado) o arquivo workers.properties. L inha 7: o pattern da URL que ser reconhecido pelo conector
Nele, definiremos dois workers chamados instancia_local_worker e para encaminhar a requisio ao GlassFish. Como temos um /
instancia_remota_worker. O contedo do arquivo (como veremos clusterjsp/*, ao detectar que a requisio tem o padro http://
frente) conter a porta (especificada no GlassFish pela varivel host_do_servidor/clusterjsp/, o Apache reencaminhar a solicitao
AJP_PORT) e o nome de cada instncia (especificado no GlassFish para o servidor de aplicao.
pela varivel AJP_INSTANCE_NAME) com as quais o protocolo
AJP ir se comunicar. 6. Crie o arquivo de configuraes do balanceador de carga
4. Copie o arquivo binrio do conector para a pasta /<dir_apache>/ com o nome workers.properties em /<dir_apache>/conf contendo as
modules. Usaremos a verso 1.2.31. Esse arquivo pode ser encontrado linhas da Listagem 3.

Edio 105 Java Magazine 47


Alta disponibilidade com GlassFish

Listagem 3. Linhas do arquivo workers.properties. Listagem 4. Comandos para reiniciar o domnio e o cluster.

worker.list=loadbalancer asadmin stop-domain


asadmin start-domain
# Propriedades da instancia_local_worker asadmin stop-cluster --passwordfile=credencial.txt cluster1
worker.instancia_local_worker.type=ajp13 asadmin start-cluster --passwordfile=credencial.txt cluster1
worker.instancia_local_worker.host=appserver1
worker.instancia_local_worker.port=8020
worker.instancia_local_worker.lbfactor=1 8. Reinicie tambm a instncia inst_remota em appserver2:
worker.instancia_local_worker.connection_pool_size=10
worker.instancia_local_worker.socket_timeout=300 asadmin stop-local-instance inst_remota
asadmin start-local-instance --passwordfile=credencial.txt inst_remota
# Propriedades da instancia_remota_worker
worker.instancia_remota_worker.type=ajp13 9. Agora inicie o servidor web em appserver1 com o comando
worker.instancia_remota_worker.host=appserver2
worker.instancia_remota_worker.port=8020
referente sua plataforma. Por exemplo, no Linux: <dir_apache>/
worker.instancia_remota_worker.lbfactor=1 bin/apachectl start.
worker.instancia_remota_worker.connection_pool_size=10
worker.instancia_remota_worker.socket_timeout=300
Est feito! A partir de agora, no caso de uma instncia do cluster
worker.loadbalancer.type=lb falhar, o balanceador de carga mudar a rota de todas as requisi-
worker.loadbalancer.balance_workers=instancia_local_worker, es subsequentes para a outra instncia, que ter a capacidade de
instancia_remota_worker
dar continuidade solicitao do usurio. importante ressaltar
que, ao realizar o deploy no console administrativo, deve ser mar-
Como mencionado anteriormente, o arquivo workers.properties cado o checkbox availability para que a aplicao fique acessvel.
possui as configuraes dos workers que faro a comunicao entre O balanceamento de carga, portanto, ir aumentar a disponibi-
as instncias do servidor de aplicao (no nosso caso, as instncias lidade da aplicao evitando sobrecarga, mas afetar um pouco o
do cluster) e o servidor web Apache. Podemos visualizar que nas desempenho por conta do processamento efetuado pelo Apache
linhas 4 a 9 e 12 a 17, estamos definindo os workers instancia_remota_ HTTP Server antes da requisio chegar ao GlassFish. O mais
worker e instancia_local_worker com suas respectivas configuraes. importante de tudo isso, entretanto, que estamos aumentando
Esses nomes correspondem aos definidos no valor da propriedade a confiabilidade e podemos adicionar mais instncias ao cluster
AJP_INSTANCE_NAME de cada instncia do cluster. em tempo de execuo sem parar o servio.
Outros dados importantes do arquivo so:
L inhas 6 e 14: possuem as portas que cada worker ir utilizar. Testando o Balanceamento de Carga
Esse valor corresponde ao valor da varivel AJP_PORT tambm A aplicao que publicamos no cluster nos auxiliar nessa tarefa. O
definida anteriormente para cada instncia do cluster; objetivo verificar se as duas instncias respondem pela aplicao e
Linhas 5 e 13: mencionam o host que corresponde a cada n que se uma delas atender a requisio no caso da outra apresentar falha.
faz parte do cluster; Inicialmente, vamos verificar se o ambiente est funcionando. Para
Linhas 4 e 12: definem a verso do protocolo a ser utilizada pelo isso, abra o navegador em uma mquina que tenha acesso ao DAS
worker. No caso, ajp13, que utiliza sockets para comunicao; (pode ser, inclusive, uma das usadas para montar o cluster) e entre em
L inha 19: define o tipo de balanceamento de carga como lb, que http://appserver1/clusterjsp/ (no se esquea da barra no final).
utiliza o algoritmo de escalonamento round robin com certa tole- Ser exibida a pgina inicial do sistema indicando o nome ou o IP
rncia a falhas. Assim, permite que a carga seja distribuda entre do servidor em que o Apache HTTP Server encontra-se instalado,
os ns do cluster j que o algoritmo trabalha com uma fila circular a porta HTTP de entrada, o n que atendeu pela requisio (campo
para escolher qual instncia responder pela requisio; executed from server), o ID da sesso, entre outras informaes. Na
Linha 20: lista os workers que fazem parte do balanceamento de pgina, existe uma funcionalidade para adicionar um atributo na
carga; sesso. Desse modo, no campo name of session atribute, digite nome
Linhas 7 e 15: definem o peso que cada worker ter no escalo- do servidor. No campo value of session atribute, digite glassfish
namento. Como os dois receberam valores iguais, teoricamente e clique em add session data.
recebero o mesmo nmero de requisies; Veremos que as informaes fornecidas no formulrio da pgina
Linhas 8, 9, 16 e 17: definem o tamanho do pool de conexes do aparecero no local data retrieved from the HttpSession. Observe o
protocolo com o servidor de aplicao e o timeout do socket. n que atendeu pela requisio (lembrando que essa informao
est no campo executed from server). Vamos supor que tenha sido
Caso queira consultar outros parmetros de configurao, acesse appserver1. Nesse caso, iremos acessar novamente o diretrio
o endereo do guia de referncias do conector mod_jk em http:// /<dir_glassfish_v3.1.2>/bin da mquina com o DAS e pararemos a
tomcat.apache.org/connectors-doc/reference/workers.html. instncia inst_local executando o comando:
7. Reinicie o domnio e o cluster executando os comandos da
Listagem 4 a partir do diretrio /<dir_glassfish_v3.1.2>/bin. asadmin stop-local-instance inst_local

48 Java Magazine Edio 105


Se o outro n tivesse sido informado, teramos que parar a minimizando ainda mais a possibilidade de uma aplicao no
instncia inst_remota da mquina appserver2. Agora recarregue oferecer resposta.
a pgina. Veremos que o outro n automaticamente responde Esta seo est dividida em:
pela aplicao, mas o dado da sesso que havia sido inserido C onceitos Java;
(nome do servidor) foi perdido. Isso acontece porque no J ava Web;
estamos usando replicao de estado da sesso. Essa uma D eployment.
configurao mais complexa, porm caso haja necessidade de
implement-la, consulte o documento High Availability Adminis- Conceitos Java
tration Guide, disponvel em http://docs.oracle.com/cd/E18930_01/ As dicas a seguir se encaixam em qualquer sistema desenvolvido
pdf/821-2426.pdf. em Java, pois dizem respeito a conceitos bsicos da linguagem:
A Figura 4 demonstra como ficou nosso ambiente de alta dispo- Evite Serializao: A serializao e deserializao de objetos
nibilidade envolvendo as duas mquinas, o cluster e o balanceador um processo muito pesado e degrada o desempenho da aplicao.
de carga. possvel tambm verificar como ficaram as chamadas Caso elas sejam realmente necessrias, use atributos com o mar-
ao sistema, que agora no precisam ter a porta 18080 informada cador transient para reduzir a carga da serializao. Outra sada
e, independente de uma ou outra instncia responder pela requi- personalizar os mtodos readObject() e writeObject(), adicionando
sio, a URL no muda. apenas os atributos que desejamos serializar;
Use StringBuilder para concatenar strings: Um bom desenvolvedor
Java sabe que as Strings so imutveis e que, a cada concatenao,
um novo objeto criado. Obviamente podemos ter um estouro
de memria se o coletor de lixo no entrar logo em ao;
Coloque o valor null em variveis que no esto sendo uti-
lizadas: Esse simples procedimento ajudar o coletor de lixo a
economizar tempo, pois a referncia apontar para uma posio
nula, facilitando a identificao de objetos que no esto sendo
usados;
Evite sobrescrever o mtodo finalize(): Sobrescrev-lo significa
prejudicar o desempenho do coletor de lixo e pode deixar sua
rotina com um comportamento imprevisvel;
Sincronize apenas quando necessrio: Por razes bvias,
permitir que apenas uma thread acesse parte do cdigo preju-
dica a escalabilidade. bvio que essa situao deve ocorrer
apenas em ltimo caso e no menor trecho de cdigo possvel.
Figura 4. Representao do ambiente montado com o cluster1, juntamente com o balanceador Por exemplo:
de carga
O trecho sincronizado apresentado na Listagem 5 bastante cur-
Tuning no GlassFish to, mas h necessidade realmente de que ele exista? Teoricamente,
Existem muitas dicas no desenvolvimento de aplicaes e al- por ser apenas uma simulao de novo saldo, no preciso isolar
gumas configuraes que podem ser efetuadas no servidor que a instncia da classe Conta.
afetam consideravelmente o desempenho de um sistema. H Declare constantes como static final: O compilador pode rea-
casos, por exemplo, que um simples parmetro em um arquivo de lizar otimizaes facilmente, quando declaramos as variveis
configurao pode derrubar o servidor em questo de segundos, dessa forma.
e o objetivo dessa seo evitar que falhas como essa, e outras
menos graves, aconteam. Listagem 5. Mtodo com trecho de cdigo sincronizado.
As dicas esto divididas em cinco categorias: public double realizaSimulacaoNovoSaldo(Conta c, double rendimento) {
Tuning na Programao; synchronized (c) {
S ervidor de Aplicao; return c.getSaldo()*(1+rendimento);
}
JVM; }
Sistema Operacional;
Hardware.
Java Web
Tuning na Programao Quando se desenvolve sistemas web, tambm existem vrios
Alm de trabalharmos com um ambiente de alta disponibili- pontos crticos que podem ter impacto no desempenho das apli-
dade, ao realizarmos tuning teremos a performance melhorada, caes. Alguns so demonstrados a seguir:

Edio 105 Java Magazine 49


Alta disponibilidade com GlassFish

No use SingleThreadModel em servlets: Assim como sin- Analise a vantagem do recurso keep alive: Essa funo se refere
cronizar trechos de cdigo de forma desnecessria, implementar possibilidade de se usar a mesma conexo TCP para mltiplas
SingleThreadModel afeta diretamente a escalabilidade; requisies/respostas. Por conta disso, o tempo de resposta HTTP
Use o mtodo init() em servlets para realizar inicializao est normalmente ligado a como esse recurso foi configurado;
pesada: O mtodo init() chamado logo aps o servidor criar Mantenha os resultados do servlet em cache quando possvel:
a instncia do servlet, portanto a melhor maneira de realizar Podemos efetuar cache no servidor ou no cliente e esse procedi-
tarefas pesadas. Dessa forma evitamos respostas demoradas para mento reduzir o processamento no servidor evitando novas
as requisies dos usurios; consultas ao banco de dados, j que haver uma cpia em memria
Evite o uso de System.out.println(): Muitas vezes empregado nos ou na mquina do cliente da informao a ser retornada;
testes locais, no h sentido de se utilizar esse tipo de artifcio em Prefira arquivos WAR ao invs de EAR: Se no houver motivos
ambiente de produo; para utilizar EAR, prefira arquivos WAR, pois possuem melhor
Crie sesses com moderao e use o mtodo invalidate() quando desempenho;
no forem mais necessrias: As sesses afetam diretamente a Desabilite o security manager: Se h certeza que nenhum
escalabilidade das aplicaes. Uma dica que nem sempre co- cdigo malicioso rodar no servidor e no usada autenticao
nhecida o uso da diretiva <% page session=false %> nas pginas nativa do Java na aplicao, desabilite o security manager. Entre-
JSP. Ela previne que o servidor de aplicao crie sesses quando tanto, caso o sistema leia ou escreva em arquivos, abra sockets,
elas no forem necessrias; modifique propriedades do sistema ou a prioridade de processos,
Mantenha o tamanho da sesso pequeno (se possvel, abaixo evite desabilit-lo.
de 7kb): Alm de ter impacto na escalabilidade, o tamanho da
sesso influencia no tempo de resposta. importante, por exem- Servidor de Aplicao
plo, evitar manter objetos grandes (como colees) na sesso. Os servidores de aplicao possuem vrias funes que so
Em geral eles foram a serializao adicionando um overhead interessantes para uso quando estamos desenvolvendo, mas em
computacional; ambiente de produo as configuraes precisam ser revistas.
Configure o tempo correto para expirar a sesso: necessrio Esta seo est dividida em:
verificar se o tempo para expirar a sesso no est muito grande, Deploy no servidor de aplicao;
porm valores muito baixos tambm podem ter impacto negati- Log;
vo na utilizao do sistema. Esse parmetro depender do tipo P ool de conexes;
de aplicao e do tempo que o cliente normalmente permanece J VM.
realizando operaes no sistema;
Evite Managed Beans com escopo de sesso nas aplicaes Deploy no Servidor de Aplicao
JSF: Usar mais de um Managed Bean de sesso um indcio de O processo de deploy de uma aplicao sempre muito dis-
que seu cdigo tem problemas. Caso precise, use frameworks pendioso para o servidor, mas existem dicas que diminuem o
como o MyFaces Tomahawk com cuidado para salvar o estado processamento com essa tarefa, como as listadas a seguir:
dos objetos; Desabilite o auto-deployment: Desse modo o servidor de
Cuidado com a paginao de registros em JSF: O ideal uti- aplicao no ter que ficar monitorando o diretrio de deploy
lizar paginao por demanda para evitar demora nas respostas automtico para verificar se h novas verses dos sistemas,
ao cliente. Assim poucos objetos so armazenados na memria melhorando a performance. Para desabilitar esse recurso no
a cada pgina navegada, alm de representar menos custo para GlassFish, clique em Domain, no menu esquerdo, depois em
o banco de dados, j que a consulta ter um limite de registros a Applications Configuration, desmarque a opo Auto Deploy e
retornar. clique em Save;
Use a pr-compilao de pginas JSP: A compilao de pginas
- SingleThreadModel: termo que especifica que apenas um processo ser JSP um recurso dispendioso. Pr-compilar esses arquivos uma
executado em determinado trecho de cdigo. Em um servlet isto conseguido ao boa sada para evitar esse consumo de processamento no momento
implementar a interface SingleThreadModel, o que ir assegurar que no existiro incorreto. Para ativar esse recurso no GlassFish, clique em Domain,
duas threads executando o mtodo service() de forma concorrente. no menu esquerdo, depois em Applications Configuration, marque
a opo Precompile e clique em Save;
Deployment Desabilite a republicao dinmica de aplicaes: Se esse
H sempre configuraes e prticas de deployment que ajudam a recurso estiver ativo, o servidor verificar periodicamente por
otimizar os recursos da mquina. Vejamos algumas delas: alteraes nas aplicaes publicadas e automaticamente recarre-
Cuidado com mltiplos diretrios no CLASSPATH: Quanto gar a aplicao com as alteraes. Fica claro o gasto com proces-
maior o nmero de diretrios, pior o tempo de carregamento de uma samento nessa operao. Para desabilit-lo no GlassFish, clique em
classe (class loading). Evite o uso excessivo de diretrios no CLASS- Domain, no menu esquerdo, depois em Applications Configuration,
PATH e ponha as classes relacionadas aplicao em arquivos jar; desmarque a opo Reload e clique em Save.

50 Java Magazine Edio 105


Log trs segundos, devemos tomar providncias, pois um indicativo
O log processado pelo servidor de aplicao pode provocar de que h falha de programao no seu aplicativo;
srios problemas no desempenho do sistema. Por esse motivo, o Configure a memria usada pelo PermGen: Para aplicaes que
GlassFish (assim como a maioria dos seus concorrentes) permite geram e leem classes dinamicamente (sistemas JSP, por exemplo), o
configurar uma srie de parmetros de gravao dos dados, que tamanho do PermGen extremamente importante no desempenho
devem ser informados de acordo com a realidade de cada ambien- do servidor. Use o argumento -XX:MaxPermSize para especific-lo.
te. Dessa forma, as seguintes dicas precisam ser analisadas: Para configurar esse recurso no DAS, clique em Configurations,
Verifique onde o log est sendo gravado: Em geral, gravar em no menu esquerdo, depois em server-config > JVM Settings > JVM
disco afeta a performance. Por conta disso, verifique se o log no Options, configure o valor correto na opo que j existe e clique
est sendo gravado em um dispositivo lento como um sistema de em Save. Para configurar no cluster, clique em Configurations, no
arquivos em rede, por exemplo; menu esquerdo, depois no arquivo de configuraes do cluster
Configure o nvel de log correto para suas necessidades: Em (exemplo: cluster1-config), JVM Settings > JVM Options, configure
geral, o padro INFO para a maioria dos servidores de aplicao, o valor correto na opo que j existe e clique em Save;
porm em um ambiente de produo recomendado configurar Configure o Heap: O heap uma rea de memria utilizada
pelo menos o nvel WARNING. Para configurar no DAS, clique pela JVM para alocao dinmica. importante revis-lo porque
em Configurations, no menu esquerdo, depois em server-config > ele armazena os objetos e suas referncias. Atravs do parmetro
Logger Settings > Log Levels, selecione os valores desejados e clique -Xms indicaremos o tamanho mnimo e do -Xmx o tamanho m-
em Save. Para configurar no cluster, clique em Configurations, no ximo dessa rea. Outra opo de parmetro o uso do coletor de
menu esquerdo, depois no arquivo de configuraes do cluster lixo agressivo (normalmente empregado em mquinas com mais
(exemplo: cluster1-config), Logger Settings > Log Levels, selecione os de um processador), cuja invocao se d pela instruo da JVM
valores desejados e clique em Save. -XX:+AggressiveHeap. Para configurar esse recurso no DAS, clique
em Configurations, no menu esquerdo, depois em server-config >
Pool de Conexes JVM Settings > JVM Options, configure o valor correto na opo
Um pool de conexes dimensionado incorretamente pode afetar -Xmx, adicione a opo -Xms, se desejar, e clique em Save. Para
o tempo de resposta e/ou fazer com que a aplicao apresente configurar no cluster, clique em Configurations, no menu esquerdo,
erros. Por isso os parmetros do pool so to importantes, como depois no arquivo de configuraes do cluster (exemplo: cluster1-
vemos a seguir: config), JVM Settings > JVM Options, configure o valor correto na
Configure os parmetros do seu pool JDBC apropriadamente: opo -Xmx, adicione a opo -Xms, se desejar, e clique em Save.
Parmetros como tamanho do pool e timeout podem ter grande
impacto na performance. Um tamanho de pool insuficiente, por Sistema Operacional
exemplo, pode fazer com que uma requisio no encontre uma co- A preparao da mquina para receber o servidor de aplicao
nexo disponvel prontamente, causando demora na resposta. tem um impacto importante na soluo de deploy, e nesse aspecto a
configurao do sistema operacional exerce um papel fundamen-
JVM tal. Por esse motivo, realizar alguns simples ajustes pode melhorar
Configuraes de memria e de coleta de lixo sempre so crticas significativamente a performance, conforme veremos a seguir:
em servidores de aplicao Java EE. A JVM permite informar uma Aumente o limite do sistema para o nmero de requisies
srie de parmetros importantes que devem ser levados em conta simultneas: Isso evitar que o servidor aborte requisies, um
quando h uma preocupao com performance. Os seguintes problema que, quando ocorre, causa bastante desconforto ao
passos ajudaro nessa tarefa: cliente. Essa alterao vai depender do seu sistema operacional,
Configure a implementao da JVM como server: A mquina portanto consulte a documentao;
virtual client configurada para reduzir o tempo de iniciali- Configure o espao, parties e arquivos corretamente: Separe
zao e o consumo de memria. J a verso server projetada pelo menos 2Gb de espao em disco para o servidor de aplicao. Se
para a mxima velocidade de execuo de programas. Dessa possvel, ponha o Sistema Operacional, a memria swap, o diretrio
forma, invoque-a usando a opo -server na linha de comando. de log e a rvore de diretrios do servidor em discos separados,
Os clusters do GlassFish j vm com essa opo configurada, para que no haja concorrncia de acesso ao mesmo disco;
mas o DAS no. Para configurar esse recurso no DAS, clique Configure corretamente a partio swap: O ideal que seu servidor
em Configurations, no menu esquerdo, depois em server-config > no precise utilizar a memria swap, mas, caso seja necessrio, im-
JVM Settings > JVM Options, substitua o valor -client por -server portante verificar o tamanho ideal. Para isso, observe se o seu servidor
e clique em Save; est usando essa rea e aumente a memria RAM, se possvel.
Verifique como est o desempenho do coletor de lixo: Para
isso, fornea a opo --verbose na inicializao da JVM ou entre Hardware
com o argumento -XX:+PrintGCDetails para detalhamento do log Um ambiente escolhido de forma incorreta pode levar o adminis-
da coleta. Caso o tempo para realizao da tarefa esteja acima de trador do sistema a ter srios problemas. At mesmo a plataforma

Edio 105 Java Magazine 51


Alta disponibilidade com GlassFish

da mquina pode representar o fracasso de uma aplicao, por http://weblogs.java.net/blog/amyroh/archive/2012/02/15/running-


isso devemos estar atentos s seguintes configuraes: glassfish-312-apache-http-server
Escolha uma mquina com mais de uma CPU: Estudos indicam Amy Roh ensina como colocar o Apache como front-end do
que ao dobrar o nmero de CPUs de uma mquina o processa- GlassFish com e sem o uso de cluster.
mento de um servlet aumenta de 50 a 80%;
Assegure que sua placa de rede est trabalhando no modo full
http://tomcat.apache.org/connectors-doc/reference/workers.html
Guia de referncia do conector mod_jk.
duplex: Fazer com que o servidor trabalhe enviando e recebendo
dados simultaneamente extremamente importante, pois diminui http://glassfish.java.net/nonav/v3/admin/planning/j109/list-of-commands.html
o tempo de resposta; Lista de comandos do utilitrio asadmin.
Habilite o DMA no disco rgido: O acesso do disco memria
diretamente evita processamento extra, pois o processador no Livros
utilizado. GlassFish Server Open Source Edition 3.1.2 Quick Start Guide, Oracle,
Fev/2012
- DMA: a sigla DMA vem de Direct Memory Access e expressa a capacidade de Disponvel em http://glassfish.java.net/docs/3.1.2/quick-start-guide.pdf
certos dispositivos de uma mquina, como controladoras de disco e placas
GlassFish Server Open Source Edition 3.1.2 Installation Guide, Oracle,
grficas, em terem acesso direto memria RAM para leitura e escrita.
Fev/2012
Disponvel em http://glassfish.java.net/docs/3.1.2/installation-guide.pdf
Concluses
O GlassFish tem conquistado cada vez mais espao entre os GlassFish Server Open Source Edition 3.1.2 Administration Guide,
servidores de aplicao Java EE. O console de gerenciamento Oracle, Fev/2012
web possui uma interface amigvel e permite que configuraes Disponvel em http://docs.oracle.com/cd/E26576_01/doc.312/e24934/toc.htm
sejam realizadas de forma simples e rpida, o que atrai muitos GlassFish Server Open Source Edition 3.1.2 High Availability
usurios. Alm de possuir uma verso gratuita, apresenta um Administration Guide, Oracle, Fev/2012
nvel de performance excelente, sendo fortemente indicado no Disponvel em http://download.java.net/glassfish/3.1.2/release/glassfish-ose-
mundo corporativo. 3.1.2-docs-pdf.zip
Ao criarmos um cluster como o exemplificado, temos a capaci-
dade de trabalhar com aplicaes crticas que necessitam de alta GlassFish Server Open Source Edition 3.1.2 Performance Tuning Guide,
disponibilidade, como sites de comrcio eletrnico e sistemas Oracle, Fev/2012
bancrios. Outro ponto importante que vimos foi que podemos Disponvel em http://download.java.net/glassfish/3.1.2/release/glassfish-ose-
adicionar livremente mais mquinas soluo de balanceamento 3.1.2-docs-pdf.zip
de carga, um procedimento bastante til em sistemas que apresen- GlassFish Server Open Source Edition 3.1.2 Security Guide, Oracle,
tam picos de acesso em determinados perodos de tempo. Fev/2012
Por fim, a realizao de tuning representa boas prticas a serem Disponvel em http://download.java.net/glassfish/3.1.2/release/glassfish-ose-
seguidas no desenvolvimento de sistemas e em configuraes do 3.1.2-docs-pdf.zip
servidor, contribuindo sensivelmente para que o processamento
alcance nveis mais altos.

Pablo Bruno de Moura Nbrega D seu feedback sobre esta edio! Feedback
eu
http://pablonobrega.wordpress.com
s

A Java Magazine tem que ser feita ao


D

Analista de Sistemas Java, certificado OCJP e OCWCD, formado em seu gosto. Para isso, precisamos saber
sobre e

Cincias da Computao pela Universidade de Fortaleza UNIFOR, o que voc, leitor, acha da revista!
s

ta
edio
trabalha na Universidade Estadual do Cear UECE, est cursando
D seu voto sobre este artigo, atravs do link:
Mestrado em Computao Aplicada na mesma instituio e desenvolve
sistemas h cerca de 7 anos. www.devmedia.com.br/javamagazine/feedback

52 Java Magazine Edio 105


Edio 105 Java Magazine 53
Seo Boas Prticas artigos sobre as tecnologias que podero aumentar a qualidade do desenvolvimento de software

Paradigmas da
Mobilidade
Um estudo sobre as abordagens web,
nativa e hbrida

I Resumo DevMan
mpressiona o ritmo em que avana a adoo de
solues mveis no mundo. Assim como ocorreu
com a web anos atrs, observa-se agora um cres- De que se trata o artigo:
cimento vertiginoso do interesse pela mobilizao Este artigo visa proporcionar uma leitura objetiva sobre os paradigmas
de atividades realizadas dentro das empresas. Para nativo, hbrido e web, aplicados no desenvolvimento de solues mveis.
atender a esta demanda, existem atualmente trs Atravs de uma anlise de aspectos como consistncia e desempenho
abordagens principais, e nosso objetivo ao longo deste de plataformas e tecnologias j estabelecidas, bem como de outras mais
artigo ser, inicialmente, compreend-las em suas recentes e muito bem cotadas no cenrio de mobilidade, alm de aspectos
essncias, para ento passarmos a uma discusso a como a disponibilidade de capitais financeiro e humano, convidamos o
respeito de vantagens, desvantagens, foras e fraque- leitor para uma reflexo sobre a aplicabilidade de cada proposta neste
zas de cada uma e, por fim, filosofarmos acerca de que um mercado altamente dinmico e complexo e que vem atraindo
algumas questes fundamentais que devem nortear um pblico cada vez mais diversificado.
a deciso de empresas e desenvolvedores no plane-
jamento, na capacitao, no setup e na conduo de Em que situao o tema til:
seus projetos. Mobilidade um conceito cada dia mais popular e presente no coti-
A Tabela 1 antecipa, ainda discretamente, os atores que diano das pessoas e das empresas, encontrando-se em franca expanso
compem a temtica ao longo do texto: os paradigmas em todos os mbitos. portanto, imprescindvel para o profissional
nativo, hbrido e web. de Tecnologia da Informao, independente de sua rea de atuao,
Este tem sido um dos mais quentes tpicos de que tome contato com as caractersticas que cerceiam este universo.
discusso em painis, grupos de e-mail e fruns de Focando exclusivamente em aplicativos mveis, este tema nos leva a
desenvolvimento mvel nos dias de hoje, e alguns uma importante reflexo sobre os pontos mais sensveis sobre mobili-
dos principais aspectos que fomentam a polmica dade nos dias de hoje. Quando, como e onde adotar cada abordagem
deste tema so: custo final, curva de aprendizado, existente? Afinal de contas, existe melhor ou pior ou tudo uma questo
reutilizao, desempenho e experincia de usurio. de ponto de vista?
So aspectos que no encerram toda a questo, mas
sem dvidas protagonizam o enredo. No que tange Paradigmas da Mobilidade:
plataforma Android, existe ainda outro aspecto Existem, atualmente, trs paradigmas principais que norteiam o de-
de peso que a fragmentao, que traz desafios que senvolvimento de solues mveis: web, nativo e hbrido. Escolher o
variam para mais ou para menos de acordo com a melhor sempre um exerccio que exige ateno aos mnimos detalhes,
abordagem escolhida, projeto a projeto. principalmente queles que muitas vezes esto escondidos e/ou na ponta
Todos esses pontos tornam, nos dias de hoje, o mapea- final do ecossistema. Faremos, neste artigo, um passeio pelas caracters-
mento dos requisitos de um projeto mvel um processo ticas fundamentais de cada estratgia, apresentando ao longo do texto
especialmente amplo e delicado. Os pontos de reflexo um estudo baseado em projetos reais, fechando com um parecer sobre
trazidos mais adiante devero contribuir para que o a realidade atual em que nos encontramos, bem como a realidade que
leitor desenvolvedor, gerente de projeto ou mesmo entendemos ser a que perdurar pelos prximos anos.
entusiasta consiga tomar a deciso final a respeito da

54 Java Magazine Edio 105


plataforma e das tecnologias que utilizar em cada proposta Listagem 1. Pgina de uma web app usando jQuery Mobile + HTML5.
que precise desenhar.
<!doctype html>
Com base nestes fatos, o artigo abordar, inicialmente, as <html>
caractersticas fundamentais que definem cada uma das <head>
trs estratgias, trazendo a base de conhecimento mnima <title>Exemplo JQuery Mobile</title>
<meta charset=utf-8>
para construir um estudo conclusivo ao final desta salutar e <meta name=viewport
conveniente discusso. content=width=device-width, initial-scale=1, maximum-scale=1>
<link rel=stylesheet
href=http://code.jquery.com/mobile/1.0b2/jquery.mobile-1.0b2.min.css />
Abordagem Descrio <script type=text/javascript
src=http://code.jquery.com/jquery-1.6.2.min.js></script>
Nativa Solues desenvolvidas exclusivamente para uma plataforma
<script type=text/javascript
Web apps Solues web desenhadas para serem acessadas via mobile src=http://code.jquery.com/mobile/1.0b2/jquery.mobile-1.0b2.min.js>
</script>
Hbrida Solues que encapsulam contedo web em wrappers nativos </head>
<body>
Tabela 1. Abordagens existentes para o desenvolvimento de solues mveis
<!-- Pgina inicial do aplicativo -->
<div data-role=page id=home>
Web apps <div data-role=header>
<h1>Home</h1>
Web apps, de maneira sucinta e objetiva, nada mais so que
</div>
aplicaes implantadas em um servidor de aplicaes (como <div data-role=content>
JBoss e GlassFish) ou container web (como Tomcat, Jetty e <div style=text-align: center;>
<h2>Exemplo JQuery Mobile</h2>
outros), desenhadas especificamente para serem acessadas a <img src=images/logo.png width=200 alt=Logo>
partir de navegadores de dispositivos mveis, como tablets e </div>
smartphones. <p>Bem vindo - Mobile web apps dev </p>
</div>
Trata-se, assim, de um tipo de soluo independente de <div data-role=footer data-position=fixed data-id=nav>
plataforma, pois todo o seu contedo construdo com o <div data-role=navbar>
emprego de linguagens e tecnologias como PHP, JavaScript, <ul>
<li><a href=#home
HTML (5), CSS, Java e C#, para no citarmos tantas outras. class=ui-btn-active ui-state-persist>Home</a>
Sua execuo ocorre dentro do contexto de navegadores como </li>
<li><a href=#jquerymobileinfo>Bullet points</a></li>
Safari, Chrome, Firefox, Opera Mini e outros. Na seo Links
<li><a href=#contact>Contato</a></li>
possvel encontrar uma lista completa de navegadores mveis </ul>
disponveis. </div>
</div>
Embora algumas especificaes, linguagens e frameworks
</div>
venham apresentando significativa evoluo e j apresentem </body>
integrao h algum tempo inimaginvel com alguns recursos </html>
nativos das plataformas mveis mais populares do mercado,
ainda no eliminam boa parte das limitaes impostas pelos
navegadores web (dentre as quais uma das mais polmicas nos
dias de hoje o da persistncia local de dados).
uma abordagem, portanto, aplicvel somente em contextos
que no dependam de integrao significativa com recursos
dos dispositivos nos quais ser utilizada, isto , em situaes
de uso puramente web.
A Listagem 1 mostra uma pgina web desenvolvida em
HTML5, jQuery Mobile e CSS. Esta pgina parte de uma
web app implantada em um container web (Apache), dis-
ponvel aos usurios atravs da Internet. Acessamos esta
pgina a partir de trs navegadores, em trs plataformas
mveis distintas. Na Figura 1 o acesso feito a partir de um
emulador Android Eclair (verso 2.1 do sistema operacional).
Na Figura 2, trata-se de um navegador de um iPad 2 (verso
5.1. do iOS), dispositivo real. J na Figura 3, estamos utilizan-
do um navegador de um simulador do modelo BlackBerry
Curve 8520 (BlackBerry OS 5). Enquanto os dois primeiros
baseiam-se no motor de renderizao WebKit, o modelo da Figura 1. Exibio da pgina em um emulador Android (Eclair)

Edio 105 Java Magazine 55


Paradigmas da Mobilidade

Figura 2. Exibio da pgina em um iPad 2 Figura 3. Exibio da pgina em um simulador BlackBerry (Curve 8520)

RIM utiliza-se de um motor denominado Mango (presente nas de qualquer desenvolvedor principalmente desenvolvedores
verses de 4.5 a 5 do BlackBerry OS). Esta diferena pode no ser web e qualquer empresa focada neste mercado. A seo Links
sensvel ao usurio final para aplicativos simples, mas podem traz dois bons pontos de partida para entender do que se trata
variar significativamente quando os aplicativos ganham uma esta prtica.
complexidade e uma estrutura maiores.
Web apps so compostas por requisitos normalmente mais evi- Native apps
dentes. Como elas tm caractersticas essencialmente web, uma Aplicativos nativos, como o nome j sugere, so solues
abordagem que se distancia das outras duas pelo fato de no de- projetadas e desenvolvidas especificamente para uma dada
pender de um aplicativo compilado e instalvel nos dispositivos, plataforma operacional. Por este motivo, possvel acessar
e o acesso a este tipo de soluo basicamente via Internet, em qualquer recurso oferecido pelo dispositivo, ampliando o
modo totalmente online. Projetos seguindo esta opo envolvem universo de possibilidades de integrao com as inmeras
requisitos tcnicos que, em linhas gerais, no interseccionam com funcionalidades que ele disponibiliza ao usurio, como cme-
aqueles exigidos em projetos nativos. ra, bluetooth, NFC, persistncia, geolocalizao, acelermetro,
Algumas das principais caractersticas que tornam conveniente giroscpio, barmetro, dentre tantos outros.
o desenho de um projeto nos moldes de uma web app so: Este cenrio, como o leitor provavelmente j deve ter imagi-
A natureza do processamento essencialmente online; nado, aquele em que se pode experimentar o melhor desem-
Admite-se simplificao e homogeneidade de UX/UI; penho, a melhor experincia de usurio e a melhor qualidade
H baixa interao com recursos nativos do dispositivo; final, tanto do ponto de vista artstico quanto operacional.
H um modelo simples de cacheamento e persistncia de dados. O desenvolvimento de aplicativos nativos exige, portanto,
equipes experimentadas nas diversas plataformas, dentre
Quando se fala em mobile web apps, o desenho da soluo j , as quais destacamos, abaixo, as mais populares nos dias de
naturalmente, orientado a dispositivos mveis. Entretanto, outra hoje:
prtica que tem ganhado evidncia no mercado e em painis e A ndroid: Java SE customizado para contextos mveis, com
debates tcnicos, aquela denominada Web Responsive Design, uma arquitetura bastante particular e extremamente leve e
que aborda fundamentalmente os princpios e os procedimentos elegante;
recomendados de/para adaptao de aplicaes web existentes BlackBerry: Java ME customizado com componentes espe-
a ambientes operacionais mveis. Uma vez que a febre de mo- cificamente desenhados para a plataforma da RIM;
bilidade vem invadindo a passos largos o universo de solues iOS: Objective-C, linguagem com sintaxe especfica e que se
informatizadas, este tambm um tpico que deve estar na cabea assemelha, em muitos pontos, ao C, trazendo, entretanto, uma

56 Java Magazine Edio 105


roupagem toda particular e uma alta fidelidade ao paradigma com baixssimo impacto e baixssima necessidade de adaptao,
orientado a objetos. para todos os alvos definidos no projeto. Preconiza-se, portanto,
um ndice alto de reaproveitamento de cdigo-fonte e uma alta
Como veremos adiante, perfeitamente possvel trabalhar agilidade na entrega quando esta a estratgia adotada para o
de forma produtiva em cenrios que envolvam mais de uma desenvolvimento de aplicativos mveis.
plataforma operacional, que, fatalmente, so e continuaro a ser H, entretanto, pontos que sero discutidos mais adiante e
encarados diariamente por empresas e desenvolvedores autno- que, de certa maneira, tornam discutveis boa parte dos argu-
mos. Afinal, quem deseja ter uma soluo e disponibiliz-la ao mentos anunciados acima.
seu pblico final, raramente estar com apenas uma plataforma J falamos um pouco sobre os modelos disponveis para esta
em mente. BlackBerry, atualmente, tem sido descartado no abordagem, mas torna-se necessrio, neste momento, falarmos
cenrio nacional, embora, em alguns casos, a cultura organi- tambm sobre os frameworks e as ferramentas disponveis para
zacional ainda force a considerarmos esta opo. No entanto, o desenvolvimento segundo este paradigma, bem como de seus
ao menos Android e iOS estaro quase sempre juntas no jogo, respectivos modelos de funcionamento. No entraremos com
salvo em nichos muito especficos de negcio (como aqueles em profundidade no mrito de cada tecnologia por uma questo
que seja necessrio um aplicativo para uso em campo, em que de escopo e espao, mas traremos a seguir uma breve descri-
requisitos no-funcionais como autonomia de bateria restrinja o sobre quais so essas opes, bem como as propostas que
o universo de fabricantes e modelos). apresentam para o desenvolvimento hbrido.
Em situaes em que mais de uma plataforma tenha de ser
considerada e a abordagem nativa seja aquela escolhida para PhoneGap
o desenvolvimento da soluo, tcnicas e aspectos como com- Desenvolvido pela empresa Nitobi, recm-adquirida pela
ponentizao e meta-modelagem de dados auxiliaro bastante Adobe, apresenta uma abordagem atravs da qual se en-
ao longo de todo o trabalho. Mais adiante, falaremos mais capsula e expe contedo desenvolvido em tecnologias web
sobre esses e outros recursos em nossos pontos de reflexo. (essencialmente HTML5, JavaScript e CSS) atravs de web
Por enquanto, passaremos a explorar um pouco o universo views. Qualquer comunicao com recursos nativos da plata-
das solues hbridas. forma viabilizada atravs de plug-ins que devem ser criados
utilizando-se linguagem nativa da plataforma-alvo. O nmero
Hybrid apps de funcionalidades nativas acessveis via solues PhoneGap
Aplicaes hbridas so aquelas que se encontram no meio ainda limitado, embora uma boa parte desses recursos esteja,
do caminho entre web e nativo. Ainda bastante recente, mas hoje, acessvel. Atravs da seo Links possvel obter mais
apresentando significativa popularizao, apresenta-se no informaes sobre o PhoneGap, como tutoriais, ferramentas,
mercado atravs de frameworks e plataformas que adotam um metodologia e ideologia por trs da plataforma.
dentre dois modelos, a saber:
Encapsulamento de contedo web em web views e comunica- Titanium
o com funcionalidades nativas dos dispositivos via plug-ins Desenvolvido pela empresa Appcelerator, uma plataforma
e/ou via mensagens construdas de acordo com um protocolo que converte o cdigo-fonte escrito em linguagem de scripting
especfico; para cdigo nativo, utilizando-se de ferramentas disponibili-
Construo do aplicativo via componentes desenvolvidos em zadas pelo SDK da plataforma. O desenvolvimento de todo o
linguagens de scripting sendo JavaScript o seu maior expoente cdigo-fonte viabilizado a partir de uma rica biblioteca de
(da, inclusive, um dos motivos desta linguagem ter recuperado componentes escritos em JavaScript tambm fornecida a partir
muitas posies no ndice TIOBE) com posterior converso, do SDK, que pode ser obtido no site da empresa (veja a seo
em tempo de compilao e empacotamento, de todo o contedo Links).
em instrues/chamadas nativas da plataforma-alvo. necessrio profundo conhecimento na API e na arquitetura
proposta pela plataforma, bem como um slido conhecimento
- Web views: So widgets desenhados especificamente para exibir contedo em JavaScript, para desenvolver boas e manutenveis solues,
web. So, como se diz na linguagem mais tcnica, wrappers que encapsulam que ainda assim so questionveis sob vrios aspectos, como
o comportamento de um navegador web. Ou seja, trata-se de um componente abordaremos mais adiante.
disponibilizado nas diversas bibliotecas e que utilizado para, dentro do
contexto de um aplicativo nativo, apresentar contedo web e permitir que o Sencha Touch
usurio interaja com a web de dentro da prpria aplicao, no dependendo Atualmente na verso 2, trata-se de um framework com uma
de acessar este mesmo contedo de um browser, externo mesma. srie de componentes desenvolvidos em JavaScript e que podem
ser usados no desenvolvimento de solues mveis. Posterior-
Com o cdigo uma vez desenvolvido, o discurso defendido mente, no momento da compilao e do empacotamento, o c-
por esta abordagem o de que ser sempre possvel utiliz-lo, digo convertido em chamadas nativas tambm utilizando-se

Edio 105 Java Magazine 57


Paradigmas da Mobilidade

de protocolo especfico, e a soluo pode ento ser liberada Pontos de reflexo


para uso nas plataformas-alvo; Os principais pontos que avaliaremos neste artigo so: ex-
perincia de usurio, investimento, equipe, desempenho e o
jQuery Mobile suporte a mltiplas plataformas.
jQuery Mobile no uma plataforma, mas uma biblioteca
que se utiliza do poder e da flexibilidade do HTML5 para, Experincia de usurio
atravs de um framework inteiramente desenvolvido em cima O primeiro objetivo que deve ser buscado por desenvolvedores
da biblioteca jQuery, transformar e manipular os componentes e empresas provedoras de solues mveis deve ser evitar que
de interface com o usurio de modo a se acomodarem a um seus produtos ganhem o rtulo de aplicativos. Em um primeiro
contexto mvel de uso. destinada, pois, especificamente ao momento, isto pode soar estranho, mas o conceito simples:
desenho da interface com o usurio tanto para solues ple- todas as plataformas mveis mais populares do mundo Android,
namente web quanto para solues hbridas, cujo contedo iOS, BlackBerry e o recente e ainda inexplorado Windows 8
tambm construdo em torno de tecnologias web. trazem experincias de uso absolutamente singulares, bem
Biblioteca simples mas poderosa, tem muito potencial e distintas entre si.
apresenta uma curva de aprendizado bastante baixa, sendo Alm disso, usurios de smartphones e tablets esto, a cada
uma excelente opo para o desenvolvimento de camadas de dia inclusive pela facilidade de acesso informao mais
apresentao em solues de natureza mobile web. exigentes e mais crticos em relao ao produto que esto
Alm destas, existem outras plataformas que atuam no comprando. Um usurio de iPhone, Motorola Droid Razr ou
apenas em uma, mas em algumas das trs abordagens ainda Nokia Lumia 800 (Windows Phone 7.5), sabe exatamente
temticas deste artigo. Essas plataformas so, na verdade, o que espera e tem expectativas geralmente concretas acerca da
aceleradores que visam aplicar agilidade na disponibiliza- experincia de uso e dos recursos que encontrar no aparelho
o de estruturas corporativas de back-end para acesso via que adquiriu. Portanto, absolutamente natural que essas
aplicativos mveis. Um bom exemplo, e que a aposta da pessoas busquem, instintivamente, uma experincia nica e
SAP para se fortalecer no mercado de mobilidade ao longo harmoniosa quando estiverem de posse de seus dispositivos
dos prximos anos, o SUP (acrnimo para Sybase Unwi- mveis, independente do tipo de operao que realizar.
red Platform), que atua como um middleware e agiliza a Neste sentido, todo projeto mvel deve ter como principal
gerao de toda a camada de comunicao entre o back-end objetivo despertar no consumidor a sensao de estar usando
e o front-end de solues mveis, suportando plataformas seu dispositivo, e no um aplicativo desenvolvido para ser
como iOS, Android, BlackBerry e tambm algumas j mais executado nele. A transio entre os aplicativos disponveis
antigas, mas ainda fortes no ambiente corporativo, como no dispositivo deve ser a mais suave possvel, praticamente
o caso do Windows Mobile. Verifique mais detalhes sobre transparente, e o caminho para conseguirmos chegar neste tipo
esta plataforma na seo Links. de experincia requer profundo domnio das particularidades
Chegamos ao fim da apresentao que, embora sucinta, de cada sistema operacional atendido pela soluo.
suficiente para prosseguirmos. Iniciaremos, a seguir, uma , portanto, responsabilidade dos times de experincia do
anlise comparativa dessas trs filosofias to particulares usurio (conceito popularmente denominado por UX) estudar,
de trabalho. Os pontos que sero discutidos levam em conta compreender e explorar intensamente os recursos especficos
contexto e tendncia, presente e futuro. No so concluses das plataformas, e uma boa base para isso estar sempre em
ou argumentos individuais, mas uma corrente que engloba contato com solues desenvolvidas pelas empresas mais re-
impresses de desenvolvedores experimentados e ativos nomadas do mundo em desenvolvimento de jogos e aplicativos
em grandes comunidades nacionais de desenvolvimento e em geral, de onde sempre possvel tirar inspirao e densas
um pensamento singular que, de forma preventiva, enxerga anlises SWOT dos diversos projetos por elas desenvolvidos.
nmeros e valores como algo mutvel, sujeito s intempries Uma boa referncia para a lista das maiores e melhores em-
deste mercado to sensvel. presas, bem como para um catlogo de melhores desenhos de
A prxima seo, portanto, comparar caractersticas aplicativos mveis, pode ser encontrada na seo Links. No
definidas na especificao das abordagens e plataformas a deixe de conferir!
estas associadas, com aquelas observadas na realidade de
projetos. O objetivo , atravs de dados concretos coletados - Anlise SWOT: um modelo de avaliao que consiste na identificao, no
em situaes verdicas de projeto, exercitarmos nossas men- objeto de estudo, de todas as Foras (Strenghts), Fraquezas (Weaknesses),
tes no sentido de, no final deste processo, sermos capazes de Oportunidades (Opportunities) e Ameaas (Threats) existentes. , normalmente,
determinar o melhor desenho para a soluo dos problemas utilizada em atividades de gesto e planejamento estratgico de empresas, mas
de nossos clientes, estejamos ns representando empresas ou o conceito pode ser aplicado em qualquer contexto. O estudo da intensidade em
a ns mesmos, desenvolvendo tanto para o mercado aberto que essas caractersticas se manifestam em aplicativos mveis, normalmente
quanto para o corporativo. recuperada via uma coleta bem planejada de mtricas de uso a partir de

58 Java Magazine Edio 105


ferramentas e bibliotecas como Google Analytics ou Flurry (veja a seo Links), Promovem uma uniformidade desaconselhvel da camada de
imprescindvel para a evoluo tanto dos processos quanto da qualidade interface com o usurio, descartando/ignorando poderosos e
das solues produzidas. desejveis recursos da(s) plataforma(s)-alvo.

A abordagem que proporciona mais ferramentas e melhores - Mobile thinking: um conceito cuja relevncia vem crescendo nos canais
recursos para prover ao usurio a melhor experincia de uso que tratam de tecnologias e paradigmas mveis, e que nos convida a uma
possvel , indubitavelmente, a nativa. No existe, no contexto discusso profunda a respeito de como desafios, oportunidades, modelos
atual de desenvolvimento mvel e sob o ponto de vista da ex- mentais e tecnologias podem e/ou devem ser explorados para sermos capazes
perincia do usurio, justificativa plausvel para a substituio de identificar os atributos que finalmente tornaro a experincia de usurios,
da abordagem nativa por tecnologias hbridas, e os principais atravs de smartphones, tablets ou outros dispositivos do gnero, algo nico
argumentos que reforam esta posio se baseiam no fato de que e especial. Mobile thinking e ser, portanto, a virtude que faz e continuar
solues hbridas: fazendo de empresas e desenvolvedores autnomos especialmente destacados
Incluem uma camada especfica da plataforma adotada, que no mercado de mobilidade.
afeta diretamente no desempenho final da soluo;
Reduzem a possibilidade de reuso e componentizao e redu- Os pontos listados acima fazem sentido apenas na comparao
zem a legibilidade em projetos grandes, com grande quantidade entre as abordagens nativa e hbrida, no sendo aplicveis para
e complexidade de regras de negcio; web apps. Conforme j destacado anteriormente neste artigo,
C ontrolam a gerao do cdigo nativo usado para acessar os web apps tem caractersticas mais facilmente identificveis e
recursos do(s) dispositivo(s) processo normalmente pouco afastam-se, por este motivo, da grande polmica protagonizada
otimizado, gerando cdigo final contestvel por qualquer pro- pelas duas outras abordagens.
fissional experiente na(s) plataforma(s)-alvo selecionada(s); Quando o que se espera um web site, para ser acessado em
Defendem a existncia de um suporte cross-platform ainda um contexto puramente online a partir de navegadores de
bastante questionvel; dispositivos mveis, o emprego de tecnologias como HTML5,
D emandam conhecimento slido no desenvolvimento de solu- JavaScript e CSS, em seu formato puro ou ainda atravs de
es mobile web e, principalmente, conforto em relao ao mobile frameworks como jQuery Mobile, totalmente aconselhvel.
thinking. Dominar HTML5, CSS e JavaScript imprescindvel, A deciso por web apps pode ser tomada baseada em algumas
mas no tudo (conhea o conceito de mobile thinking atravs caractersticas mais facilmente reconhecveis, dentre as quais
da seo Links); merecem destaque:

Edio 105 Java Magazine 59


Paradigmas da Mobilidade

Operaes essencialmente online; Esta categoria de indivduos, por sua vez, alm de muito bem
Transaes com modelos bsicos de persistncia local; informada e cada vez mais exigente, tem total liberdade para
Baixa demanda por integrao com recursos dos dispositivos. comentar, publicar e avaliar tudo e todos, via canais como
Google Play, Apple Store, BlackBerry App World, dentre outros.
Voltando polmica iniciada alguns pargrafos atrs, algo Todos absolutamente acessveis a toda a comunidade que deles
bastante comum nos dias de hoje, quando na adoo de pla- toma usufruto.
taformas hbridas como o PhoneGap (mas no apenas), o Esses feedbacks podem configurar a salvao ou o fracasso
uso excessivo de plug-ins para integrao com os recursos do fruto de projetos longos e penosos, cabendo aos desenvol-
nativos dos dispositivos como Bluetooth, Cmera, Bancos vedores e s empresas, uma vez tendo-o publicado, o papel de
de dados, dentre tantos outros. Alm disso, obstculos como meros expectadores.
a inevitvel fragmentao da plataforma Android ou ainda a O nvel de satisfao das empresas com os servios prestados
necessidade de suportar um ainda considervel mercado de no desenvolvimento de seus aplicativos tende a ser, por esse
dispositivos BlackBerry executando verses mais antigas de motivo acima exposto, varivel, podendo oscilar de acordo com
seu sistema operacional (BlackBerry OS 5, para sermos mais as estatsticas coletadas nesses canais.
especficos) demandam considervel esforo principalmente De forma prtica, o que um dia um belo aplicativo e uma
no tocante construo da UI, e as vantagens de reaproveita- parceria de sucesso entre a contratante e seus contratados,
mento e compatibilidade preconizadas por plataformas que corre o risco de, abruptamente, servir-se de outra roupagem,
seguem a linha hbrida perdem seu crdito e sua validade. mediante feedback negativo colhido a partir de usurios que,
Em muitos casos, fazendo-se uma anlise fria e objetiva do insatisfeitos com a experincia que tiveram com o mesmo, re-
projeto, no raro concluir que a natureza portvel de pro- cheiam as app stores de marketing extremamente nocivo para
jetos hbridos no so suficientemente convincentes, pois o a marca e para a empresa responsvel.
esforo para adaptao para vrias plataformas bem maior Sendo assim, extremamente importante que empresas e
do que se desejaria. desenvolvedores autnomos contextualizem plenamente a
problemtica, expondo todas as variveis existentes e conscien-
Investimento tizando seus clientes acerca de riscos, vantagens e desvantagens
Naturalmente, um projeto de software cujo desenho atenda de cada abordagem frente o domnio do problema apresentado.
individualmente a cada plataforma-alvo exigir investimentos Deste trabalho consultivo depender, invariavelmente, a sa-
um pouco maiores. No entanto, a evangelizao do pblico- de continuada das relaes profissionais entre contratantes e
alvo em pr-vendas, fruns, congressos e outros eventos de contratados.
maior ou menor dimenso de suma importncia, pois nem Temos tambm a questo da evoluo dos projetos ao longo
sempre o menor custo acabar se traduzindo em um bom resul- do tempo. Sempre que possvel, o desenho da arquitetura de
tado a mdio e longo prazo. Em mobilidade, particularmente, uma soluo passa pela previso, mesmo que superficial, da
este um dos principais mitos que tm sido construdos em evoluo do produto ou servio a partir de seu lanamento. O
cima de alegaes ainda precipitadas e muito pouco medidas, trabalho conjunto entre todas as partes envolvidas contribuir
no que tange a alguns paradigmas e algumas tecnologias. para um pensamento mais estruturado sobre o comportamento
Pelo lado do empresrio que deseja mobilizar algumas dos aplicativos ao longo prazo, e principalmente a respeito
de suas operaes ou fornecer a seus clientes solues que das perspectivas da prpria empresa que contratou o desen-
facilitem, de algum modo, o acesso aos servios a eles pres- volvimento dos mesmos. sempre melhor trabalhar com uma
tados, igualmente importante atentar para o fato de que o orientao preventiva, e a nossa obrigao enquanto desenvol-
investimento em uma soluo desenhada de acordo com cada vedores , ao menos, apresentar este modelo a nossos clientes
filosofia das plataformas selecionadas render, no de forma ou queles ainda em fase de prospeco.
imediata, mas a mdio e longo prazos, uma melhor resposta Mobilidade um conceito ainda pouco explorado em todas
a mudanas corretivas, adaptativas e/ou evolutivas. as empresas nacionais e parte das empresas internacionais,
Alm disso, o tratamento individualizado a cada platafor- principalmente aquelas que atuam em modelos mais rgidos
ma-alvo resultar em feedbacks bastante positivos de seus e tradicionais. H inmeros paradigmas a serem quebrados,
respectivos usurios, pela prpria experincia diferenciada e muitos modelos mentais imprprios para os dias de hoje
que cada produto promove. O resultado um estmulo natural a serem vencidos. Portanto, para aqueles que se propem a
ao uso, contribuindo diretamente para o reforo da marca atuar na vanguarda tecnolgica, apresentado o imenso, mas
por trs do aplicativo. apaixonante desafio da evangelizao e orientao tcnica e
No raramente, escopos e mesmo a arquitetura de proje- tambm filosfica frente a todo esse processo de transformao
tos tm sido definidos a partir de objetivos intermedirios, que vemos acontecer em ritmo to acelerado.
ignorando-se o verdadeiro foco de qualquer soluo mvel: O prprio conceito de custo , ainda, extremamente confuso
seu real pblico consumidor. e imprprio, tpico de momentos como esse de grande impacto

60 Java Magazine Edio 105


que estamos enfrentando. O importante a ser lembrado que observados em projetos reais, com equipes reais, e que envolve
os consagrados princpios da componentizao, legibilidade, mais especificamente as bibliotecas nativas das plataformas
manutenibilidade, documentao, organizao, reutilizao BlackBerry, Android e iOS. O objetivo principal quebrar de-
e produtividade devem ser preservados sempre, de modo a terminados preconceitos apresentados em discursos hbridos,
proporcionar a dinmica necessria para que custos e desper- trazendo o leitor para uma viso mais realista do panorama.
dcios sejam reduzidos/eliminados, resultando em benefcios No tocante a projetos Android e BlackBerry, e considerando-se
para todas as partes da cadeia. uma equipe com conforto mediano na linguagem Java, alguns
Cabe aos profissionais e s empresas atuantes no mercado pontos merecem destaque:
concluir em qual das abordagens possvel atingir, de forma Utilizando padres como DDD (Domain-Driven Development) ou
tima, este estado, dado o quadro de profissionais disponvel, MVC (Model-View-Controller) e empregando de forma integral e
a metodologia e o os objetivos traados. Aos clientes finais, o slida o paradigma da orientao a objetos no desenvolvimento
mais importante que sejam apresentadas solues aderentes dos artefatos de cdigo, possvel obter-se um ndice de rea-
ao domnio do problema apresentado, a custos acessveis e proveitamento da camada de domnio de uma verso Android
com a mxima qualidade. para outra BlackBerry e vice-versa - de praticamente 100%.
Naturalmente, adaptaes podem se fazer necessrias medida
Equipe que se utilize recursos disponibilizados a partir do Java 5 (Tiger)
Outro ponto muito importante a equipe atuante no que s esto disponveis na biblioteca Android, e no no Java
desenvolvimento da soluo. Quando falamos em equipe, ME, da RIM. Entretanto, o esforo estar quase sempre associado
precisamos considerar o mapa de competncias dos profis- remoo/adio do suporte a parametrizao em classes que
sionais que a compem. Quanto mais experimentados nas se utilizem da Collections API;
tecnologias envolvidas no projeto, melhores sero os ndices A camada de controle ou de aplicao tambm pode ser parcial-
de produtividade e qualidade. mente reaproveitada entre as plataformas Android e BlackBerry,
O estudo que ser apresentado a seguir est ligado a resultados visto que toda a lgica associada aos fluxos de dados utiliza-se de

Edio 105 Java Magazine 61


Paradigmas da Mobilidade

um conjunto bsico e comum de APIs do Java, modificando-se como String/NSString precisa ser considerado. Em experi-
geralmente a sintaxe, mas preservando-se a semntica. Algo- ncias que realizamos em um projeto real, o procedimento
ritmos de validao, verificao e processamento de dados so de traduo manual de uma camada de domnio escrita
facilmente portveis de uma soluo para outra, e os nmeros originalmente em Objective-C para Java Android, com um
coletados neste contexto giram em torno da casa dos 60% de total de 35 classes, demorou nada mais que vinte minutos
reaproveitamento entre as duas plataformas; (com uma traduo 100% manual). Entretanto, existem j
N o tocante interface com o usurio, embora no sejam h muito tempo poderosas ferramentas de modelagem de
reaproveitveis de uma verso para outra, mecanismos como dados como Rational Rose, Borland Together e astah (veja
o tratamento de excees, manipulao de eventos e constru- a seo Links), que podemos utilizar sempre que o projeto
o programtica de telas, bem como a prpria arquitetura considerar, em seu desenho, mltiplas plataformas desde o
dos widgets e containers grficos que seguem um padro princpio. Boa parte dessas ferramentas permite, inclusive,
conhecido da literatura como quasi-MVC seguem basica- a gerao automtica do cdigofonte.
mente a mesma filosofia de alguns frameworks j antigos O processo de converso de cdigo entre linguagens fica
no Java SE, como o Swing/AWT, utilizando-se de interfaces sempre mais simples quando seu radical o paradigma
e padres de projeto muito similares entre si. Dados coleta- orientado a objetos, no caso de todas essas tecnologias que
dos ao longo de um estudo realizado nos ltimos meses em esto sendo mencionadas ao longo do artigo dominado.
projetos reais resultaram em um ndice de reaproveitamento Todas as plataformas mveis modernas, bem como boa parte
de cdigo-fonte prximo dos 40%; das mais antigas como Windows Mobile, baseiam suas lin-
Outro aspecto que merece destaque o consumo de servios guagens de programao nos princpios e nas tcnicas deste
tanto no modelo RESTful quanto via protocolo SOAP. A plata- paradigma de desenvolvimento. imprescindvel que toda
forma Android suporta nativamente o consumo de mensagens equipe de desenvolvimento de software, nos dias de hoje,
JSON e esta biblioteca facilmente portvel para BlackBerry da tenha slida base neste paradigma. Sempre que isto for ver-
verso 5 em diante. O mesmo cdigo de consumo de mensagens dade, tanto o desenvolvimento quanto a traduo de cdigo,
JSON pode ser, portanto, utilizado em ambas as solues, com independente da natureza da plataforma, ser facilitada.
praticamente 100% de reaproveitamento. Quanto ao consumo O consumo de servios web, o acesso a elementos perten-
de mensagens SOAP, existem bibliotecas para as duas plata- centes ao domnio da aplicao, o acesso a bancos de dados
formas, dentre as quais pode-se evidenciar a kSOAP (veja a remotos ou locais, tudo isso fica bem mais simples de enten-
seo Links). Novamente, praticamente 100% do cdigo pode der, manipular e alterar quando os princpios da orientao
ser aproveitado de um projeto para outro. a objetos esto bem sedimentados entre os membros dos
times responsveis pela construo do software.
- Quasi-MVC: O modelo quasi-MVC se baseia na mesclagem das camadas Quando se h uma etapa de documentao anterior ao
de controle (C) e apresentao (V) em um nico componente, mantendo desenvolvimento do projeto, todo o desenho de uma soluo
individualizado apenas o componente de modelo, este responsvel pela ainda mais natural, e o desenvolvimento pode ocorrer
manipulao dos dados. Em algumas bibliotecas como Swing/AWT naturalmente em paralelo.
possvel vermos isso nitidamente em elementos como javax.swing.JTable,
que mescla controle e apresentao e depende de elementos que seguem o Desempenho
protocolo javax.swing.TableModel para recuperar e atualizar os dados que A renderizao de contedo em plataformas como Pho-
devem ser exibidos e/ou salvos. neGap (vide Links) tornam a experincia do usurio ine-
vitavelmente prejudicada. Aqueles mais experimentados
Quando mudamos para a plataforma iOS, no desenvolvi- nas plataformas (os conhecidos hard users) conseguem,
mento da verso iPhone/iPad do aplicativo, temos tambm a com relativa facilidade, notar esta diferena e, assim, colo-
possibilidade de reaproveitar, seno o cdigo propriamente cam em xeque uma soluo desenvolvida com tecnologias
dito, boa parte da lgica. Embora a terminologia mude, os hbridas. Algumas de suas fraquezas um exemplo tpico
conceitos permanecem e, desde que se tenha uma equipe a velocidade de rolagem de listas e componentes em ge-
experimentada nesta plataforma, o ritmo de leitura, in- ral podem ser observadas em contextos de uso bastante
terpretao e traduo de cdigo Java para Objective-C (e rotineiros, o que pode ser um complicador na avaliao final
vice-versa) muito rpido. do produto. Nesses casos, nem o mais experiente time de
A camada de domnio de dados, por exemplo, pode ser desenvolvedores pode atuar, pois algumas limitaes so
lida e interpretada com extrema rapidez, desde que bem legadas, caractersticas da prpria plataforma ou do prprio
desenvolvida. O processo de traduo de cdigo escrito em framework escolhido.
Objective-C para Java ou no sentido contrrio muito peque- Titanium talvez seja a plataforma mais estvel para competir
no, e a converso de tipos muito direta. Os tipos primitivos com a abordagem nativa. Baseada inteiramente em JavaScript,
basicamente se preservam, e apenas o nome de estruturas tendo todo o cdigo desenvolvido posteriormente traduzido

62 Java Magazine Edio 105


para cdigo na(s) plataforma(s)-alvo, exige profundo conhecimen- bem alinhado para que nenhuma parte envolvida em um pro-
to em JavaScript para que o trabalho saia realmente bem feito. jeto mvel se surpreenda negativamente ao longo do tempo.
Normalmente, isso implica em projetos de legibilidade e, con-
sequentemente, manutenibilidade prejudicadas, alm de apre- Cross-platform
sentar uma diferena notvel em termos de desempenho. Cross-platform tambm algo ainda um pouco distante, e
Estudos profundos e constante coleta de estatsticas fizeram, dificilmente chegaremos a um modelo que no traga prejuzos
inclusive, um dos maiores casos mundiais de adoo deste j discutida experincia final do usurio. Todo framework
framework, o Wunderlist, migrar seu produto para verses ou tecnologia que preconiza o desenvolvimento de contedo
nativas em todas as plataformas suportadas. Veja a seo Links web (a partir de linguagens como HTML, CSS e JavaScript) e
para mais detalhes a respeito desta histria. posterior reaproveitamento deste material em todas as pla-
taformas mveis mais populares do mercado, sem maiores
Interface homognea com o usurio modificaes e/ou adaptaes, acaba barrada no fato de que
Este talvez o tpico de maior destaque no debate protago- a relativa homogeneidade entre os motores de renderizao
nizado por hbridos e nativos. Para aplicaes web, consenso destas plataformas no integral.
que pouco se tem a fazer neste sentido, mas a polmica toma BlackBerry, neste sentido, tem sido o maior vilo, mas h
a cena sempre que o aplicativo tiver residncia certa: o dis- tambm muitos desafios em Android que, geralmente, geram
positivo mvel. um esforo adicional de desenvolvimento que invalida o argu-
Embora este tema seja normalmente discutido por profissio- mento da alta produtividade to promovido na divulgao das
nais de formao essencialmente tcnica, podemos parafrasear tecnologias hbridas. Normalmente, estas tecnologias mostram
aqui um pensamento extrado de um papo com um gerente desempenho aceitvel em dispositivos Apple, o que deixa de
de projetos que, de forma muito interessante, sintetizou um ser verdade para as demais plataformas mais populares do
pensamento compartilhado por uma significativa parcela de mercado.
usurios de plataformas mveis: O que quero no um aplica- O discurso que torna justificvel o desenvolvimento de
tivo mvel que cumpra um determinado objetivo. O que quero solues hbridas exatamente a otimizao do trabalho via
, sem nenhum impacto visual ou funcional, chegar a um novo reaproveitamento de contedo, bem como o resultado visual e
objetivo usando meu dispositivo mvel.. Estamos falando de, o desempenho uniforme entre as diversas plataformas supor-
no mnimo, uma viso interessante e que merece ateno, por tadas. Entretanto, muito comum em projetos reais a neces-
ter se tornado a opinio de mais e mais pessoas, que hoje tm sidade de um nmero significativo de ajustes para acomodar
uma percepo e uma exigncia muito maiores com relao aos caractersticas como a fragmentao do Android ou ainda as
produtos tecnolgicos que esto adquirindo. configuraes distintas de aparelhos BlackBerry, descaracteri-
Plataformas hbridas seguem um padro tipicamente iPhone- zando um dos pontos mais fortes deste tipo de abordagem.
like. Experincia de usurio, por sua vez, passa obrigatoria-
mente pelo respeito opo primria do usurio: seu smartpho- Concluses
ne, seu tablet. Usurios ao redor do mundo tm se tornado cada Mobilidade o tema mais quente do mercado. No h dvidas
vez mais exigentes, e a sua escolha por este ou aquele produto disso. Boa parte das empresas tem se interessado em transportar suas
tecnolgico, cada vez mais, est associada a um conjunto so- solues informatizadas para pelo menos uma, e em boa parte dos
fisticado de justificativas que passa, invariavelmente, pela casos duas ou trs, dessas plataformas com dispositivos com tama-
experincia que o produto em questo proporciona a ele. nha capacidade de armazenamento e processamento de dados.
Trata-se de uma intimidade que no deve, em hiptese alguma, Embora esta expanso seja ntida, tambm fato que tudo ainda
sofrer interferncias de natureza negativa. A injeo de um novo muito recente, principalmente em pases emergentes como o
contexto de uso, atravs de novos aplicativos, deve ser realizada Brasil.
na forma mais transparente e menos impactante possvel. Como Cabe, portanto, s empresas e aos desenvolvedores constru-
j mencionado em um momento anterior neste artigo, no se trata rem junto de seus clientes o melhor projeto para cada situao,
de um aplicativo desenhado para executar em um dispositivo levando-se em conta todos os aspectos analisados ao longo
mvel, mas um dispositivo mvel sendo usado em um novo deste artigo, alm de tantos outros que podero surgir.
contexto, este sim promovido pelo seu aplicativo. Com fcil acesso a informaes de toda natureza, as empre-
Qualquer experincia em sentido oposto a este pode trazer sas naturalmente tm hoje a possibilidade de formarem uma
um resultado bastante ruim, e o risco disso se tornar viral concepo mais densa acerca daquilo que pretendem adquirir.
bem grande visto o baixssimo controle que temos sobre nossos Discusses de projeto e mesmo de tecnologia so, no raramente,
produtos desde que estes se tornam disponveis nas lojas de momentos para alguns debates que, tempos atrs, no ocorriam
aplicativos. Neste sentido, uma opo aparentemente correta com tanta frequncia.
em um curto prazo pode ser, a mdio e longo prazo, origem de Entretanto, densidade de informao nem sempre sinnimo
turbulncias e frustraes. Tudo, portanto, precisa ser muito de definio e clareza. Com tamanha variedade de sabores, que

Edio 105 Java Magazine 63


Paradigmas da Mobilidade

surgem e desaparecem em ritmo alucinado e com propostas http://www.webdesignshock.com/responsive-design-problems/


mais ou menos slidas, torna-se ainda maior a responsabilida- Uma discusso a respeito da tcnica de Responsive Web Design.
de das empresas de tecnologia de controlar um aspecto muito
importante em seus clientes: a ansiedade, o encantamento. http://www.lukew.com/ff/entry.asp?1509
No h, atualmente, massa crtica capaz de justificar o uso Artigo a respeito do conceito de Responsive Web Design.
de algumas tecnologias que, aparentemente, trazem a frmula
perfeita para equilibrar as relaes de custo e benefcio das http://www-01.ibm.com/software/awdtools/developer/rose/
corporaes. Na mesma linha, metodologias e tecnologias Ferramenta Rational Rose.
consagradas so normalmente colocadas em xeque em ritmo
perigosamente acelerado em benefcio de algumas correntes http://www.componentsource.com/products/astah-professional/index-brl.
e/ou tendncias. html?utm_source=google&utm_medium=cpc&utm_campaign=ggarg
Talvez estejamos em um momento de apostas vlidas, talvez Ferramenta Borland Together.
no. Talvez sejam correntes vlidas, talvez no. Talvez seja um
perodo de quebra de paradigma, em que riscos precisem ser http://astah.net/
assumidos e um nus precise ser absorvido em prol de um salto
Ferramenta de modelagem astah.
progressivo, talvez no. Neste contexto, o objetivo primeiro
http://www.tryexcept.com/articles/2011/09/12/wunderlist-for-android-is-
deste artigo foi apresentar e esmiuar os principais tpicos
going-native-drops-appcelerator-titanium-mobile.html
deste enredo luz de dados reais, projetos reais, de profissio-
O caso da migrao do Wunderlist (Titanium para nativo).
nais experimentados em busca de respostas ou ao menos pistas
sobre a melhor estratgia de desenvolvimento. http://phonegap.com/
De qualquer forma, a melhor deciso depender sempre Pgina do PhoneGap.
dos requisitos de cada projeto (funcionais e no-funcionais),
caso a caso. Uma desafiadora e apaixonante tarefa para https://bdsc.webapps.blackberry.com/devzone/
todos ns! Pgina do Portal de Desenvolvimento na plataforma BlackBerry.

Pedro E. Cunha Brigatto http://developer.android.com


pedrobrigatto@gmail.com Pgina do Portal de Desenvolvimento na plataforma Android.
Engenheiro da Computao graduado pela Universidade Federal
de So Carlos, desenvolvedor certificado SAP Netweaver (Java http://www.appcelerator.com/
Stack) e programador certificado SCJP. Especialista em Engenharia de Pagina do Appcelerator (Titanium).
Software graduado pela Unimep e ps-graduado em Administrao
pela Fundao BI-FGV, atua com desenvolvimento de software desde 2005. Atualmente http://www.sencha.com/products/touch
desempenha o papel de arquiteto de software na Ci&T apoiando projetos plataformas Pgina do Sencha Touch 2.
como SUP, Afaria, Android e BlackBerry, sendo tambm proprietrio da empresa ainosoft
e professor universitrio nas Faculdades Integradas Einstein, na cidade de Limeira. http://www.sybase.com.br/products/mobileenterprise/sybaseunwiredplatform
Sybase Unwired Platform.
D seu feedback sobre esta edio! Feedback
eu http://www.webdevelopersnotes.com/articles/mobile-web-browsers-list.php
s

A Java Magazine tem que ser feita ao


D

seu gosto. Para isso, precisamos saber Lista dos principais navegadores web para dispositivos mveis.
sobre e

o que voc, leitor, acha da revista!


s

ta
edio
http://www.fastcompany.com/most-innovative-companies/2012/full-list
D seu voto sobre este artigo, atravs do link: 50 empresas mais inovadoras do mundo.
www.devmedia.com.br/javamagazine/feedback

64 Java Magazine Edio 105


Edio 105 Java Magazine 65
Seo Engenharia de Software artigos relacionados a anlise, modelagem, projeto, testes, entre outros temas relacionados a ES

Testes no Scrum
Processo de Teste de Software adaptado ao Scrum

A Resumo DevMan
s atividades de testes de software assumem
papis essenciais dentro do processo de de-
senvolvimento de software que adota mtodos De que se trata o artigo:
geis, pois apoiam a comunicao entre desenvolvedores Diante do crescimento das Metodologias geis, em especial o
e clientes, a entrega frequente dos incrementos de sof- framework Scrum, diversos desafios surgem para as atividades de testes
tware e proveem mudanas mais seguras com um bom nestes ambientes. Por isso, neste artigo foram levantados estes desafios
conjunto de testes para o sistema. No entanto, segundo e proposta a adaptao do processo de testes fundamental s atividades
Carter (2011), existe a necessidade de uma reestruturao do Scrum.
do processo de testes fundamental, pois alguns pontos
ineficientes dessa abordagem clssica tm se tornado Em que situao o tema til:
aparentes nas atividades de testes em ambientes geis, Diversas empresas que adotam mtodos geis tm tido dificuldades na
dentre eles: aplicao e no gerenciamento das atividades de testes, principalmente
Atividades de testes so realizadas apenas aps a em projetos de mdio e grande porte. A abordagem estruturada dos
codificao; testes geis, proposta neste trabalho, ajuda os times geis a minimizarem
A traso entre a escrita do software e o feedback da equipe essas dificuldades.
de testes para a equipe de desenvolvimento;
C omunicao dificultada entre as diferentes equipes Testes no Scrum:
envolvidas no projeto; Este trabalho identifica alguns problemas relacionados adaptao do
R esistncia a mudanas de requisitos; processo de testes e o papel do analista de testes em funo da crescente
E levado esforo para manter os vrios artefatos de adoo das prticas geis pela indstria. Adicionalmente apresentado
testes atualizados. um processo de testes geis em sintonia com o framework de gerencia-
mento de projetos Scrum, adequando as atividades do processo de testes
Neste artigo, ser proposta uma adaptao do processo fundamental s necessidades e conceitos deste framework.
de testes fundamental para um processo de testes geis
apoiada nas atividades do Scrum, com o intuito de mi-
nimizar tanto os problemas identificados acima, como
os demais: readaptao dos profissionais de testes s
mudanas culturais originadas pelos princpios e valores
do paradigma gil e a adequao das atividades de testes
ao framework de gerenciamento de projetos Scrum.

Teste fundamental
O processo de testes fundamental (ISO, 2009) possui
etapas bem definidas e sequenciais, por exemplo: Ge-
renciamento e Planejamento, Projeto, Implementao,
Execuo e Anlise. Possui tambm as caractersticas
de produzir alguns artefatos formais, ter uma equipe
independente da equipe de desenvolvimento e envolver
vrios perfis de profissionais, como: Gerente, Lder,
Projetista, Analista, Automatizador e Testador.
A norma ISO/IEC 29119 prope um processo de testes
que apresentado na Figura 1. Ele dividido em duas
fases paralelas. A primeira fase a de gerenciamento,
que envolve o planejamento, monitoramento, controle e Figura 1. Processo de testes da norma ISO/IEC 29119 adaptado de ISO (2009)

66 Java Magazine Edio 105


concluso dos testes. Enquanto a segunda
o processo de testes fundamental, com
seu fluxo de atividades sequenciais, abran-
gendo: projetar e implementar os testes,
configurar o ambiente, executar os testes
e controlar os incidentes.
No processo de testes, o planejamento
uma das fases mais crticas, pois, alm de
todo o trabalho de definio de recursos
(tempo, pessoas, ambiente, ferramentas e
cronograma) inerente a essa fase, o pro-
cesso de testes tem suas atividades inicia-
das no fim do ciclo de desenvolvimento,
ficando difcil de alterar os recursos
estimados.

Scrum
O Scrum (Figura 2) um framework de
gerenciamento gil de projetos, fundamen-
tado na teoria de controle de processos Figura 2. Framework Scrum (Schwaber, 2011a)
empricos, que emprega uma abordagem
iterativa e incremental para otimizar a ambientes geis. A seguir, abordamos backlogs em tarefas que cabem em post-its
previsibilidade e controlar riscos (Schwa- algumas delas: (pequenos pedaos de papis) so algumas
ber, 2011a). Consiste em trs papis funda- Adaptao do profissional de testes: das grandes vantagens implantadas pelas
mentais (Scrum Master, Product Owner e Os profissionais de testes podero sentir metodologias geis, todavia, elas tm
o Time), a produo de alguns artefatos e dificuldades em adaptar-se ao novo, po- trazido certas dificuldades aos testes. Por
eventos com durao fixa. rm, com treinamento adequado, esses exemplo: manter a rastreabilidade entre
O primeiro evento a fase de preparao, profissionais compreendero as melhorias product backlogs e testes; elaborar testes
onde ocorre o planejamento de toda a que essas novas prticas podem trazer. Ou- atravs de informaes reduzidas, o que
verso do produto que ser desenvolvido. tro desafio que surge com essa transio pode ocasionar testes ineficientes; e en-
No segundo evento, ocorre a reunio de a mudana de mentalidade do candidato a tendimento incompleto do que realmente
planejamento da sprint, que o momento testador gil. No cabe apenas ao profissio- o cliente espera do sistema, dificultando
no qual ser definido e planejado o tra- nal de testes ser o policial da qualidade, assim criar os testes de aceitao;
balho da sprint subsequente. Por sua vez, esta uma funo de todo time gil; Resistncia ao TDD: Segundo Astels
na sprint (que possui perodo de trs a Dificuldades do processo de testes (2003), o TDD um estilo de desenvolvi-
quatro semanas) que acontece o trabalho fundamental: Algumas das caractersticas mento que traz melhorias significativas
de produo do incremento do produto. O do processo de testes fundamental trazem ao projeto, pois o cdigo baseado nos
quarto evento a reunio diria, que um certa dificuldade na aplicao dos testes em testes de unidade e de componentes, sendo
encontro (de quinze minutos) com todos os ambientes geis. Por exemplo: gesto centra- o desenvolvedor o responsvel pela cria-
integrantes do time. O que foi produzido lizada, orientado a artefatos, difcil comuni- o e execuo destes testes. No entanto,
durante a sprint apresentado ao cliente cao entre as diversas equipes envolvidas culturalmente os desenvolvedores tm
na reunio de reviso. Por fim, na reunio no projeto e a realizao das atividades de resistncia adoo da prtica TDD, pois
de retrospectiva o momento no qual o testes somente aps a codificao; eles precisam produzir cdigos extras e,
time decide o que pode ser melhorado para D ificuldade de estimar as atividades com isso, acreditam que ser perda de
as sprints futuras. de testes: Dentre as atividades de planeja- tempo. Contudo, desenvolvedores mais
mento, a estimativa a que mais dificulda- experientes entendem que a mdio e longo
Dificuldades nos Testes em Ambientes des traz, pois alm do tempo reservado na prazo ter-se- um ganho na produtividade
geis sprint para testes nem sempre ser o ideal, e na qualidade do produto;
Alguns autores como Crispin e Gregory os backlogs possuem poucos detalhes para Falta de Estratgia de Teste gil: A falta
(2009) e Shaye (2008), relatam dificuldades a criao dos testes; de um processo de testes adaptado para o
na transio dos testes fundamentais para D ocumentao reduzida: A quanti- desenvolvimento gil um dos obstculos
os testes geis, vindas da necessidade de dade reduzida de artefatos, a escrita dos encontrados pelos times geis em criar a
adequar-se s prticas intrnsecas dos requisitos em backlogs e a diviso desses estratgia para a realizao dos testes. Isto

Edio 105 Java Magazine 67


Testes no Scrum

pode provocar a criao de uma estratgia de testes deficiente, ou testes. O projetista o responsvel por projetar a arquitetura
mesmo, a no criao desse artefato. dos testes e criar o artefato sprint test, trabalhando em conjunto
com o arquiteto de software. tambm de sua responsabilidade
Essas dificuldades motivaram a pesquisa de uma soluo que as orientar o que dever ser automatizado. Finalmente, o analista
minimizassem e elevasse a contribuio dos testes na qualidade de testes quem ir configurar o ambiente, criar os scripts para
dos produtos oriundos dos ambientes geis. A proposta resultante automao, executar os testes e, quando estiver realizando testes
apresentada a seguir. exploratrios, criar o artefato sprint test.
Esse processo de testes geis tem como premissa a flexibilidade
Processo de Teste Adaptado para o Scrum para tornar-se adaptvel as necessidades de cada projeto. Com
Para Turk, France e Rumpe (2000), a agilidade de um processo isso, haver projetos em que o profissional de testes poder
determinada pelo grau em que uma equipe de projeto pode dinamica- assumir mais de um papel, de acordo com o tipo de projeto,
mente adaptar o processo com base nas mudanas no ambiente e nas complexidade, tamanho e experincia do time.
experincias coletivas dos membros da equipe de produo. Por
isso, o processo de testes geis proposto neste artigo deve ser Fase de Preparao
flexvel o bastante para se adequar s necessidades especficas de Esta fase ocorre antes do incio das sprints. Nela levantado
cada projeto e melhorar, continuamente, a rapidez no fluxo de suas junto ao cliente o product backlog e so planejadas as atividades da
atividades para obter a sintonia com os ambientes geis. verso do produto que ser desenvolvida pelo time Scrum. Nesta
O processo da Figura 3 uma adaptao de todas as fases, arte- fase, o time de testes auxilia na definio do product backlog e
fatos e papis do processo de testes fundamental ao framework planeja as atividades de testes, conforme a Figura 4.
Scrum. Na fase de preparao foram definidas as atividade que iro
acontecer antes das sprints. Para as fases das sprints, foram mape- Definio do product backlog
adas todas as atividades do Scrum para as atividades de teste. Por Nesta etapa, o cliente, junto com o product owner e o time
fim, so exibidos os artefatos e os papis especficos dos testes. Scrum, criam o product backlog (artefato proposto pelo Scrum),
especificando todas as funcionalidades, caractersticas e tecnolo-
gias que sero necessrias ao sistema, definindo suas prioridades
associadas ao maior valor de negcio.

Auxiliar na definio do product backlog


Como parte integrante do time Scrum, a equipe de testes dever
fazer a identificao do product backlog com o cliente usando
suas habilidades para analisar os itens do backlog na viso dos
testes e assim ajudar no entendimento tcnico das informaes
vindas do cliente.
O product backlog deve ser escrito em formato de cartes de
estria de usurio, que posteriormente serviro como critrios
de aceitao. Cabe ao profissional de testes mapear os itens do
backlog aos testes de aceitao,o que exige interaes frequentes
com o representante do cliente. Esse mapeamento entre as est-
Figura 3. Processo de testes geis adaptado do framework Scrum (Schwaber, 2011a) rias e os testes ajuda a manter a rastreabilidade entre os itens do
product backlog e os testes e, consequentemente, amplia a viso
Papis da cobertura dos testes.
Trs papis so sugeridos para compor o time de testes deste
processo: o Lder de Testes, o Projetista de Testes e o Analista de Planejamento da release
Testes, que devem estar treinados nas metodologias geis, a fim O propsito do planejamento da release, segundo o Scrum
de entenderem e colocarem em prtica os princpios do Manifesto Guide (Schwaber, 2011b), o de estabelecer um plano inicial, que
gil. Por isso, responsabilidades como: participar em todas as contenha: prioridades do product backlog, riscos, custos, crono-
fases do processo, prover melhoria contnua, acompanhar o ciclo grama e metas que o time Scrum e o resto da organizao possam
de vida dos defeitos, colher e acompanhar as mtricas, interaes entender e se comunicar.
constantes com o cliente, participar de decises, serem proativos Todos os artefatos dessa fase so criados em uma verso ini-
e inovadores, so inerentes aos papis. cial, propensos a ajustar-se a qualquer alterao no decorrer do
O lder de teste aquele profissional com viso gerencial. Ele projeto. Com o princpio da melhoria contnua, os artefatos so
trabalha em sintonia com o Scrum Master e sua principal funo regularmente revistos pela equipe e as melhorias so aplicadas
ajudar a resolver os impedimentos enfrentados pelo time de de acordo com as necessidades do projeto.

68 Java Magazine Edio 105


Outra caracterstica desta fase a realiza-
o das tarefas mais importantes e crticas
de um planejamento, que so priorizar e
estimar, conforme explanadas a seguir:
importante definir prioridades viveis
ao projeto, pois as verbas destinadas ao
mesmo e o tempo de durao das sprints
so finitas, mas a possibilidade de cober-
tura dos testes no tem fim. Estas priori-
dades podem ser baseadas em riscos, por Figura 4. Detalhamento das atividades dos profissionais de testes na fase de preparao e seus artefatos
exemplo:
- De acordo com a criticidade dos
requisitos;
- Probabilidade da ocorrncia de
defeitos;
- Impacto que podem causar na qua-
lidade do produto.
As estimativas das atividades de testes
esto limitadas ao tempo que o time Scrum
dedicar para os testes dentro das sprints,
que podem ser maior ou menor que o
tempo destinado codificao, depen-
dendo da criticidade da funcionalidade
que est sendo desenvolvida. Tcnicas
como Planning Poker (Cohn, 2005, p.56),
Brainstorm (Osborn, 1942) e a experincia
da equipe (decorrida de sprints anteriores)
podero trazer estimativas mais prximas
da realidade.

Definir estratgia de testes


O projetista dever mapear os itens do
product backlog aos testes necessrios
para valid-los, valorizando as caracte- Figura 5. Estratgia de testes
rsticas das metodologias geis (iteraes
curtas, utilizao de prticas de testes
geis e respostas rpidas s mudanas). De um conjunto de premissas, necessidades a habilidade da equipe e maturidade na
acordo com esse mapeamento, ele definir e procedimentos, que estejam associados relao da equipe com os processos utili-
as tcnicas de testes, os artefatos que sero aos aspectos dinmicos dos ambientes zados no projeto.
criados, as atividades de testes, as reunies geis.
e as atividades que sero automatizadas. Informaes pertinentes a um plano Avaliar a necessidade de treinamentos
Baseado nessas informaes, a estratgia de testes so: prioridades, riscos, con- As limitaes do time, tanto nas ativi-
de testes para a release especificada, tingncias, custos, cronograma, metas, dades de testes, como na adaptao aos
conforme a Figura 5. estratgia de testes, necessidades fsicas ambientes geis, devero ser identificadas,
para a realizao dos testes (hardware e e com isso, avaliar os treinamentos neces-
Definir plano de testes software), estratgia para o gerenciamento srios para suprir essas dificuldades.
As metodologias geis no restringem de defeitos, recursos humanos, requisitos Diversos treinamentos podem ser defini-
a produo de artefatos, e sim, primam de treinamentos e definies de papis. dos, entretanto, alguns so fundamentais
pela criao de artefatos objetivos que O lder de testes avaliar a necessidade da para a adaptao das equipes s metodo-
contemplem as necessidades de cada existncia de cada uma dessas informa- logias geis, so eles: entendimento do
projeto. Desse modo, nesta fase de plane- es, de acordo com o contexto de cada framework Scrum, automao dos testes e
jamento da release, define-se o plano de projeto (o domnio, o tamanho e a com- desenvolvimento dirigido a testes (TDD).
testes, que tem como propsito descrever plexidade), a disponibilidade de tempo, Este ltimo para os desenvolvedores.

Edio 105 Java Magazine 69


Testes no Scrum

Definir com o time Scrum o conceito de pronto Estas contm e consistem na reunio de Escolha do sprint backlog
A interao entre os integrantes do time planejamento da sprint, o trabalho de Na fase de planejamento da sprint
Scrum deve ser a mais concisa possvel. codificao e testes, a reunio diria, (Figura 6), os itens do product backlog
Por isso, o conceito do que est pronto a reviso da sprint e a retrospectiva da priorizados pelo product owner sero
deve ser bem definido. Segundo Ferreira sprint. divididos em pequenas tarefas pelo time
et al. (2010), um determinado item pode Scrum para serem desenvolvidos e testa-
estar pronto dependendo do conceito Sprints dos durante a sprint. Essas tarefas devem
de concluso/trmino estabelecido pela A sprint o "corao" do Scrum. Ela con- ser decompostas para que possam ser re-
equipe. O item pronto pode ser: codifi- siste em perodos de tempo bem definidos alizadas em menos de um dia. Essa lista
cao concluda, codificao + teste con- de um ms ou menos, durante o qual um de tarefas compe um artefato definido
cludos, codificao + teste + integrao incremento do produto fica pronto, utili- pelo framework Scrum com o nome de
concludas, teste concludo, codificao + zvel, e potencialmente entregvel. sprint backlog. O time se auto-organiza
teste + integrao + regresso concludos para se responsabilizar pelo trabalho
etc. Por isso, necessrio que a equipe de- Planejamento da Sprint contido no sprint backlog, tanto durante
fina quando um item vai estar realmente Para Schwaber (2011b, p.12), a reunio de a reunio de planejamento da sprint,
pronto. Para cada item, a definio de planejamento das sprints o momento quanto no prprio momento de execuo
pronto pode ser diferente, vai depender pelo qual a iterao planejada. Ela con- da sprint (Schwaber, 2011b).
do que cada um se prope. siste de duas partes: a primeira parte o A equipe de testes tambm deve ficar
Terminada a fase de Preparao (ob- momento no qual decidido o que ser fei- atenta e tentar conter o mpeto dos desen-
serve a Figura 3), todos os artefatos de to na sprint e a segunda parte o momento volvedores, no intuito dos mesmos no
testes, provenientes da release, estaro no qual o time entende como desenvolver escolherem muitas funcionalidades para
com sua verso inicial concluda e o essa funcionalidade em um incremento do a sprint e acabar espremendo o tempo
time Scrum estar pronto para iniciar os produto durante a sprint.. destinado aos testes. Por isso necessrio
ciclos iterativos de trabalho, as sprints. que a equipe de testes participe de todas
as estimativas.

Criar tarefas de testes


Tarefas exclusivas que representem
as atividades dirias do time de testes
devero ser criadas para trazer melhor
visibilidade do fluxo de execuo dessas
atividades. Elas ajudaro os profissionais
de testes na utilizao do quadro Kanban
(Anderson, 2010), que uma tcnica para
acompanhamento do andamento das ati-
vidades. Essa tcnica tambm trar maior
entendimento aos outros integrantes do
Figura 6. Detalhamento das atividades do Planejamento da Sprint time Scrum sobre as atividades de testes
que esto sendo executadas.
A Figura 7 demonstra um exemplo de
uso do quadro Kanban, que possui cinco
fases que sinalizam o status de cada tarefa
da sprint corrente. Com isso possvel
rapidamente avaliar o andamento da
sprint.
As tarefas que estiverem na coluna
In iciado representam todas as
atividades que aguardam incio, en-
quanto as que estiverem na coluna Em
Andamento, representam as que esto
em desenvolvimento. Havendo algum
impedimento, elas so colocadas na
coluna de Impedimento. importante
Figura 7. Exemplo de uso do Quadro Kanban

70 Java Magazine Edio 105


que seja rapidamente identificado o
motivo e as possveis solues para o
impedimento. Quando a tarefa estiver
sendo implantada no ambiente de pro-
duo ou caso ela precise aguardar a
concluso de outras tarefas para serem
implantadas juntas, ela dever estar na
coluna Em Publicao. Por fim, quando
ela estiver concluda, ser inserida na
coluna Concludo.

Planejar as atividades de testes da sprint


No incio de cada sprint dever ser sele-
cionado da estratgia de teste o conjunto
de testes que se aplicam sprint. Em se-
guida, preciso definir para cada tarefa de
teste sua estimativa, requisitos ferramen-
tais e ambientais, priorizaes e restries,
anexando essas informaes ao carto
de estria do usurio. Esse planejamento
dever ser baseado nas necessidades es-
pecficas do estado atual do projeto e na Figura 8. Detalhamento do trabalho dirio do time de testes durante a sprint.
anlise de risco (probabilidade e impacto
dos defeitos).
Preparar e acompanhar a ferramenta de integrao Outra possibilidade de utilizao desse
Trabalho Dirio continua artefato quando o analista de testes for
Durante a sprint, o profissional de teste O uso de um framework que execute e realizar os testes exploratrios. Neste
ter um conjunto de trabalho a ser exe- monitore, a cada nova integrao, os tes- caso, o sprint teste ser criado pelo pr-
cutado de acordo tanto com seu papel no tes de regresso de forma automatizada, prio analista no momento da execuo
time, como com o andamento da sprint, vital para o melhor aproveitamento da dos testes, inserindo todos os passos
conforme mostra a Figura 8. prtica de integrao continua. percorridos durante a execuo. Assim,
Esse processo no dependente da A integrao contnua de responsabi- ser possvel reproduzir os defeitos
utilizao do TDD, todavia, se o projeto lidade tanto dos desenvolvedores quanto encontrados, pois estes iro conter as
o estiver utilizando, existiro situaes dos testadores. Por isso, os profissionais sequncias de aes que o analista usou
em que o desenvolvedor necessitar do de testes devero ter o auxilio do restante para identific-los.
auxlio de profissionais de testes nas do time Scrum para instalar, configurar,
atividades que o envolve. Outra prtica acompanhar e analisar os resultados Criar e executar os scripts para automao
de programao em que os desenvolve- gerados pelo sistema, assim como para A falta de experincia dos testadores na
dores podero precisar de ajuda com executar os testes de regresso automati- criao de scripts uma das dificuldades
o desenvolvimento orientado a testes zados (funcionais e unitrios) junto com dos testes geis, pois para criar os scripts
de aceitao (ATDD), que tambm en- a build todos os dias. necessita-se certa habilidade de codificao.
volve criar testes antes do cdigo, e tais Portanto, duas medidas podero ser toma-
testes representam as expectativas do Criar o sprint teste das para minimizar esse problema: treina-
cliente quanto ao comportamento que o Atravs dos critrios de aceitao mentos em automao para os testadores e
software deve ter. contidos nas estrias do usurio e da auxilio dos desenvolvedores aos profissio-
necessidade de validar as diversas possi- nais de testes na criao dos scripts.
Configurar o ambiente de testes bilidades de funcionamento do sistema, Segundo Shaye (2008, p.07), outra prtica
O ambiente de execuo dos testes deve os testes funcionais sero elaborados que ajudar o processo de automao de
ser preparado e todas as ferramentas pelo projetista de testes. Eles iro com- testes a [...] testabilidade para o produto, ou
devem ser instaladas e configuradas. por o sprint teste (Figura 9), que um seja, os desenvolvedores codificam cdigos
Para otimizar o tempo, essas atividade artefato que contm as informaes de adicionais para suportar a automao dos
podem ser realizadas em paralelo ao forma simples e objetiva para execuo testes, por exemplo, criar cdigo (mtodos)
desenvolvimento. dos testes. que automatize os testes unitrios.

Edio 105 Java Magazine 71


Testes no Scrum

Figura 10. Grfico Burndown

O grfico Burndown (tcnica de acompa-


nhamento grfico do status de um projeto
(Schwaber, 2011b)) e todas as mtricas de
acompanhamento da sprint devero ser
atualizados diariamente e deixados
disposio de todos durante a reunio
diria. Assim, tanto o grfico, quanto as
Figura 9. Artefato sprint teste com as informaes para execuo dos testes
mtricas, oferecero visualizaes rpidas
da evoluo da sprint para o time e todos
Executar todos os testes necessrios correo tende a diminuir. No entanto, os envolvidos no projeto.
Os testes, que foram previamente pla- isso est alm do time de testes, porque A Figura 10 apresenta um exemplo da
nejados, devem ser criados antes do depende da disponibilidade de tempo do utilizao do grfico Burndown no contex-
desenvolvimento (TDD), executados em desenvolvedor em realizar as correes. to do Scrum. Ele representa a quantidade
paralelo ao desenvolvimento (testes de Portanto, cabe equipe de testes, alm de de tarefas que faltam serem implementa-
unidade, componente, regresso e TDD) manter a lista de defeitos, acompanhar das no eixo vertical versus o tempo (em
e aps a codificao (testes funcionais e de perto o ciclo de vida do defeito (testes, dias) no eixo horizontal.
no-funcionais). Nesta etapa os desenvol- reparo e re-testes).
vedores podero ajudar na execuo. Uma O defeito que for encontrado aps a Reunio de reviso
boa prtica de testes executar diaria- implantao da verso do sistema deve, Ao fim de cada sprint realizada uma
mente os testes automatizados junto com aps ser corrigido, ser re-testado com a reunio que tem o intuito de demonstrar
a build. Assim, defeitos sero descobertos configurao do ambiente de implantao, ao cliente a execuo das funcionalidades,
mais cedo. pois o teste no mundo real muito mais desenvolvidas durante a sprint, que esti-
Alm de executar todos os testes defi- conclusivo e eficiente. verem concludas e testadas.
nidos previamente, recomenda-se dedi- O time Scrum dever receber a opinio
car um tempo na sprint para fazer uma Reunio diria do cliente sobre as funcionalidades de-
explorao no sistema, projetando e A reunio diria tem como objetivo monstradas e, a partir desse feedback, se
executando testes dinamicamente (testes compartilhar com os demais membros necessrio, atualizar o product backlog e
exploratrios). Esses testes podem trazer do time o progresso dos trabalhos e aju- delinear novos rumos para as prximas
benefcios como: deteco maior de defei- dar a resolver as barreiras encontradas. sprints. Cabe equipe de testes participar
tos em um curto espao de tempo e revelar Como membro do time Scrum, o time da reunio, avaliar a viabilidade e identi-
novas reas do produto para automao de testes (especificamente o analista de ficar os riscos, na viso de testes, dessas
dos testes. testes) dever participar desta reunio. mudanas no product backlog.
Nela, todos os participantes devero
Controle de defeitos responder a trs perguntas: o que voc Reunio de retrospectiva
No desenvolvimento gil importante fez ontem?, o que far hoje? e quais Esta uma reunio que ocorre aps a
que todo defeito encontrado seja encami- seus impedimentos?. Nesta reunio ser reunio de reviso e antes da reunio de
nhado para reparo o mais cedo possvel, atualizada a lista de impedimentos e com planejamento da prxima sprint. Segundo
pois, como os desenvolvedores ainda esto o auxlio do Scrum Master e do lder de Schwaber (2007, p.26), a atividade mais
com o cdigo correspondente ao defeito testes, o time tentar minimizar todos importante para o sucesso do Scrum, pois
claro na sua memria, o tempo mdio de esses impedimentos. uma tima oportunidade para o time

72 Java Magazine Edio 105


discutir o que est funcionando, o que no funciona e acertar as Nas atividades dos testes geis, as mtricas possuem o objetivo
mudanas. de colaborar com a melhoria contnua dos testes e, consequente-
Durante todo o processo de testes, o time deve capturar as mente, com a qualidade do cdigo fonte, que passar a apresentar
medidas para criar as mtricas e, de acordo com as informaes menos defeitos, um bom design e ser mais fcil de ser mantido
apontadas por elas e as sugestes do time durante a reunio de (Vicente, 2010, p.66). Toda a equipe de testes deve colher as medi-
retrospectiva, pontos de melhorias devero ser traados. das e repass-las ao lder de testes, que o responsvel por criar
e manter o relatrio das mtricas. Durante as reunies o lder
Acompanhamento ir expor as mtricas para serem analisadas em conjunto com os
Em um contexto gil, as mtricas apoiam a medio contnua integrantes da equipe.
do produto e do processo, permitindo que os ciclos de desen- Diversos estudos apontam distintas mtricas para o acompa-
volvimento sejam constantemente inspecionados, adaptados e nhamento das atividades de testes em ambientes geis (observe a
melhorados (Hartmann e Dymond, 2006). Elas devem reforar Tabela 1). No entanto, elas devem ser cuidadosamente escolhidas
valores geis de cooperao com o cliente, entrega de valor, para o perfil de cada projeto, fornecendo assim resultados realistas
simplicidade e preocupao com as tendncias demonstradas. A e transparentes. Crispin e Gregory (2009, p.74) alertam sobre essa
quantidade de mtricas tambm deve sempre ser reduzida, fcil escolha: A mtrica pode ser um desperdcio de esforos, pois elas
de serem coletadas e demonstrarem os fatores que as influenciam, so algumas vezes usadas de forma nociva ou [...] analisadas de
evitando distores. forma isolada, onde geralmente no fornecem valor algum.

Mtricas Origem
Cobertura de Cdigo Williams et al. 2004 e Nagappan et al. 2004
Porcentagem de Assertivas de Testes de Unidade Passando e Falhando Vicente, 2010
Quantidade de Testes de Aceitao por Funcionalidade Nagappan et al. 2004
Porcentagem de Assertivas de Testes de Aceitao Passando e Falhando Vicente, 2010
Tempo de Execuo de Testes Vicente, 2010
Quantidade de Defeitos Encontrados Williams et al. 2004

Tabela 1. Mtricas voltadas para os testes em ambientes geis e sua origem

Edio 105 Java Magazine 73


Testes no Scrum

Concluso ANDERSON, David J. Kanban: Successful Evolutionary Change for


Os profissionais da indstria de software esto compreendendo Your Technology Business. 1 ed United States Blue Hole Press;
cada vez mais a importncia das atividades de testes no desenvol- Sequim, 2010.
vimento de software, elevando o nvel de prioridade das mesmas.
Do mesmo modo, quem trabalha com metodologias geis percebe ASTELS, David. Test-Driven Development: A Practical Guide 5 ed.
que realizar os testes sem um processo estruturado ou sem dar- New Jersey: Pearson Education, 2003.
lhes a mesma importncia dada s atividades de desenvolvimento CARTER, JoEllen. The Agile Tester.
ter dificuldades em atingir um alto grau de qualidade nos seus http://www.infoq.com/resource/vcr/1275/file/WP_AgileTester.pdf.
produtos.
COHN, Mike. Agile Estimating and Planning. 1 ed. Massachusetts:
Enfatizando este contexto, surge uma pergunta: como possvel
Pearson Education, 2005.
utilizar o Scrum em projetos de grande porte com alta criticidade?
Usar o Scrum de maneira engessada, como um template, ir limitar a CRISPIN, Lisa. e GREGORY, Janet. Agile Testing: A Pratical Guide for
utilizao dele. Assim, deve-se adapt-lo s necessidades de cada Testers and Agile Teams. 1. ed. Boston: Pearson Education, 2009.
projeto, mesmo que para isso seja preciso inserir processos mais
FERREIRA, R. E. P., RAMOS, S. E., LAGARES, V.C. Scrum no Teste de
estruturados que apoiem o domnio do produto.
Software. Unieuro. Belo Horizonte. 2010.
Neste sentido, este trabalho props um processo de testes de
software com suas atividades adaptadas ao framework Scrum. As HARTMANN, D. e DYMOND, R. Appropriate agile measurement: Using
definies, atividades e mtodos foram estruturados de acordo metrics and diagnostics to deliver business value. In Proceedings of
com as necessidades e princpios inerentes ao paradigma gil, Agile Conference 2006, Minnesota.
com o intuito de que ele minimize as dificuldades encontradas
ISO. ISO/IEC 29119 Software Testing: The new international software
pelas equipes de testes na transio dos testes fundamentais para
testing standard. 2009.
os testes em ambientes geis.
NAGAPPAN, N. Toward a software testing and reliability early warning
Juvenal Feitosa metric suite. 2004. In 26th International Conference on Software
francisco.juvenal@ufpe.br Engineering (ICSE 2004), Edinburgh, United Kingdom, pages 6062.
Mestre em Engenharia de Software pelo C.E.S.A.R EDU Bacharel
IEEE Computer Society.
em Sistema de Informao pela Universidade Salgado de Oliveira
PE (2009). servidor da Universidade Federal de Pernambuco UFPE, OSBORN, Alex Faickney, How to Think Up. 1 ed. Virginia:McGraw-Hill,
atuando como analista de sistemas e como professor convidado; 1942.
professor do curso de Cincia da Computao da Faculdade de Tecnologia e Cincia de
Pernambuco FATEC; e professor da Ps-Graduao em Gesto de Projetos em TI, na SCHWABER, Ken. The Scrum Papers: Nuts, Bolts, and Origins of an Agile
Faculdade Piauiense-FAP. Process, Washington, 2007.
_________________ a. Scrum for Teams System 2011
Gustavo Alves
http://www.scrumforteamsystem.com/ProcessGuidanceOld/v2/Scrum/Scrum.asp.
gustavo.alves@qualiti.com.br
Doutorando pela Universidade Federal de Pernambuco / Mestre _________________ b. Scrum Guide 2011
em Engenharia de Software / Testes de Software pela Universi- http://www.scrum.org/storage/scrumguides/Scrum%20Guide%20-%202011.pdf.
dade Federal de Pernambuco, Especialista em Testes de Software pela
Universidade Federal de Pernambuco / Projeto Motorola. Desde o ano de SHAYE, Susan. Transitioning a Team to Agile Test Methods. In Agile
2003, professor de Ps-Graduao em Engenharia de Software C.E.S.A.R EDU, tem Conference. Toronto: 2008.
participado de projetos de definio de metodologias de testes, implantao de fbrica
TURK, Dan, FRANCE, Robert e RUMPE, Bernhard, Limitations of Agile
de testes, diagnstico de empresas em maturidade em testes e treinamento. Participou
de projetos em empresas de diversos segmentos como, por exemplo, financeiro, varejo, Software Processes. Colorado, 2000.
sade, fbrica de software e consultorias. VICENTE, Andr Abe, Definio e gerenciamento de mtricas de teste
no contexto de mtodos geis. 2010. 158f. Dissertao (Mestrado
Felipe Furtado em Cincia da Computao) Instituto de Cincias Matemticas e de
felipe.furtado@cesar.org.br Computao, Universidade de So Paulo, So Paulo: 2010.
Especializado em TI e mestre em Cincias da Computao pelo
Centro de Informtica da UFPE na rea de mtricas e produtivida-
de. Atualmente doutorando no CIn, Gerente de Projetos do CESAR, co- D seu feedback sobre esta edio! Feedback
eu
ordenador da ps-graduao em Gesto gil de Projetos do CESAR.EDU
s

A Java Magazine tem que ser feita ao


D

e docente do Mestrado Profissional em engenharia de software. Com 14 anos na rea de seu gosto. Para isso, precisamos saber
sobre e

desenvolvimento de software, foi coordenador da garantia da qualidade de software e o que voc, leitor, acha da revista!
s

ta
edio
do SEPG (Software Engineering Process Group) onde adquiriu experincia na definio e
D seu voto sobre este artigo, atravs do link:
implantao de processos de gerenciamento de projetos de TI aderentes ao CMMI e em
avaliaes SCAMPI, com participao em avaliaes Classe A CMMI nveis 2 e 3. www.devmedia.com.br/javamagazine/feedback

74 Java Magazine Edio 105


Edio 105 Java Magazine 75
Testes no Scrum

76 Java Magazine Edio 105

You might also like