Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
08
Comunidade
LEONARDO GALVO
JustJava 2003, a participao brasileira no Automao com XDoclet
JavaOne, listas de discusso e PBJUG MARCUS BRITO
Retirar do programador a tarefa entediante 46
de criar cdigo repetitivo, adicionando mais
significado e poder ao cdigo o objetivo
do XDoclet
10
A Vida, o Universo e Tudo Mais
BRUNO SOUZA
Java no desktop, parte 2:
toolkits web, distribuio e instaladores Jakarta Velocity
PAULO SILVEIRA E RAFAEL STEIL
O uso de templates na camada de apresen- 50
tao de aplicaes web simplifica a manu-
teno e a separao de responsabilidades
16
Java Livre
FERNANDO LOZANO
Aprenda o essencial sobre o container web mais
usado no mercado
28
Alm das Fronteiras
JLIO CSAR LINS
JSP 2.0: linguagem de expresses, JSTL padro,
fragmentos e tag files so algumas extenses Struts: primeiros passos
MIGUEL NGELO GALLINDO,
RICHARDSON OLIVEIRA E DANIEL FREITAS
Conhea a arquitetura e o funcionamento
54 bsico do framework lder para o
Livros desenvolvimento web
DANIEL DEOLIVEIRA
Existem bons escritores brasileiros sobre Java 40
Edio
Publisher e Editor
Leonardo Galvo
Editor Adjunto
Fernando Lozano
Q uando, em 2001, a Sun decidiu oficializar a separao de Java em trs platafor-
mas as hoje to conhecidas J2EE, J2SE e J2ME parecia ser uma delimitao
adequada e suficiente por muitos anos. Mas uma tecnologia rica e dinmica
como Java parece desafiar qualquer categorizao.
Jornalista Responsvel Em que plataforma entraria, por exemplo, o novo J2EE Client Provisioning, para a
Srgio Moraes C. Brando (MTb: 15183-68-148) integrao entre aplicaes servidoras e clientes conectados, tanto os sem-fio quanto os
Corpo Editorial desktop? Micro, Enterprise ou Standard Edition? Um pouco dos trs... E o que dizer de
Alexandre Denes dos Santos, Bruno Souza, Edgar Silva, ferramentas como o XDoclet, para gerao de cdigo, baseada no Javadoc (J2SE, claro...),
Hyalen Caldeira, Jlio Csar Lins, Osvaldo Doederlein mas que se supera na gerao de EJBs (ento no seria J2EE?). E o Jakarta Velocity?
Colaboraram nesta edio Este deixa para trs qualquer delimitao afinal, templates (o corao do Velocity)
Bruno Souza, Cludio Miranda, Daniel deOliveira, Daniel Freitas,
podem ser usados em aplicaes que precisam gerar pginas HTML, documentos XML,
Felipe Leme, Fernando Lozano, Gustavo Nalle Fernandes,
Jlio Csar Lins, Leonardo Galvo, Marcus Brito, componentes EJB, telas MIDP... As linhas que dividem as plataformas realmente esto
Michael Nascimento Santos, Miguel ngelo Gallindo, cada vez menos claras, principalmente devido evoluo e integrao das APIs.
Paulo Silveira, Rafael Steil, Richardson Oliveira A inte(g)rao entre plataformas um tema recorrente nos artigos, colunas e sees
desta edio. Na coluna Java de Bolso demonstrado o framework de conectivida-
Arte de oficial do J2ME/MIDP, para a comunicao de celulares com servios no back-end
Editor de Arte atravs de protocolos wireless e internet o end-to-end chegando maturidade.
Tarcsio Bannwart (tarcisio@javamagazine.com.br)
Ainda dentro do assunto de capa, temos trs textos sobre temas queridos pelos de-
Capa
senvolvedores: o JSP, que na verso 2.0 vem com extenses que prometem aumentar
Ivan Sria Fernandez (ivansf@brturbo.com)
muito a produtividade; o Struts, framework web que faz boa parte do trabalho braal
Ilustraes internas
Felipe Machado (felipe_m@ibest.com.br) e facilita a programao em equipe; e o Tomcat, o container e servidor web que, voc
sabe, referncia para a execuo de servlets e JSPs.
Produo A rede das redes tambm ocupa espao privilegiado na segunda parte do artigo so-
Gerente de produo bre Java no Desktop (coluna A Vida o Universo e Tudo Mais), que mostra tcnicas e
Rosngela Mattos ferramentas para trazer os benefcios da web para o desktop e apresenta idias para
Assessoria de Imprensa
levar algumas vantagens do ambiente local para aplicaes web.
Kaline Dollabella (kalined@hotmail.com)
Focando na linguagem, o artigo sobre asseres explora o uso da palavra-chave
Impresso
Grfica Bandeirantes assert, que simplifica o chamado design-by-contract, criado pelo guru da orientao a
Distribuio objetos Bertrand Meyer. Finalizando, temos uma novidade que deve agradar a muitos:
Fernando Chinaglia Distribuidora S.A. a coluna Dicas e Solues, que soluciona problemas encontrados freqentemente pelos
Rua Teodoro da Silva, 907, Graja - RJ desenvolvedores.
CEP 20563-900, (21) 3879-7766 - (21) 2577-6362 isso. Boa Pscoa e muita paz para todos.
Leonardo Galvo
Publicidade Publisher e Editor
publicidade@javamagazine.com.br
Contato
Assinaturas
assinaturas@javamagazine.com.br , (021) 2213-0941 ou no site
Cartas e informaes gerais
info@javamagazine.com.br Servlets com J2SE
Na web Quando tento acessar a API de servlets, o Eclipse
Estou utilizando o JBoss e o Tomcat como servi-
www.javamagazine.com.br dores em meu micro com o J2SDK 1.3.1.03 insta- reclama como se ela no existisse no meu SDK. O
lado. Uso o 1stPage para a edio de JSP e HTML, que preciso fazer?
e o Eclipse para a gerao de arquivos .class e .jar. Mrcio Alex
Neofcio Editora
Basicamente, todas as APIs que dependem de ser- projeto no Eclipse para que seja possvel compilar de modo que voc deve copiar todos os pacotes JAR
vidores especializados (servidores de nomes, web, e servlets. no diretrio lib da distribuio (jakarta-taglibs/
de aplicao, monitores de transao, servidores de As edies 4 e 5 fornecem instrues detalhadas standard-1.0.3/lib) para o diretrio WEB-INF/lib de
e-mail etc.) esto includas apenas no J2EE. Servi- sobre a localizao dos pacotes contendo as APIs no sua aplicao web, ou ento para o diretrio shared/
dores J2EE (como o JBoss) ou containers web (como o JBoss e como configurar o Eclipse para utilizar APIs classes do Tomcat. L elas ficaro visveis para todas
Tomcat) fornecem as APIs necessrias em pacotes JAR definidas em pacotes externos. as aplicaes hospedadas pelo servidor.
que devem ser adicionados ao seu classpath para a Importante: no mais necessrio copiar os arquivos
compilao dos programas. Mudanas em Taglibs .tld. Eles esto includos nos pacotes JAR e sero local-
Entretanto, a maioria dos IDEs ignora o classpath Estou com problemas para montar o exemplo izados sem problemas pelas pginas JSP.
do sistema operacional, de modo que voc deve con- Frum de Debates da Edio 5. O arquivo citado
figurar sua ferramenta para incluir as APIs adicionais. jakarta-taglibs-20021014.zip no est mais disponv- 100 vezes Java
No Eclipse, voc deve selecionar o cone do seu projeto, el e os novos no incluem os arquivos utility.tld ou Acho a revista demais as primeiras edies so
clicar com o boto direito e mostrar a janela de pro- utility.jar. imperdveis. Toro para que a Java Magazine tenha
priedades; depois selecionar a opo Java Build Path Ronaldo Jnior (link_rjr@terra.com.br) sucesso, pois faltava um veculo especfico para pro-
e clicar no boto Add External JAR para adicionar os gramadores e especialistas na linguagem Java. Meus
pacotes contendo as APIs necessrias. A verso citada no artigo para a biblioteca de parabns. Espero me manter assinante da Revista
A API de servlets fornecida pelo JBoss no arquivo tags JSTL fornecida pelo projeto Jakarta Taglibs at a Edio 100 e o que vier alm!
(JBOSS_HOME)/server/default/lib/javax.servlet.jar. (jakarta.apache.org/taglibs) era um snaphot, uma
Rodrigo Ferreira (rodrigo2k@visualnet.com.br)
Este o pacote JAR que deve ser adicionado ao seu verso de desenvolvimento. J esto disponveis
verses de produo no momento de fechamento
Erramos desta edio, a mais recente 1.0.3. Voc pode
Na coluna Livros da Edio 5, foram pub- baixar qualquer verso de produo (release) em Participe!
licadas informaes incorretas sobre o livro www.apache.org/dist/jakarta/taglibs/standard/ Envie sua dvida, pedido, sugesto ou crtica
Aprenda Java em 21 Dias, da Editora Campus. binaries, por exemplo jakarta-taglibs-standard- para info@javamagazine.com.br, ou para:
Correo:
1.0.3.zip, pois todas funcionaro sem problemas com o
Editor - Java Magazine
cdigo nos artigos do frum (e do mural, na Edio 4),
Aprenda Java em 21 Dias, Av. 7 de Setembro, 4698, Conj.1501-1503
com qualquer verso do Tomcat de 4.0.3 em diante.
Professional Reference Curitiba-PR, CEP 80240-000
Laura Lemay e Rogers Cadenhead As novas verses da JSTL modificaram a distribuio Fax: (041) 242-4580.
531 pginas, R$ 109,00 dos tags em pacotes JAR e passaram a incluir pacotes
Cartas publicadas podem ser editadas por
ISBN 8535208658 externos necessrios para o suporte a algumas tags
motivos de clareza ou extenso.
(como o Xerces para as tags relacionadas com XML),
ject Model), contendo informaes tais como equipes pequenas ou mdias e adorado
nome, URL, desenvolvedores envolvidos,
por muitos desenvolvedores ressentidos
listas de discusso, testes a serem feitos e
dependncias. Para usar completamente as com processos burocrticos.
funcionalidades do Maven, os projetos deve- O livro explora as principais ferramentas
ro seguir uma certa estrutura de diretrios usadas no desenvolvimento Java seguindo O terceiro lanamento, Google Hacks
e arquivos (que nem sempre intuitiva mas os princpios do XP, tais como Ant, JUnit, (por Tara Calishain e Rael Dornfest), no
bem documentada). Cactus, Tomcat e XDoclet num atestado animal nem tampouco se concentra na
A documentao do projeto tambm da fora da tecnologia na criao de sof- tecnologia Java, mas igualmente importan-
pode ser gerada e gerenciada pelo Ma- tware de qualidade. O captulo sobre JUnit te, especialmente para o desenvolvedor que
ven. Configurando um arquivo chamado
pode ser baixado gratuitamente do site precisa se encontrar na abundncia de APIs,
navigation.xml, voc indica como deve ser
www.oreilly.com/catalog/jextprockbk. especificaes e notcias tecnolgicas.
gerado o site do projeto e como associ-
lo aos javadocs. Para auxiliar em projetos "Google Hacks" inclui 100 dicas sobre o
grandes, so identificadas dependncias, uso eficaz do Google, o mecanismo de
que depois so baixadas de repositrios busca usado para mais de 70% das pesqui-
na internet. sas realizadas da internet. So desde dicas
A flexibilidade do Maven se deve aos seus simples sobre configuraes avanadas,
muitos plugins, que j passam de 30. A maio- at o uso da API do Google com vrias
ria escrita sem usar Java diretamente, mas linguagens (incluindo Java, claro). O site
www.oreilly.com
e ws
produtos, novas tecnologias,
especificaes e estratgias
X-News*
Novo JAXP jaxp-api.jar contm as interfaces que faz parte do Java Web Services Developer Pack
Includa no pacote da Sun para desenvolvi- definem as APIs de parsing e transformao 1.1. Na nova verso, so suportados subcon-
mento de web services(JWSDP 1.1), a verso de XML, definidas na especificao final do juntos dos padres XML Schema e XML Na-
1.2.2 da implementao de referncia do JAXP 1.2 (JSR-63). As classes dos diferentes mespaces, e oferece recursos mais flexveis
JAXP (Java API for XML Processing) tem novi- fornecedores devem implementar essas para marshalling e unmarshalling, alm de
dades importantes. A principal a incluso do interfaces. novas funcionalidades de validao.
XLSTC (Compiling XSLT Processor), e a criao O download do JAXP feito como parte Com o JAXB possvel fazer um
de novas propriedades no parser XML que do JWSDP, em: java.sun.com/webservices/ mapeamento bidirecional entre documentos
aumentam a segurana no processamento downloads/webservicespack.html. XML e objetos Java, permitindo a manipulao
de mensagens SOAP. de XML atravs de Java em vez das APIs SAX e
Caminhos com JXPath DOM, isolando o desenvolvedor de detalhes
A especificao do JAXP define uma camada
J est disponvel a verso 1.1 do JXPath, internos do XML como parsing, namespaces
de abstrao para o processamento de XML,
biblioteca do Jakarta Commons que define e eventos. Para comear a usar a API, deve-se
que inclui parsing (usando DOM ou SAX)
um interpretador para a linguagem XPath. definir um XML Schema. O schema tem um
e transformaes de documentos usando
XPath (XML Path Language) uma lingua- objetivo semelhante a um DTD, porm mais
uma folha de estilos XSL. A implementao
gem de expresses criada pelo W3C para uti- abrangente e escrito em XML.
de referncia inclui vrias bibliotecas do
lizao em folhas de estilos XSL e expresses O suporte a schemas a grande novidade na
grupo Apache:
XPointer (usadas para referenciar fragmentos nova verso do JAXB as verses anteriores
xercesImpl.jar Xerces, parser XML pa-
de um documento XML qualquer atravs de suportavam apenas DTDs. O desenvolvedor
dro do JAXP. A nova verso includa (2.2.1)
uma URI). Com XPath, possvel selecionar que usa DTDs em seus sistemas poder fazer
contm vrias correes de bugs e melhorias
ns de um documento XML de acordo com a migrao para schemas usando ferramentas
de desempenho;
critrios especificados. livres como o Trang (ver nota neste quadro).
xalan.jar Xalan, processador XSLT
Com o JXPath possvel ir alm, usando O JAXB define trs operaes principais:
padro do JAXP, suporta XSLT 1.0 e XPath 1.0,
XPath sobre JavaBeans, colees, arrays, Binding, Marshal e UnMarshal :
e implementa as interfaces definidas pelo
ns DOM/JDOM, contextos de servlets, ou Binding a partir de um schema, um utili-
TraX (Transformation API for XML). A verso
em combinaes desses. Outra vantagem trio fornecido pelo JAXB, chamado de bind
do Xalan foi atualizada da 2.3.1 para a 2.4.1,
do JXPath a reduo do nmero de linhas compiler, gera automaticamente classes
que tem maior desempenho e muitos bugs
de cdigo para a navegao em estruturas e interfaces que mapeiam os
corrigidos;
complexas, evitando o uso de intenso de elementos definidos;
xsltc.jar XSLTC, uma alternativa oferecida
loops aninhados, expresses condicio- UnMarshal usando um ob-
pelo Xalan para a realizao de transforma-
nais e casts. jeto UnMarshaller, possvel
es XSLT. Compila a folha de estilo XSL
Entre as novidades do JXPath 1.1 criar uma rvore de objetos que
dando origem a um Translet, formado por
est o suporte completo a JDOM e reflete a organizao e a hierarquia
bytecodes Java que realizam a transformao.
a contextos relativos, e a cober- do documento XML so instncias
A abordagem XSLTC aumenta o desempenho
tura estendida da sintaxe do das classes geradas pelo bind compi-
de transformaes XSLT, visto que uma folha
XPath para modelos no-XML. ler. O JAXB permite que seja feito um
de estilo compilada uma s vez e todas as
Foram adicionadas tambm unMarshal em arquivos XML, em
transformaes subseqentes so realizadas
funcionalidades aos objetos dados XML obtidos de um InputS-
pelo Translet gerado;
Pointer, que podem armazenar tream, URL ou eventos SAX, entre
dom.jar implementa suporte a DOM a localizao de um elemento ou outras fontes possveis.
(Document Object Model) level 2. O DOM le- grupo de elementos dentro de uma hierar- Marshal um objeto Marshaller cria docu-
vel 3, que incluir suporte ao XPath e vrias quia, para uso posterior. mentos XML a partir de uma rvore de obje-
melhorias (por exemplo, o tratamento de Documentao e download em: tos que representam a estrutura do schema.
eventos de teclado e a possibilidade de alte- jakarta.apache.org/commons/jxpath possvel fazer uma validao baseada no
rao dinmica do documento), suportado
schema antes de realizar a converso.
experimentalmente no Xalan; Mapeamento XML/Java
Veja mais em java.sun.com/xml/jaxb.
sax.jar implementao do suporte a SAX A verso 1.0 final do JAXB (Java Architecture
2.0 (Simple API for XML); for XML Bindind) outra importante API que * por Gustavo Nalle Fernandes
l
LEONARDO GALVO
JustJava se aproxima
O primeiro grande evento de Java do ano j
est com data, local e principais patrocina-
dores confirmados. O JustJava 2003 acontecer
Ofcio (problemas e solues do dia-a-dia do
desenvolvedor).
Funcionando em paralelo s palestras, haver
cimento nas apresentaes, poder fazer os dois
no JustJava 2003 sem peso na conscincia.
Alm das palestras, haver trs keynotes (apre-
nos dias 26 e 27 de abril, no Centro de Conven- um Pavilho de Exposies, que incluir, alm sentaes especiais usando o espao de vrias
es Frei Caneca (Rua Frei Caneca, 569, Cerquei- de estandes de empresas, um amplo espao salas) dois no primeiro dia (manh e tarde) e
ra Csar, So Paulo-SP). O evento tem apoio da de convivncia. Um dos principais objetivos do um na manh do domingo. Fechando o sbado,
SUCESU-SP e j conta com dois patrocinadores Pavilho promover o networking haver um coquetel e um conjunto de
Master: IBM e Oracle. Mais de mil participantes e a troca de conhecimentos entre os discusses informais, no estilo dos
so esperados e intenso o interesse de empresas participantes. Para maximizar essa in- antigos BOFs das primeiras edies do
em fazer parte do evento. terao, os intervalos entre palestras JavaOne.
As cerca de 40 de palestras tcnicas e geren- tero durao estendi- H ainda muitas sur-
ciais do Evento da Comunidade Java Brasileira da ser reservado pelo pre sas prometidas.
ser dividido em sete tracks : Java no ambiente menos meia hora para Acom panhe as ltimas
servidor, Java em Pequenos Dispositivos, Core cada coffee-break, com novidades no site
Java: Linguagem e APIs, Ferramentas, Solues e a possibilidade de intervalos maiores. Portanto, www.justjava.com.br, ou inscreva-se na lista de
Produtos; Casos de sucesso; Outras Tecnologias se voc rato de palestra e fica divido entre a notcias do evento, enviando um e-mail para
Relacionadas a Java (Jini, JXTA etc.); e Ossos do animao dos corredores e a aquisio de conhe- evento-justjava-subscribe@soujava.org.br.
Webhosting JavaServer Pages (JSP)/Servlets Securely Using open-source products BUS-1771 Renato Weiner (LocaWeb)
Automatic Internationalization using Web Services BOF-1205 Diueine Monteiro (Bluebox Technologies); Cludio Teixeira (Procwork)
Java Technology and Financial Systems Integration in Brazil BOF-1610 Diueine Monteiro e Carlos Villela (BlueBox Technologies)
Enterprise Java Technology-Based Projects that Fail: What Can We Learn from Them? BOF-1824 Michael Santos (Tesla Tecnologia)
Real-Time Human Motion Capture Using Java Technology BOF-2059 Nilton Guedes (Sun Microsystems do Brasil); Analvia Cordeiro (PUC-SP)
Java no De s
Parte 2: Toolkits, distrib u
N
a primeira parte deste artigo (In- muito comum encontrar sistemas nessa ses chamados toolkits so, na verdade,
terfaces, usurios e alternativas, situao centenas de pginas HTML que frameworks de desenvolvimento web
Edio 5) tratamos dos tipos de parecem mais descries do layout de uma que simulam, em uma aplicao baseada
usurios de uma aplicao e vimos como janela do que documentos; milhares de li- no browser, um toolkit de janelamento
diferenciar os usurios internet, intranet nhas de JavaScript, simulando funcionali- completo.
e extranet. Vimos tambm quais tecnolo- dades bsicas que encontramos em botes e Trabalhando, por trs, com servlets e JSPs,
gias nos permitem criar aplicaes locais campos de texto to comuns em aplicaes e com HTML e JavaScript pela frente, mas
(desktop) sofisticadas com a tecnologia locais; e em geral, uma grande confuso de forma componentizada e transparente
Java. para juntar essas duas coisas. para o desenvolvedor, os toolkits web per-
Mas existe muito mais em fornecer uma Tudo isso quase sempre feito para criar mitem que voc desenvolva uma aplicao
aplicao local do que apenas criar jane- uma aplicao local que no precisa ser web da mesma forma que desenvolve uma
las com o Swing. A tecnologia Java traz instalada. E num esforo de criar uma local. Em vez de criar servlets e tratar cha-
o suporte necessrio para a integrao aplicao-web-com-cara-de-local, esses madas e parmetros HTTP, permitem que
de clientes e servidores em uma soluo sistemas acabam num emaranhado de voc desenvolva aplicaes baseadas em
nica. Como distribuir e atualizar essas cdigo JavaScript difcil de manter, difcil eventos, como em aplicaes locais tpicas.
aplicaes? Mas como podemos distribuir de componentizar e, em particular, quase Ao invs de codificar e devolver pginas
essas aplicaes, e a prpria JVM? Vamos impossvel de portar para vrios browsers HTML cheias de cdigo JavaScript escri-
juntos conhecer as tecnologias que resol- (s vezes, at para verses diferentes de to mo, voc cria janelas, botes, abas,
vem essas questes. um mesmo browser). Procurando evitar a checkboxes, todos os componentes com
E o que fazer quando uma aplicao local instalao local da aplicao, esses sistemas os quais voc est acostumado em uma
no uma opo, mas sua aplicao tem muitas vezes tornam obrigatria a instala- aplicao local.
muito mais caractersticas de aplicao o de uma nova verso do browser, sob Assim, o cdigo de aplicaes web fica
local do que web? Vimos na primeira par- pena de excluir usurios. to similar a uma apli-
te que essas aplicaes so exigidas pelos E o pior, nem ao menos cao tradicional que,
nossos usurios intranet ou extranet, mas conseguem a interativi- Toolkits web permitem de- pelo menos no wingS
na prtica nem sempre temos a opo de dade desejada! senvolver aplicaes web da (um desses toolkits),
instalar algo local. Podemos ento comear Portanto se voc no mesma forma que locais, base- transform-las de local
por conhecer algumas solues Java que tem como evitar fazer ando-se em eventos, como em para web uma questo
nos ajudam nessa tarefa. uma aplicao baseada aplicaes locais tpicas de trocar Js por Ss
no browser, pelo menos (trocar por exemplo um
Toolkits web no caia na armadilha de JButton do Swing por um
Existem situaes nas quais voc precisa tentar simular uma aplicao local "na mar- SButton do WingS).
gerar interfaces sofisticadas, mas fica preso ra". Desenvolver uma aplicao baseada em Existem vrios desses toolkits, todos
ao browser, prefere no ter a interatividade servlets e JSP, mas com aparncia e interati- voltados para a criao de aplicaes com
de uma aplicao local, ou simplesmente vidade quase local, no uma tarefa fcil, aparncia, interao e modelo de desen-
no tem opo, por motivos fora do seu especialmente porque voc precisa simular volvimento de aplicaes locais, mas para
b uio e instalao
BRUNO SOUZA
serem executadas no ambiente web, sem servlets/JSP tradicional, voc usa apenas (onde as informaes do usurio no trafe-
nenhum tipo de plugin ou instalao. No um componente integrado. gam na rede, ou no so armazenadas fora
so perfeitos para todos os tipos de aplica- da mquina dele); desempenho (por mais
es e certamente no resolvem todos os Distribuio de aplicaes rpida que seja a rede, sempre queremos
problemas citados (afinal, continuam no Toda essa histria de interatividade pode mais velocidade). E, certamente, olhando
sendo uma aplicao local, mas sim uma parecer muito interessante no papel, mas suas aplicaes locais, voc vai encontrar
aplicao web, rodando no servidor), mas a realidade que de nada adianta ter uma outros motivos para us-las localmente ao
para quem no tem opo, pode ser uma aplicao interativa se for necessrio voltar invs de mant-las rodando sempre no
excelente opo! ao passado e ficar instalando aplicaes servidor.
Entre os mais sofisticados toolkits desse nas mquinas dos usurios. Relembrando, as aplicaes que precisam
tipo est o j citado wingS, que se posiciona Afinal, no foi para eliminar isso que a dessas funcionalidades so em geral para
como Swing na web; segue exatamente a web foi inventada? Bem, na verdade, no. o usurio intranet, aquele que usa a aplica-
mesma API do Swing (se voc um progra- A web foi inventada o sempre e quer algo
mador Swing, ir se surpreender ao se tor- para disponibilizar melhor, mais rpido,
nar, do dia para a noite, um programador documentos, no apli- A web foi criada para dis- menos repetitivo, mais
web). A aplicao de demonstrao desse caes. Se conseguimos ponibilizar documentos, no interativo, menos co-
toolkit, por exemplo, reproduz boa parte chegar aonde estamos aplicaes. Se conseguimos nectado, mais seguro.
das funcionalidades do demo do Swing. porque, como acontece chegar aonde estamos porque Se no o caso do sua
Outro toolkit que vale a pena ser inves- em muitos casos com foramos muito a barra aplicao, tudo bem.
tigado o Millstone. Ele possui uma API a tecnologia, foramos Se for, mesmo com os
prpria e no segue o Swing, mas suas muito a barra. Mas, toolkits web que citei,
funcionalidades so to impressionantes ainda assim, muitas aplicaes podem ser voc estar em maus lenis se tentar forar
quanto s do wingS. As customizaes encaradas como uma srie de documentos. uma aplicao com essas necessidades em
dos diversos componentes e a capacidade Essas aplicaes so parte importante do um ambiente web. E com certeza voc j
de serem executados mesmo em browsers mundo web e funcionam muito bem. viu isso acontecer, seja como usurio, seja
sem suporte a JavaScript (com um certo Mas e no caso de aplicaes precisam de como desenvolvedor. Em geral, aquela
prejuzo em relao apresentao, mas uma interatividade maior? Voc pode for- nova verso da aplicao que no tem
no s funcionalidades) fazem do Mills- ar a barra (mas nesse caso, no reinvente a as funcionalidades nem as facilidades que
tone um toolkit a ser analisado se voc roda use um toolkit web como os citados). seu usurio contava na verso antiga.
precisa elevar a inteligncia do browser, Mas porque no fazer o que o usurio est Mas o fato de uma aplicao rodar local-
nosso terminal burro colorido. realmente pedindo e desenvolver uma mente, no significa que no possa tirar
Se voc precisa de uma aplicao com aplicao local? proveito da rede! Se temos a rede, podemos
mais cara de aplicao web mesmo, tal- Alm de apresentar interatividade com o fazer o processo de instalao automtico;
vez queira dar uma olhada no Tapestry, usurio muito melhor, existem diversas ra- assim, seu usurio faz tudo integrado ao
um framework mais tradicional, voltado zes para termos aplicaes locais mani- browser. Ser que isso tambm no um
para a gerao de HTML. Mas, em vez pulao visual de elementos grficos (gr- tipo de aplicao web?
voc ter que lidar com a integrao de ficos, diagramas, imagens); processamento
JavaScript com seus servlets, o Tapestry distribudo (onde queremos que algumas Applets e Java Web Start
fornece a noo de componentes que inte- coisas no rodem no servidor); cache local Com o browser HotJava, a tecnologia Java
gram os lados servidor (servlets) e cliente de informaes (para acelerar o acesso); uso introduziu, em 1995, a noo de aplicaes
(HTML+JavaScript) em um componente desconectado da aplicao (nem sempre d carregadas automaticamente via rede: os
reutilizvel. Assim, ao invs de ficar se pra contar com a rede); replicao de infor- applets Java. Foi uma revoluo. Por causa
debatendo para juntar as duas coisas maes (tanto para velocidade, como para desse conceito, que hoje parece simples, a
froa, como em um desenvolvimento de diminuir a carga no servidor); segurana web ganhou uma nova expresso e a tecno-
logia Java foi parar em todos os jornais. um futuro prximo. tem uma aplicao local que, a partir da
Muitos desenvolvedores Java de hoje O funcionamento do JWS simples e segunda execuo, inicializa imediata-
desconsideram applets como uma soluo afeta muito pouco o trabalho de desenvol- mente (sem download), completamente
vivel para a distribuio de aplicaes, vimento de uma aplicao. Basicamente, interativa, pode funcionar desconectada da
parte disso graas ao esforo que a Micro- uma aplicao gerenciada pelo JWS rede e tirar proveito de todas as vantagens
soft fez para destruir ao mesmo tempo Java automaticamente baixada e instalada lo- da execuo local.
e a Netscape. calmente, na primeira vez que o usurio a Se voc considerar o usurio intranet e o
A Justia norte-americana exps os deta- utiliza. Para instalar a aplicao, o usurio usurio extranet, que usam a aplicao dia-
lhes srdidos e declarou precisa apenas clicar em riamente, o JWS permite que voc fornea a
que essa tentativa foi um um link. A partir da, a aplicao com as funcionalidades que eles
No tente simular uma aplica-
esforo premeditado e aplicao fica em uma precisam: verdadeiramente multiplatafor-
ilegal. Se voc daque-
o local: fornea a aplicao espcie de cache local ma, independente da verso de browser e
les que ouviu dizer que local que seu usurio precisa, e no precisa mais ser livre de milhares de linhas de JavaScript
a Microsoft melhorou mas com as vantagens de uma baixada. A cada execu- (praticamente impossveis de manter). No
a mquina virtual Java, aplicao web o da aplicao, o JWS tente simular uma aplicao local, fornea
sugiro que leia o proces- verifica se necessrio a aplicao local que seu usurio precisa,
so para ver o que eles tentaram fazer com baixar uma nova verso e, caso positivo, mas com as vantagens de uma aplicao
a sua liberdade de escolha jogar no lixo, carrega apenas as diferenas entre a verso web.
como fizeram ao lanar o .NET e de que atual e a nova. Uma vez instalada localmen-
forma eles prejudicaram a JVM. Juntamente te, a aplicao pode ser executada a partir Instaladores
com o grande prejuzo causado aos usu- do browser, ou inicializada a partir de um A criao de instaladores outra pos-
rios em diversas reas, no que diz respeito cone no desktop do usurio, sem qualquer sibilidade para distribuir de aplicaes
a Java tivemos uma estagnao das JVMs dependncia do browser. Java e permitir seu uso em um ambiente
existentes nos browsers, o que afastou os O JWS tambm pode fazer uma atualiza- no necessariamente web. O mais conhe-
desenvolvedores dos applets, exatamente a o automtica da mquina virtual: se sua cido gerador de instaladores e votado o
tecnologia que causou uma das mais revo- aplicao solicitar uma verso especfica da melhor pela comunidade Java o Ins-
lucionrias mudanas de mentalidade no JVM que no esteja disponvel, ela au- tallAnywhere da ZeroG. Suporta vrios
desenvolvimento de aplicaes... tomaticamente baixada e instalada. Alm tipos de instalao e capaz de gerar
Por outro lado, outra parte da culpa recai disso, vrias verses da JVM podem co- instaladores nativos (.exe, .rpm etc.), auto-
sobre ns mesmos desenvolvedores Java, existir em uma mesma mquina. instalar a JVM e realizar a instalao dire-
que, como vimos, decidimos nos refugiar No Windows, se na primeira vez que ten- tamente da web, alm de suportar outras
na utilizao da interface web. Desde a tar executar a aplicao no for encontrado funcionalidades e configuraes teis na
verso 1.2 da tecnologia Java que temos o JWS ou no houver uma mquina virtu- distribuio de aplicaes Java.
primeiro com o Java Plugin e, mais al instalada, o download e a instalao de O InstallAnywere possui uma verso
recentemente, com o Java Web Start as ambos acontecer automaticamente, sem gratuita, o InstallAnywhere Now! , que
ferramentas que precisamos para distribuir a necessidade de interao do usurio. E suporta as funcionalidades bsicas de um
aplicaes Java para qualquer browser, o download da JVM pode ser feito a partir instalador e pode ser utilizada comercial-
mesmo as verses mais antigas. Conhe- de um servidor na sua mente. Com essa ver-
cendo e utilizando o que j temos h tanto prpria rede local, o que so, desenvolvedores
tempo, podemos nos libertar da priso do torna o JWS uma solu- Uma aplicao gerenciada pelo Java no tm desculpa
browser, e em grande estilo. o muito eficiente para Java Web Start automati- de no fornecer uma
O Java Web Start (JWS) uma soluo aplicaes internas. camente baixada e instalada aplicao local fcil
completa de distribuio, atualizao e O Java Web Start pos- localmente. Para fazer a insta- de instalar para seus
gerenciamento de aplicaes. Gratuito, faz sui outras caractersti- lao basta clicar em um link usurios.
parte do Java Runtime Environment (JRE) e cas que esto definidas A ZeroG oferece tam-
instalado automaticamente quando ins- na especificao do Java bm o PowerUpdate,
talada a plataforma Java (1.4.x em diante). Network Launching Protocol (JNLP), uma espcie de concorrente do Java Web
No caso do MacOS X e do Solaris, o JWS j que trata do download e da instalao de Start, que permite atualizar aplicaes
faz parte da instalao do prprio sistema aplicaes atravs da rede veja o quadro automaticamente pela internet. Apesar de
operacional, e pelo menos quatro distri- JNLP. possuir funcionalidades adicionais interes-
buies Linux incluem o JRE contendo o Portanto, utilizando o JWS voc passa a santes, como o registro do uso da aplicao
JWS. Por conta de uma deciso recente da ter as vantagens de uma aplicao web, com (para eventuais cobranas), o PowerUpdate
justia americana, que considerou a Micro- integrao com o browser e acesso via link no gratuito.
soft culpada de aes monopolistas contra no site, sem a necessidade de ter a aplicao
a tecnologia Java, at mesmo possvel que instalada localmente, e acessando a ltima O .NET morde?
o JWS passe a fazer parte do Windows, em verso disponvel. Ao mesmo tempo, voc Muito se tem falado da disputa entre o
JNLP
necer clientes diferentes para uma mesma consultores, gerentes tcnicos e diretores for? J que j ganhamos a fama de ser o
aplicao de servidor. Com essa especifica- de tecnologia o entendimento do que pas da pirataria, vamos piratear algo
o que j est disponvel e possui uma possvel fazer, alm da capacidade de que gratuito, e colocar Java em todos os
implementao de referncia voc pode mostrar o melhor caminho. lugares.
disponibilizar o mesmo backend para v- E, se para isso necessrio fazer um do- Como desenvolvedores Java, temos
rias aplicaes clientes, e o seu servidor de wnload de alguns megabytes da mquina condies de dar aos nossos usurios as
aplicaes ir escolher a interface adequa- virtual, uma nica vez, dentro de nossas aplicaes que eles precisam. No existe
da, dependendo da forma que seu usurio redes internas, vamos fazer! Na verdade, problema nenhum em disponibilizar uma
acessa a aplicao. O usurio recebe uma que tal j aproveitar e levar a JVM em um aplicao web para os usurios espordicos;
aplicao local atravs do Java Web Start se CD e instalar em todos os lugares que voc apenas no fuja de fornecer uma aplicao
estiver utilizando um ambiente de desktop, sofisticada para o seu usurio intranet. Ou
java.sun.com/products/javawebstart ele quem vai fugir de voc!
ou uma aplicao MIDP se estiver em um
Java Web Start e JNLP
celular, ou ainda uma interface web se esti-
ver em um browser. Alm disso, possvel java.sun.com/j2ee/provisioning
programar e expandir seu servidor para J2EE Client Provisioning
suportar outros tipos de interfaces.
wings.mercatis.de
Assim, a tecnologia Java mais uma vez
WingS
est anos luz na frente, porque, em vez de
tentar forar o que algum acha melhor millstone.org
para voc, fornece o suporte e as tecnolo- Millstone
gias adequadas para voc escolher o que tapestry.sourceforge.net
precisa. Tapestry
Bruno F. Souza, o JavaMan (bruno.souza@javaman.
E agora? www.zerog.com com.br), veterano da tecnologia Java e um dos
Nossas equipes de marketing dizem que ZeroG lderes do movimento Java no Brasil. fundador da
querem aplicaes web, mas esto apenas www.jgoodies.com Sociedade de Usurios Java (SouJava) e membro do Java
repetindo o que ouviram falar ou leram em Community Process.
Exemplos de aplicaes Swing
jornais. Mas cabe a ns desenvolvedores,
Tomcat fu
Arquitetura, instalao e
A
Apache Foundation foi formada verso 4.0, o Tomcat implementa no s as res web ou servidores de aplicao J2EE. O
em torno da comunidade de especificaes de servlets conector HTTP (Coyote)
desenvolvedores e usurios do e JSP, mas tambm todas escrito inteiramente em
Apache, o servidor web mais popular da as exigncias para con- Java e parte da distri-
O Tomcat nasceu quando a
internet (tanto acadmica como comercial) tainers web definidas nas buio do Tomcat. Este
e se tornou um guarda-chuva para dezenas
Sun doou Apache Founda-
especificaes do J2EE. conector efetivamente
de projetos de software livre relacionados Futuros requisitos dessas
tion o cdigo inacabado da transforma o Tomcat em
com contedo web, em especial os rela- especificaes costumam implementao de refern- um servidor web e pode
cionados com gerao de sites dinmicos ser implementadas ante- cia de servlets 2.1 e JSP 1.1 ser configurado para
a partir de lgica de negcios hospedada cipadamente no Tomcat, suportar outros recur-
no servidor. tais como o suporte a JMX sos de um servidor web
Talvez o mais bem-sucedido desses (que s ser obrigatrio nas especificaes padro, como a execuo de programas
projetos seja o Jakarta, voltado para tec- de servlets 2.4 e J2EE 1.4). CGI e interpretao de SSI (Server-Side In-
nologias Java no servidor. O Jakarta foi cludes). Outros conectores, como o mod_jk
iniciado quando o Java ainda estava em Arquitetura do Tomcat e mod_jk2, devem ser instalados separa-
sua infncia, por isso esse projeto precisou Nosso foco neste artigo o Tomcat 4.x, a damente e permitem integrar o Tomcat aos
desenvolver uma srie de tecnologias de atual srie estvel. A verso 4.x possui trs servidores Apache, IIS e Netscape/iPlanet.
infra-estrutura cuja aplicao vai alm de componentes principais: Mais adiante, veremos em que situaes
aplicaes web, como o Ant (apresentado Catalina a segunda gerao de con- esta integrao desejvel.
na Edio 2). tainer web fornecida pelo Tomcat, que deu O Tomcat tambm utiliza vrios outros
O Tomcat nasceu quando a Sun decidiu origem srie 4.x e continua evoluindo no pacotes desenvolvidos pelo projeto Jakarta
doar ao projeto Jakarta, e Apache Foun- 5.x. Sua funo gerenciar o ciclo de vida e pela Apache Foundation, como o Xerces,
dation, o cdigo (inacabado) da implemen- dos servlets, decidindo quando gerar no- para o processamento dos arquivos de
tao de referncia da especificao 2.1 de vas instncias ou quando descart-las para configurao em XML.
servlets e 1.1 de JavaServer Pages (JSP). Esse poupar memria. O Catalina tambm o
foi um movimento sbio da empresa: em responsvel por mapear URLs para servlets Tomcat x servidores web
vez de prosseguir no desenvolvimento de e por devolver o documento gerado (em Muitos desenvolvedores e administra-
uma implementao de referncia capen- geral uma pgina HTML) para o navega- dores de rede perguntam: necessrio
ga para uma API crucial ao sucesso da dor. Note, entretanto, que o Catalina no configurar um servidor web para rodar o
plataforma Java, colaborar com a comuni- interage diretamente com o navegador ou Tomcat?. A resposta inicialmente no,
dade de usurios e desenvolvedores para com o servidor web que requisita a URL; pois o Tomcat capaz de fornecer pginas
construir uma implementao robusta, em vez disso, deve ser configurado um HTML estticas e outros tipos de documen-
pronta para produo e liberada como conector para realizar esta interao. tos, como imagens PNG e JPEG ou vdeos,
software livre. Assim toda a comunidade Jasper um servlet padro que pode desde que eles sejam empacotados no
pde se beneficiar. ser instalado em qualquer container web formato WAR.
Desde ento, o Tomcat vem sendo incor- aderente especificao 2.2 de servlets. Por outro lado, o Tomcat otimizado
e configurao
FERNANDO LOZANO
apenas para lidar com os componentes fazem uso de EJBs e que no necessitam, ou sesses HTTP hospedadas neste servidor
Java, e suas capacidades como servidor no utilizam de modo adequado, os recur- sero perdidas, gerando efeitos como a per-
web so limitadas. Ele no suporta outras sos de clustering destes servidores. da de cestas de compras em sites de comr-
linguagens de servidor (PHP, Zope, ASP, A srie 4.1.x do Tomcat suporta todas as cio eletrnico, enquanto que um servidor
Cold Fusion etc.), e no fornece esquemas caractersticas previstas para containers J2EE completo ser capaz de replicar estas
elaborados de cache de contedo ou ou- web J2EE, como um pool de conexes JDBC sesses em memria, evitando a perda de
tros recursos presentes em servidores web e a localizao de recursos via JNDI (Java informaes das sesses dos visitantes.
topo-de-linha como o Apache. Tambm Naming and Directory Interface), de modo possvel configurar o Tomcat para ar-
tem desempenho inferior maioria dos que no h necessidade de um servidor mazenar as informaes de sesses HTTP
outros servidores web do mercado no for- de aplicaes J2EE completo para desen- em um banco de dados relacional e utilizar
necimento de contedo esttico (imagens volver aplicaes web avanadas. Mesmo os recursos deste banco para tolerncia a
e pginas HTML). que seja necessrio interagir com servios falhas, mas o overhead desta soluo
Por isso comum configurar o Tomcat fornecidos por EJBs, basta incluir as classes excessivo, comprometendo o desempenho
como subordinado a um servidor web na- de cliente do seu servidor de aplicaes no das aplicaes. Por isso a maioria dos servi-
tivo (seja hospedado no mesmo host ou em diretrio WEB-INF/lib do pacote WAR en- dores J2EE opta pela replicao das sesses
um n separado da rede), mas possvel tregue para deployment no Tomcat. diretamente entre os containers web.
configurar um ambiente de desenvolvi- Separar aplicaes web no Tomcat dos Podemos, por exemplo, configurar um
mento perfeitamente funcional utilizando EJBs em outro servidor de aplicaes pode servidor JBoss sem os servios de EJB e
apenas o Tomcat, sem a necessidade de ter vrias vantagens com relao distri- JMS, de modo a rodar apenas o Tomcat
qualquer software adicional. buio de carga e economia de licenas. incluso em sua distribuio junto com e
Outra situao onde interessante in- Provavelmente o Tomcat ser mais rpido os servios de suporte a clustering. Assim
tegrar um servidor web ao Tomcat na do que seu servidor de aplicaes para ro- obtemos as vantagens de um ambiente
construo de uma fazenda de servido- dar servlets e pginas JSP, devido ao me- mais leve e baseado em software livre,
res (server farm) para atender a um nico nor overhead, mesmo porque muitos dos sem abrir mo da tolerncia a falhas.
conjunto de aplicaes web, ganhando em servidores J2EE comerciais
escalabilidade. Alguns conectores do Tom- utilizam o prprio Tomcat Tomcat e especificaes
cat, como o mod_jk e sua verso aprimorada como container web.
mod_jk2 permitem utilizar o Apache e ou-
tros servidores web como balanceadores de
Alguns servidores J2EE
agregam ao Tomcat um re- H duas verses atualmente suportadas do Tomcat
(sries 3 e 4), alm da srie 5 ainda em desen-
volvimento. Todas elas continuam sendo ativamente
carga, com suporte a recursos avanados curso que no est presente
como session affinity, mas sem recursos nele isoladamente: o suporte suportadas (incluindo correes de bugs e melhorias
robustos de tolerncia a falhas. a clustering com tolerncia de desempenho), pois aplicaes em produo podem
a falhas. Como vimos na exigir verses diferentes das especificaes, que nem
Tomcat x servidores J2EE comparao com servidores sempre so compatveis retroativamente.
H duas situaes onde o Tomcat sozinho web, a natureza sem-estado A tabela abaixo indica a correspondncia entre as
no ser suficiente, mas ser necessrio uti- (stateless) do protocolo HTTP verses do Tomcat, de servlets e de JSP:
lizar um servidor J2EE completo: torna possvel atender a
Suporte a EJBs ou JMS muitas aplicaes web uti- Srie/Verso do Tomcat Verso de servlets/JSP
Necessidade de clusters com tolerncia lizando apenas servidores
3.x (3.3.1) 2.2/1.1
a falhas Tomcat espelho, que no
Muitas empresas desenvolveram o hbito interagem entre si, bastando 4.0.x (4.0.6) 2.3/1.2 ou 2.2/1.1
pouco recomendado de adquirir e configu- acrescentar um balanceador 4.1.x (4.1.18) 2.3/1.2
rar servidores J2EE completos apenas para de carga. Caso um dos ns do 5.x (5.0.0 Alpha) 2.4/2.0
hospedar aplicaes web simples, que no Tomcat fique indisponvel, as
Conectivida d
Interoperabilidade com s
U
m recurso crtico para aplicaes da, com uma alta latncia de rede o grande Implementao de HTTPS todo dis-
MIDP a comunicao com tempo de resposta pode tornar-se inaceit- positivo MIDP 2 deve ter suporte a HT-
servios residentes em servi- vel para o usurio. TPS (no MIDP 1, isso era
dores. Neste artigo, sero mostrados os importante destacar que opcional). O GCF no MIDP
Na rede celular, fatores
recursos de conectividade existentes no a rede de uma operadora de
telefonia celular bastante
como a cobertura de sinal, 2 tambm disponibiliza
CLDC/MIDP usando o Generic Connection suporte a conexes TLS,
Framework (GCF) e as situaes em que diferente de uma rede grandes taxas de erro SSL e WAP/TLS (interfa-
cada recurso se aplica, cobrindo protocolos TCP/IP convencional (a e alta latncia exigem ce SecureConnection), alm
e formatos de dados, alm de boas prticas que usamos normalmente tratamento diferenciado do suporte a certificados
e tcnicas de otimizao. para acessar a internet em pelos protocolos para a autenticao de
casa e no trabalho). Na rede conexes seguras (pacote
MIDP e a internet da operadora, os protocolos tm de ser im- javax.microedition.pki);
Aplicaes para internet geralmente tm plementados usando tecnologias de trans- Suporte tecnologia push pode-se
funcionalidades de pesquisa e envio de misso wireless, passando por satlites e registrar aplicaes MIDP para responder
mensagens interagindo com servios lo- antenas. Fatores como a cobertura de sinal, a eventos de conectividade, mesmo que a
calizados em outras mquinas. As mesmas reas de sombra, grandes taxas de erro e mquina virtual Java no esteja ativa; por
funcionalidades tambm so importantes alta latncia exigem tratamento diferencia- exemplo, um MIDlet pode ser invocado ao
em aplicaes para telefones celulares e ou- do pelos protocolos de comunicao. Em receber uma notificao originada de uma
tros dispositivos com suporte a J2ME. No redes de telefonia celular, existem vrias URL registrada anteriormente;
meio wireless, isso envolve fatores como maneiras de realizar o trfego de dados. As Suporte obrigatrio a OTA (Over The
a escolha de protocolos de comunicao, principais so: CSD (Circuit-Switched Data), Air) pode-se realizar o download de apli-
formatos de dados, largura de banda e GPRS (General Packet Radio Service), CDPD caes MIDP (usando WAP) para o telefone
latncia de rede. (Cellular Digital Packet Data) e HSCSD (High- atravs da rede wireless.
A latncia de rede determinada pelo Speed Circuit-Switched Data). Veja a seguir alguns exemplos de cone-
tempo transcorrido desde o incio de uma xes com o GCF.
transmisso a partir da origem at o incio O Generic Connection Framework HTTP:
do seu recebimento pelo destino. Em alguns O Generic Connection Framework (GCF) HttpConnection c1 = (HttpConnection) Connector.open(
casos, como na comunicao via satlites, a API J2ME padro para conectividade. http://www.jm.com.br?ed=5&imp=1);
a latncia pode ser maior do que o tempo Oferece suporte a vrios protocolos de co- TCP (Sockets):
gasto na transmisso da mensagem. J a municao, entre eles HTTP/HTTPS, TCP, StreamConnection c2 = (StreamConnection) Connector.open(
largura de banda pode ser definida como UDP, serial, e infravermelho, sem no entan- socket://192.168.7.3:7070);
a quantidade de informao que pode ser to se ater a implementaes especficas.
Serial:
transmitida em uma nica conexo, j es- O GCF reside no pacote javax.microedition.io.
InputConnection c3 = (InputConnection) Connector.open(
tabelecida, por unidade de tempo. No MIDP 1, o framework inclui a classe
comm:0;baudrate=9600, Connector.READ);
Para aplicaes MIDP, a caracterstica da Connector e nove interfaces: Connection,
rede mais importante a baixa latncia. Con tentConnection, Datagram, HttpConnection , Como se pode deduzir a partir dos exem-
plos, a URL passada como argumento obe- quer implementao de CLDC/MIDP antes da conexo ao servidor.
dece ao seguinte esquema: o HTTP, mas alguns fornecedores (como Uma conexo HTTP (representada por
<protocolo>:<endereo>;<parmetros> Nokia, Motorola, Siemens, IBM-J9, Jeode, um objeto do tipo HttpConnection) pode estar
Symbian, Sony-Ericsson e HP) implemen- em trs estados: setup (configurao), em
Essa URL utilizada pela classe Connector tam protocolos adicionais, por exemplo que a conexo ainda no est estabelecida
para criar os objetos implementadores TCP, HTTPS, infravermelho e UDP. Apesar com o servidor e podem ser definidos os
da interface Connection especializados no de o MIDP 2 j definir interfaces para cone- parmetros da solicitao; connected, no
protocolo especificado. Os parmetros xes seriais (CommSerial), SSL/TLS (SecureCon- qual a conexo com o servidor est ativa,
especificados depois do ponto-e-vrgula nection) e sockets no lado do servidor (Ser- os parmetros da solicitao foram envia-
so consumidos pelo objeto xxxConnection verSocketConnection), a implementao desses dos e uma resposta aguardada; e closed,
especfico. protocolos continua sendo opcional. onde o servidor j enviou mensagens para
As implementaes do Generic Connec- O protocolo HTTP bastante fcil em o cliente e fechou a conexo. Observe que
tion Framework seguem uma nomencla- comparao com os outros, pois trafegam depois de entrar no estado closed, qualquer
tura de pacotes padro, para simplificar o apenas mensagens textuais no h troca tentativa de reuso da conexo provocar
carregamento dinmico de classes. O nome de dados em formato binrio. E as requi- uma IOException.
do protocolo includo no nome da classe, sies e respostas podem ser entendidas Os parmetros HTTP devem ser confi-
que instanciada utilizando reflection. No por pessoas, sem que antes precisem passar gurados no estado de configurao. So
caso da implementao de referncia da por um parser. cabealhos HTTP como: User-Agent e
Sun (o J2ME Wireless Toolkit), o nome da A interface HttpConnection do GCF trata Content-Type. Observe o exemplo na
classe para o protocolo HTTP com.sun.cldc da comunicao com um servidor HTTP Listagem 1.
.io.j2me.http.Protocol.class. e possui algumas peculiaridades, por se Vamos discutir alguns pontos do cdigo.
O mtodo open possui mais trs verses, tratar de um protocolo de requisio/ Esteja atento para pequenos detalhes que
duas delas apresentadas nos exemplos resposta (request/response) sem estado, em no mundo J2SE/J2EE no fazem muita dife-
anteriores: open (String), open (String , int) e que devem ser configurados parmetros rena, mas no J2ME importam muito.
open (String, int, boolean). O argumento in-
teiro determina o modo de acesso: leitura Cabealhos HTTP
(READ), escrita (WRITE) ou leitura/escrita
(READ_WRITE) este ltimo o padro. O User-Agent Informa o tipo de cliente que est se conectando ao servidor HTTP
argumento booleano ativa um tempori-
Indica o formato do contedo enviado alm da URL e deve ter a codificao
zador (timer) interno da implementao Content-type x-www-form-urlencoded para mtodo POST, a no ser que sejam enviados
com isso uma exceo ser lanada caso arquivos anexados no padro MIME
o tempo transcorrido no estabelecimento
Indica o tamanho dos dados enviados, especialmente no caso de dados
da conexo seja excessivo. Content-length
binrios
Nos prximos exemplos enfatizamos os
conectores baseados em HTTP (HttpConnec- Utilizado quando uma aplicao MIDP ser instalada por OTA. O servidor
tion e ContentConnection). A implementao de usa esses cabealhos junto com User-agent para saber qual a verso do
Accept-Language
CLDC/MIDP e o idioma/pas suportados pelo dispositivo, fazendo que uma
HTTP pode ser diretamente sobre a rede
aplicao customizada possa ser instalada automaticamente.
de telefonia celular ou atravs de gateways
(assim como em WAP). A implementao Indica se a conexo com o cliente deve ser reutilizada entre vrias requisies
dos demais protocolos previstos pela espe- (tambm conhecida como conexo persistente ou keep-alive). Caso contr-
cificao opcional. rio, o servidor fecha a conexo ao fim de cada resposta enviada ao cliente.
Connection
Com conexes persistentes, se vrias conexes ao mesmo servidor forem
estabelecidas em um breve espao de tempo, haver ganhos de tempo e de
Protocolos e HttpConnection bateria caso a conexo seja reutilizada.
O nico protocolo obrigatrio em qual-
de dados no so operaes rpidas, pois, possam ser executadas de uma s vez em cessrios esto disponveis se servidores
como visto anteriormente, a rede pode ter apenas uma conexo de rede. esto ativos e funcionando corretamente ou
baixa largura de banda ou alta latncia. se existe espao suficiente no dispositivo.
Com nossos equipamentos mveis e pes-
Uso de servio de proxy
Assim o usurio no perde tempo aguar-
soais, no temos muita disposio para es- Freqentemente necessrio extrair dando por uma operao que no poder
perar por operaes demoradas. No mundo dados de documentos HTML/XML for- ser finalizada.
wireless, no incomum situaes em que necidos por servios sobre os quais no
o usurio desista de uma transao banc- temos controle. Essas so operaes de Concluses
ria se houver uma demora maior que dez alto custo para o dispositivo, mas podemos A construo de aplicaes MIDP envolve
segundos, por exemplo. J no desktop, es- usar um servidor sob nosso controle para consideraes que no so necessrias em
tamos acostumados a esperas mais longas efetuar previamente a extrao dos dados aplicaes desktop ou de servidor. Mas, to-
e quase nem percebemos as demoras. e deix-los em um formato mais leve para mando alguns cuidados, podemos garantir
No caso de operaes de longa durao a aplicao MIDP. ao usurio uma experincia agradvel.
que usem conectividade, importante co- Outra situao ocorre quando a aplica-
locar a operao de conexo em uma thre- o MIDP consulta um servio que retorna
ad separada e notificar o usurio (usando uma grande quantidade de dados. Pode-
uma barra de status ou caixa de dilogo, mos delegar a consulta para um servio
por exemplo), de que a operao foi con- de proxy do MIDP, localizado em outro java.sun.com/products/cldc
cluda. Isso normalmente ocorre quando servidor sob nosso controle, que quebre Connected Limited Device Configuration (CLDC)
os dados em pedaos mais adequados aos
uma conexo efetuada para buscar dados java.sun.com/products/midp
recursos limitados do dispositivo.
em servidores e escrever registros usando Mobile Information Device Profile (MIDP)
RMS Record Management System. Indicador de operaes demoradas
Alm disso, evite criar mais que duas www.ietf.org/rfc/rfc2616.txt
importante que, para tarefas que no
threads nos seus aplicativos para no exi- Hypertext Transfer Protocol (HTTP) 1.1
sejam instantneas (com durao de, diga-
gir muito do dispositivo, mesmo porque mos, mais que 3 segundos), seja mostrado www.ietf.org/rfc/rfc768.txt
algumas implementaes da JVM tm um indicador de que a operao esteja em User Datagram Protocol (UDP)
restries quanto ao nmero de threads processamento e no travou ou foi cance- www.ietf.org/rfc/rfc2246.txt
ativas concorrentemente. lada. O indicador pode ser atualizado com Transport Layer Security (TLS) 1.0
base na porcentagem efetuada da tarefa, ou
Minimizao de conexes de rede
em nmeros que indiquem a quantidade www.javamagazine.com.br/downloads
No ciclo de vida de uma aplicao que
processada com relao ao total (por exem- /jm6/jm6-cmiranda-j2me.zip
necessite se conectar com servidores em plo, 20 de 135), ou ainda um aviso grfico
uma operao do usurio (por exemplo, de progresso como o Gauge do MIDP.
uma consulta fatura de um carto de
crdito) quantas conexes so necessrias Testes de disponibilidade Cludio Miranda (claudio.miranda@uol.com.br),
para chegar ao resultado final? Podemos Antes da aplicao MIDP ser disponibi- consultor da Summa Technologies, certificado em
minimizar as operaes de rede em proces- lizada para o usurio, conveniente que a Java, palestrante em vrios eventos sobre a tecnolo-
aplicao possa verificar se os recursos ne- gia e moderador da lista J2ME do SouJava.
sos batch, fazendo com que vrias tarefas
Novidades
Expressividade e abstra
A
prxima verso do J2EE 1.4 com distribudo com o J2EE Tutorial Addendum.
lanamento previsto para o meio No exemplo, o objeto representado pela cha-
O exemplo roda na verso beta da imple-
desse ano inclui uma srie de no- ve "book" procurado num dos possveis
mentao de referncia do J2EE 1.4 veja
vidades, como o suporte a web services, o contextos (page, request, session ou application).
no quadro Primeiros passos como fazer
EJB 2.1, JMX, Deployment API, Servlets 2.4 O analisador de expresses ento traduz o
a instalao.
e JSP 2.0 (para uma viso geral das novida- operador . (ponto) em mtodos getXXX
A aplicao consiste numa livraria on-line
des do J2EE 1.4, veja o primeiro artigo desta onde XXX o nome da propriedade na
com as funcionalidades de exibir a lista de
coluna, na Edio 1). expresso e navega na hierarquia de ob-
livros disponveis, detalhar um determina-
Nesta edio, vamos explorar com de- jetos usando introspeco.
do livro, adicionar livros cesta de compras
talhes as novidades do JSP 2.0 e apontar Para manipular objetos dessa forma
e finalizar um pedido. A Figura 1 mostra
algumas boas prticas para o uso dos novos preciso seguir o padro JavaBeans, ou seja,
a listagem dos livros disponveis, gerada
recursos. os objetos devem ser definidos em classes
pela pgina bookcatalog.jsp.
com um construtor vazio e mtodos get e set
Facilidade de programao para leitura e escrita dos atributos.
Linguagem de expresses
O objetivo principal da nova especificao Para o acesso a atributos de objetos
A linguagem de expresses (Expression
JSP melhorar a legibilidade do cdigo e e elementos de listas, a linguagem de
Language EL) melhora bastante a sintaxe
expresses defi ne dois operadores: . e
do JSP, aumentando o nvel de
[] (colchetes). Os dois tm aplicaes
abstrao dos comandos. Um
semelhantes, porm [] permite o uso de
container web do novo J2EE 1.4
variveis como argumentos. Usando esse
inclui um analisador de expres-
operador, o exemplo anterior poderia ser
ses. As expresses podem ser
escrito da seguinte maneira:
usadas em qualquer lugar da
pgina misturadas ao cdigo Preo: ${book[price]}
HTML ou em atributos de tags
Porm, o uso mais indicado para os col-
exceto em scriptlets (cdigo
chetes no acesso a listas indexadas. Por
Java dentro da pgina JSP).
exemplo, imagine que exista um atributo
Por exemplo, imagine que
chamado allBooks no request, contendo uma
precisamos exibir o preo de
coleo de BookDetails do tipo java.util.ArrayList.
um determinado livro. Va-
O preo do primeiro livro da lista poderia
mos supor que um objeto da
ser lido dessa forma:
classe database.BookDetails (que
representa a entidade Livro) Preo: ${allBooks[0].price}
passado para o JSP como um
atributo do request. At o JSP 1.2, J no caso dos livros estarem armazena-
o preo do livro poderia ser exi- dos num java.util.Map, o preo do livro com
Figura 1. Exemplo BookStore: livros disponveis (lista reduzida) bido da seguinte forma: chave 001 poderia ser lido assim:
pode conter cdigo HTML, expresses conter chamadas a outras tags e expres- mento. Observe tambm na listagem o uso
(em EL) e chamadas a outras tags. A di- ses; a nica restrio no poder usar das aes <jsp:invoke> e <jsp:param>.
ferena est na declarao dos atributos scriptlets.
recebidos e nas variveis utilizadas, que No exemplo da Listagem 2, podemos ver Configuraes globais
devem ser especificados no cabealho do um trecho do JSP bookcatalog.jsp, que chama Com as configuraes globais (Global Con-
arquivo. Observe as declaraes sendo fei- a tag <sc:catalog> passando dois atributos figurations) possvel definir propriedades
tas com o uso das diretivas <%@ atributo %> que so trechos de cdigo JSP. Nesse caso, para um conjunto de JSPs. As opes de
e <%@ varivel %> na Listagem 1. a tag chamada decide qual trecho ser configurao so avaliao de expresses
executado dependendo do livro estar ou da EL, execuo de scriptlets, definio da
Fragmentos no em promoo. codificao da pgina (encoding) e incluso
Fragmentos (JSP fragments) so pores Os fragmentos passados como argu- de cabealho e rodap.
de cdigo JSP escritas para serem reusadas mentos tambm podem conter variveis As configuraes so descritas no
dentro de uma aplicao. Por conveno, a serem preenchidas pela tag chamada. descritor web (web.xml) dentro do
fragmentos devem ser salvos em arquivos As variveis so declaradas na forma elemento <jsp-config>, usando elemen-
com terminao .jspf. Esses arquivos devem ${varivel}, como ${origPrice} e ${salePrice} usa- tos <jsp-property-group>. O exemplo da
ser includos em outros JSPs usando o co- das no exemplo. Esse recurso acrescenta Listagem 3 faz a incluso de um cabe-
mando include do JSP. Fragmentos tambm s tags o poder de manipular o fragmento alho e um rodap em todas as JSPs da
podem ser passados como atributos de sem muito esforo de codificao, pois as aplicao.
tags, na forma de pores de cdigo JSP variveis podem receber valores atravs de
(usando a nova ao jsp:attribute) e podem parmetros passados na execuo do frag- JSTL
A JSP Standard Tag Library (JSTL) foi
lanada em julho de 2002 e compatvel
Listagem 1. Exemplo de Tag File com a verso 1.3 do J2EE; no J2EE 1.4 j
<!-- Declara a utilizao de outras bibliotecas --> includa como parte da plataforma. A
<%@ taglib uri=/jstl-c prefix=c %> JSTL contm uma srie de tags bastante
<%@ taglib uri=/jstl-fmt prefix=fmt %>
teis na programao JSP, divididas em
<!-- Declara os atributos recebidos --> quatro bibliotecas:
<%@ attribute name=bookDB required=true
rtexprvalue=true type=database.BookDB %> Ncleo (Core) contm tags usadas para
<%@ attribute name=color required=true %> controlar o fluxo da pgina e a sada de
<!-- Declara um atributo do tipo fragment (que pode ser executado) --> mensagens;
<%@ attribute name=normalPrice fragment=true %> Processamento XML (XML Processing)
<!-- Declara o uso de uma varivel -->
<%@ variable fragment=normalPrice name-given=price %> tags utilitrias para processamento de
<%@ attribute name=onSale fragment=true %> XML;
<%@ variable fragment=onSale name-given=origPrice %>
<%@ variable fragment=onSale name-given=salePrice %> Internacionalizao (I18N Capable
Formatting) tags usadas para formao
<center>
<table> de textos, valores monetrios e nmeros,
<!-- Percorre os livros lidos do banco de dados --> com base na localizao do usurio;
<c:forEach var=book begin=0 items=${bookDB.books}>
<tr> Acesso a dados (Database Access) tags
<!-- OMITIDO: montagem do ttulo do livro --> para acesso a bancos de dados relacionais
<c:set var=sale value=${book.price * .85} />
de maneira simplificada, sem a necessidade
<!-- Decide qual fragmento executar verificando de cdigo Java.
se o livro est em promoo -->
<c:choose> A explorao do JSTL daria um artigo
<c:when test=${book.onSale} > parte aqui vamos nos concentrar na
<!-- Executa o fragmento onSale (veja declarao dos atributos) -->
<jsp:invoke fragment=onSale> relao desta com a tecnologia JSP.
<!-- Define o valor das variveis passadas para o fragmento -->
<jsp:param name=origPrice value=${book.price}/>
<jsp:param name=salePrice value=${sale}/> Expresses com J2EE 1.3
</jsp:invoke> importante ressaltar que a JSTL j su-
</c:when>
<c:otherwise> porta a linguagem de expresses quando
<jsp:invoke fragment=normalPrice> usada em atributos de tags. Em outras pala-
<jsp:param name=price value=${book.price}/>
</jsp:invoke> vras, o valor de um atributo na chamada de
</c:otherwise> uma tag pode ser o resultado da avaliao
</c:choose>
</td> de uma expresso. Com isso, todos os re-
<!-- OMITIDO: montagem dos dados do autor --> cursos da linguagem de expresses podem
</tr>
</c:forEach> ser usados num container J2EE 1.3, desde
</table> que dentro de atributos de tags, e no como
</center>
parte do texto.
Usos de final
Em variveis de instncia
Variveis de instncia final precisam ser inicializadas na decla-
rao, ou em todos os construtores da classe. Tomando como
Em classes
base a seguinte classe, por exemplo:
Quando uma classe declarada final, ela no pode ser herdada.
Conseqentemente, o seguinte trecho de cdigo no compila: public class Exemplo {
private final int inicializado = 50;
public final class ClasseNaoExtensivel { private final int posInicializado;
//...
} public Exemplo() {
class Filho extends ClasseNaoExtensivel { //No compila posInicializado = 0;
//... }
} public Exemplo(int valor) {
posInicializado = valor;
Em mtodos }
Mtodos declarados final, no podem ser redefinidos em sub- }
classes. Uma boa razo para fazer isto garantir a segurana do
Seriam invlidos os seguintes construtores:
cdigo, como no exemplo abaixo:
//No inicializa posInicializado
public abstract class OperacaoBanco { public Exemplo(String disp) {
//... System.out.println(disp);
private void enviaDados(DadosCliente dc) }
throws ValidacaoException {
//Aqui so realizadas operaes seguras e //Tenta atribuir novamente um valor a uma varivel final
//crticas, como autenticao, compactao etc. public Exemplo(String disp, int valor) {
} System.out.println(disp);
protected abstract DadosCliente coletaDados() { inicializado = valor;
// As subclasses coletam os dados de forma especfica }
}
public final void realizaOperacao()
throws ValidacaoException { Em variveis locais
// importante que estaa operao s seja realizada
//da forma definida nesta classe
Variveis locais final precisam ser inicializadas na declarao e
enviaDados(coletaDados()); no podem depois ter outro valor atribudo. Por exemplo, para
}
}
o seguinte mtodo a segunda linha no permitida:
Nesse exemplo, as subclasses de OperacaoBanco podem definir public void metodo() {
final int i = -1;
diversas maneiras de coletar os dados para operaes especficas, i++; // Erro!
mas no podem mudar a forma como a operao de envio }
A
verso 1.4 do J2SE realmente inovadora. Alm de mui- A expresso2 pode ser qualquer expresso Java, exceto chamadas
tas mudanas e melhorias nas APIs (como a introduo a mtodos void. Como uma assero s til ao desenvolvedor
de logging, expresses regulares e um novo pacote de (ou equipe de suporte tcnico da aplicao em produo), no
I/O), foi introduzida uma mudana na linguagem em si: o uso necessrio que a descrio faa sentido para o usurio final.
de asseres (assertions). Veja alguns exemplos de asseres:
Asseres so usadas para facilitar a realizao de testes de
sanidade (sanity checks) em uma aplicao. Mais precisamente, assert conexao != null;
servem para testar condies que devem ser sempre verdadeiras assert !lista.isEmpty(): lista vazia;
(caso a condio seja falsa, existe um bug no cdigo). assert a > 0: a <= 0;
Listagem 2. B.java Nesse caso, se no for passada a opo -source 1.4, o compilador
public class B { exibir uma mensagem de erro:
public static void main(String args[]) {
System.out.println("B.main()"); $ javac A.java B.java
if (false) { A.java:7: warning: as of release 1.4, assert is a
System.exit(0); keyword, and may not be used as an identifier
} assert false : false em A: B deveria ter terminado a
assert false : "false em B: deveria ter " + execuo do programa;
"terminado a execuo do programa"; ^
} [...]
} 4 errors
2 warnings
e cipao
FELIPE LEME
J para a execuo, existem vrias opes disponveis. Veja um Para garantir pr-condies, ps-condies e invariantes
resumo das opes na Tabela 1. Portanto, para executar a classe Asseres facilitam a prtica do design-by-contract, ou seja, elas
A com as asseres habilitadas, usa-se: podem ser usadas para garantir pr-condies (condies que
$ java -ea A devem ser verdadeiras antes de uma operao), ps-condies
(condies que devem ser verdadeiras aps uma operao) e
Esta ser a sada:
invariantes (condies que devem permanecer invariveis).
Veja um exemplo:
A.main()
private double totalComJuros
B.main()Exception in thread main java.lang.Assertion
/* ... */
Error: false em B: deveria ter terminado a execuo do
public void calculeTotalComJuros() {
programa
// pr-condio
at B.main(B.java:9)
assert this.parcelas > 0;
at A.main(A.java:4)
// invariante
assert objetoValido();
Note que possvel combinar opes. Por exemplo, para exe-
cutar a classe A com as asseres habilitadas no pacote default, //Realizar clculos financeiros, alterando totalComJuros
mas desabilitadas na classe B (mostrada na Listagem 2), a // invariante
sintaxe : assert objetoValido();
todas as classes exceto as de sistema -ea (ou -enableassertions) -da (ou -disableassertions)
vrias classes -ea: classe... (ou -enableassertions: classe...), usando um -da: classe... (ou -disableassertions: classe), usando um parmetro
parmetro para cada classe para cada classe
pacote default -ea: ... (ou -enableassertions: ...) -da: ... (ou -disableassertions: ...)
pacotes especificados -ea: pacote... ou -enableassertions: pacote...), com um par- -da: pacote... (ou -disableassertions: pacote...), usando um parme-
metro para cada pacote tro para cada pacote
classes de sistema -esa (ou -enablesystemassertions) -dsa (ou -disablesystemassertions)
class FormValidator { Existe, porm, uma exceo para essa regra: os casos onde uma
// Note que o escopo da classe package e no public
/* ... */
assero esteja verificando algo referente ao sistema de asseres
protected void validate(HttpRequest request) em si (veja um exemplo no quadro Idioms de asseres).
throws ValidationError {
assert request != null; No use asseres para checar parmetros de mtodos pblicos
// validao do request aqui
} Quando no se tem controle sobre quem est acessando seus
/* ... */ mtodos (principalmente em mtodos public), no se deve usar
}
asseres para checar parmetros, por dois motivos:
No use, nas asseres, expresses que gerem efeitos colaterais As asseres servem para checar erros imprevistos, mas o
Asseres devem ser usadas para realizar testes, mas no aes, uso de parmetros invlidos (de um mtodo pblico) um erro
pois os efeitos colaterais no sero executados caso as asseres previsvel;
estiverem desabilitadas em tempo de execuo. Por exemplo: Caso as asseres estejam desabilitadas, a checagem do pa-
rmetro no ter nenhum efeito. Um exemplo:
// forma correta
assert pilha.pop()!= null; public void setParent(Object parent) {
assert parent != null // Incorreto
// forma incorreta this.parent = parent;
Object topo = pilha.pop(); }
assert topo!= null;
N
o desenvolvimento de aplicaes O framework extensvel e adaptvel. Antes de entrarmos
web, a mistura de cdigo Java Com o nome completo Apache Struts nos detalhes sobre o framework, vamos
com HTML e JavaScript pode Web Application Framework, o Struts conhecer um pouco sobre as origens e
trazer muitos problemas no desenvolvi- muito popular entre os desenvolvedores caractersticas dos padres adotados.
mento, questo que se agrava quando a de aplicaes web com Java. Alm de ser
aplicao possui design grfico complexo software livre e bem documentado (tanto Arquiteturas e variaes
e funcionalidades avanadas. Torna-se na web como em diversos livros), o Struts O padro de arquitetura MVC (Modelo-
difcil a manuteno do cdigo e a inte- flexvel, extensvel e suportado pelas prin- Viso-Controlador) divide uma aplicao
rao entre a equipe de desenvolvimento cipais ferramentas de desenvolvimento em trs partes ou papis: dados e classes
e a de design grfico fica comprometida. (entre elas JBuilder, Eclipse, JDeveloper, de negcio (modelo), apresentao (viso)
Como solucionar as divergncias, separar NetBeans e IDEA). e controle.
melhor o trabalho das equipes e faz-las O Struts baseado em uma variao do Centralizando o controle, o padro MVC
trabalhar com produtividade em suas tradicional padro de arquitetura MVC reduz a duplicao de cdigo e simplifica a
especialidades? (Model-View-Controller) e se integra bem, manuteno e a evoluo de aplicaes web,
Um passo importante padronizar a na camada de apresentao, com outras alm de fomentar o reuso dos componentes
arquitetura das aplicaes, usando as tecnologias e frameworks web tais como da viso e do modelo.
melhores prticas do mercado e evitando JSP, Jakarta Velocity e XSLT. Para a cama- O JSP j suportava parcialmente o padro
partir do zero. nesse ponto que entram os da de dados, as opes so igualmente MVC, desde a verso 0.91, com a integrao
frameworks web, entre os quais o Struts do amplas: de JDBC a Enterprise JavaBeans, de JavaBeans com pginas JSP, em um pa-
projeto Apache Jakarta o mais conhecido passando por JDO. dro que ficou conhecido como Model 1.
e respeitado. a arquitetura do Struts que o torna to O Model 1, no entanto, no traz uma se-
parao clara entre os papis so apenas
dois componentes (JSPs e JavaBeans) para
desempenhar os trs papis do MVC. O
controle descentralizado e tanto os de-
senvolvedores como os designers precisam
editar pginas JSP, dificultando o trabalho
em equipe e a manuteno. Por apresentar
essas deficincias, a arquitetura Model 1
considerada adequada apenas para apli-
caes pequenas e praticamente estticas,
sem um fluxo complexo de navegao.
Para projetos de grande porte, manter
uma clara separao entre os papis torna-
se muito importante. Isso atingido com
a arquitetura Model 2, que adiciona um
elemento: o controlador. Implementado
geralmente por um servlet, o controlador
tem a responsabilidade de receber solici-
taes, acessar classes de negcio e coor-
denar a gerao do contedo da apresen-
tao (pginas HTML, WML etc.). O pouco
cdigo Java que resta na apresentao (nas
Figura 1. Arquiteturas Model 1 e Model 2 pginas JSP) pode ser substitudo por tags
Em cena, o Struts
O Struts uma implementao completa
e madura do padro de arquitetura Model
2. As melhores prticas dos Blueprints da
Sun (veja links) recomendam que aplica-
es web, ou a camada web de aplicaes
J2EE, sejam implementadas usando um
framework web MVC. E o Struts citado
vrias vezes como uma alternativa robusta
para isso.
O framework fornece um controlador
constitudo por trs elementos princi-
pais: o ActionServlet (servlet controlador),
o RequestProcessor e as classes de ao, ou
Actions. O ActionServlet e o RequestProces-
sor so fornecidos prontos pelo framework;
as aes devem ser implementadas pelo de-
senvolvedor estendendo a classe abstrata 1. No navegador web, submetido um for- 4. A classe de ao escolhida instanciada
Action. So as aes as responsveis por mulrio (ou clicado um link), gerando uma e chamado seu mtodo execute;
acessar o modelo, fazendo a ligao entre requisio recebida pelo ActionServlet, que 5. So realizadas as chamadas ao modelo
a lgica de negcio e o servlet. determina se h necessidade de instanciar (JavaBeans ou EJBs, por exemplo);
um ActionForm para encapsular os dados 6. Ao final da execuo, a ao retorna
De modo similar, o Struts fornece os
contidos na requisio, e identifica a ao um objeto ActionForward, indicando para
ActionForms, JavaBeans criados pelo de-
responsvel pelo seu processamento. As o ActionServlet que outra ao deve ser
senvolvedor, que tm suas propriedades
duas tarefas so realizadas baseando-se executada (retornando ao passo 4), ou que
preenchidas automaticamente pelo Struts
nos mapeamentos definidos no arquivo uma pgina deve ser exibida (continuando
a partir de formulrios HTML. Os Action-
struts-config.xml; com o passo 7);
Forms fazem a ponte entre a viso (pginas
2. Caso seja necessrio popular um Ac- 7. Se tiver sido indicada uma pgina, ela
JSP) e o controlador (aes e servlet). tionForm, recuperada uma instncia pr- processada para gerar a resposta requisi-
Alm desses, o Struts inclui uma srie existente da sesso (criada numa invocao o original, ou exibida a pgina original
de elementos adicionais importantes, anterior da mesma URL, por exemplo) ou com erros de validao;
como um pool de conexes (configurado gerada uma nova instncia. O ActionForm 8. A pgina consulta os JavaBeans inseri-
no arquivo struts-config.xml), e uma vasta ento populado com os parmetros da dos pela ao na requisio ou na sesso
bibliotecas de tags, contemplando prati- requisio; (esses objetos so fornecidos como respos-
camente todas as tarefas necessrias no 3. O mtodo validate do ActionForm ta pelo modelo ou construdos pela ao);
desenvolvimento de pginas JSP. chamado e, caso retorne algum erro 9. O resultado final (geralmente cdigo
(encapsulado em objetos ActionError), a HTML) enviado para o navegador, e o
Fluxo de uma aplicao Struts pgina original reexibida (passo 7), caso usurio pode prosseguir interagindo com
O ActionServlet o nico servlet de uma contrrio o processamento continua; a aplicao.
aplicao construda com o Struts. O arqui-
D
iversas reas da programao em
Java tm uma caracterstica bem
distinta: o uso de cdigo baseado
em modelos ou templates aquelas classes
que voc sempre acaba copiando de um
exemplo, ou cria baseando-se em padres
de projeto bem conhecidos. medida que
um projeto cresce, a criao dessas classes
se torna apenas trabalho repetitivo. Esse
o cenrio ideal para a aplicao e uma
ferramenta de gerao de cdigo como o
XDoclet.
MARCUS BRITO
U
ma das reas em que o desenvol-
vimento de aplicaes web com
Java mais encontra problemas
na separao entre a camada de controle,
que faz as chamadas lgica de negcio, e
a camada de apresentao, onde realizada
a montagem da interface web.
Uma forma eficaz de fazer essa separao
usando sistemas de templates (template
engines). O framework Jakarta Velocity do
Grupo Apache um dos mais populares
desses sistemas, e pode ser usado tanto em
aplicaes web quanto locais.
Sistemas de templates
Pode-se fazer muito com um sistema de
templates desde a gerao de simples ar-
quivos-texto criao de arquivos binrios,
tudo o que siga um determinado padro
de formatao. Pode-se gerar cdigo-fonte
de alguma linguagem, XML, HTML, docu-
mentos RTF e muitos outros. Por exemplo, Figura 1. O processo de merge
o Poseidon for UML, ferramenta CASE concentrados na lgica do sistema e os ou reiniciar o sistema.
desenvolvida em Java, usa o Velocity para designers se preocupam apenas com o Mas o que exatamente so templates? So
a gerao de cdigo a partir de diagramas layout, o que reduz o risco de alterarem arquivos com grande parte de sua estru-
UML. indevidamente o cdigo da aplicao. Alm tura e formatao pronta, contendo dire-
Usar templates tem uma srie de van- disso, os templates ficam em arquivos se- tivas indicando valores a serem inseridos
tagens: existe uma melhor designao parados, possibilitando mudar o visual da e aes a serem realizadas pelo sistema
de tarefas, pois os programadores ficam aplicao sem a necessidade de recompilar de templates. Com diretivas, possvel,
por exemplo, mostrar o contedo de uma
Diretivas da VTL varivel, navegar em listas e arrays, ou at
mesmo invocar mtodos de objetos.
#set($varivel = valor) do template, sem fazer o parse. Usada
Diretivas so a parte principal da Velocity
Atribui um valor a uma varivel. para incluir cdigo esttico.
Template Language (VTL) veja mais so-
#foreach ($varivel in $ itens) ... #end #parse(arquivo) bre essa linguagem no quadro Diretivas
Percorre uma coleo, iterator ou array, Inclui o contedo de um arquivo no corpo da VTL.
atribuindo o elemento atual a $varivel. do template e faz o parse do cdigo VTL
#if(condio) ... #else ... #end existente no arquivo. Funcionamento bsico
Condicional padro da VTL. Diferente- Nota: existe ainda a diretiva #stop, mas seu Uma aplicao que usa o Velocity executa,
mente de Java, a condio no precisa uso no mais recomendado. basicamente, os seguintes passos: inicializa
retornar um valor booleano (para objetos, o sistema de templates, cria um contexto,
null considerado como false). O uso do Voc pode ver mais detalhes sobre todas adiciona a ele objetos, carrega um template
#else opcional. as diretivas da VTL no VTL Reference e realiza o merge (veja a Figura 1).
#include(arquivo) Guide em jakarta.apache.org/velocity/vtl- Os contextos so a forma usada no
Inclui o contedo de um arquivo no corpo reference-guide.html. Velocity para fornecer dados para o
mecanismo de templates. Um contexto
import java.io.*;
import java.util.ArrayList;;
Obteno e instalao
O download da ltima verso estvel do
public class ProcessaEmpregados { Velocity pode ser feito em jakarta.apache.org/
public static void main(String args[]) {
BufferedReader reader = null; builds/jakarta-velocity/release. Para us-lo em
suas aplicaes, voc deve incluir a biblio-
try {
// Inicia o Velocity teca velocity-dep-<versao>.jar (que vem no
VelocityEngine ve = new VelocityEngine(); pacote) no classpath do sistema operacional
ve.init();
ou de seu container web.
// Abre o template
Template tmplt = ve.getTemplate(relacao_empregados.vm);
Al Velocity
// Cria um contexto para colocar os dados Nosso primeiro exemplo gera um do-
VelocityContext context = new VelocityContext();
cumento XML a partir de dados contidos
reader = new BufferedReader(new FileReader(empregados.txt)); em um arquivo-texto, e apresenta alguns
ArrayList empregados = new ArrayList();
String campos[] = new String[3]; elementos importantes do Velocity.
String linha; O arquivo-texto utilizado (empregados.txt)
// L arquivo separando as informaes e montando uma coleo bastante simples, contendo nomes, e-
while ((linha = reader.readLine())!= null) { mails e salrios:
campos = linha.split(,, 3);
empregados.add(new Empregado(campos[0], campos[1],
Double.parseDouble(campos[2]))); George Harrison,george@beatles.com,80000.00
}
Ringo Starr,ringo@beatles.com,40000.00
// Adiciona a coleo montada ao contexto Jim Morrison,jimmy@doors.com,100000.00
context.put(empregados, empregados); Manoel da Silva,mano@provedor.com.br,220.00
BufferedWriter writer = new BufferedWriter(
new FileWriter(new File(empregados.xml))); O template (RelacaoEmpregados.vm)
// Faz o merge mostrado a seguir (com o cdigo da VTL
tmplt.merge(context, writer); destacado):
writer.flush();
writer.close(); ## Macro para gerar uma entrada XML
} #macro(adicionaEmpregado
catch (Exception e) { $nome $email $salario)
e.printStackTrace(); <empregado>
} <nome>$nome</nome>
finally { <email>$email</email>
if (reader!= null) { <salario>$salario</salario>
try { </empregado>
reader.close(); #end
}
catch (Exception e) {} <?xml version =1.0 encoding=ISO-8859-
} 1?>
} <relacao-empregados>
}
} ## Cria uma entrada para
## cada item da coleo
#foreach ($e in $empregados)
uma instncia da classe org.apache.velocit importantes: put(String chave, Object valor) e #adicionaEmpregado(
y.VelocityContext, que utiliza internamente get(String chave). $e.Nome $e.Email $e.Salario)
#end
um HashMap para manter um conjunto de Uma vez criado e preenchido o contexto,
pares String-objeto. Possui dois mtodos prossegue-se para o merge. Durante o </relacao-empregados>
Um autor tupiniquim?
Existem bons escritores brasileiros sobre Java
DANIEL DEOLIVEIRA
I
maginem a cena: noite quente de de cdigo Java em pura gozao, que o mado no livro sobre JSP (com 190 pginas,
domingo em Braslia, debaixo de um digam seus alunos do curso corujo tambm com CD-ROM). Inicialmente
coqueiro, ao lado de uma piscina... (que acontece durante a madrugada) e os ele ensina como baixar e instalar cada
enquanto nossas famlias se divertiam, eu que o assistem s suas muitas palestras. uma das ferramentas necessrias ao
estava jogando conversa fora com o meu Sobre seu principal fator de motivao projeto: o MySQL, o Forte e o Tomcat.
amigo Fernando Anselmo. Estvamos para escrever, me disse Um aspecto interessante
buscando inspirao para os prximos que era por no encontrar que esse livro no ensina
textos que amos escrever aqui para a respostas objetivas para as servlets, pois como afirma
Java Magazine, quando observei que nos dificuldades que teve ao o autor, isso s serve para
ltimos meses, nesta coluna, tenho sem- estudar as tecnologias. Sua complicar a cabea dos no-
pre discutido livros de autores gringos, crtica que a maioria dos vatos em JSP. Em seguida,
mas nunca os de escritores brasileiros. E livros que consultou apre- o livro apresenta o desen-
um dos maiores estava sentado ao meu senta apenas trechos de volvimento de um sistema
lado, e eu ouvindo as bobagens que dizia cdigos, mas nunca uma para intranet com dois
(e olha que ele s tomou refrigerante!). soluo completa, ou seja, subsistemas distintos: um
Fernando Anselmo autor de sete livros um projeto com principio, destinado ao pblico geral,
tcnicos, incluindo dois sobre Java: Tudo meio e fim. Por isso, nos dois onde os clientes podem se
o que voc queria saber sobre a JDBC e livros, voc encontrar um cadastrar, consultar os
Os dois livros incluem
Tudo o que voc queria saber sobre o JSP, projeto completo incluin- filmes disponveis e fazer
quando utiliza o servidor Tomcat com o do o cdigo fonte, pois o
o cdigo de um projeto reservas; o outro destinado
banco MySQL, ambos da Editora Visual autor no acredita que se completo: o autor acredita aos administradores do sis-
Books, de Florianpolis. um cmico deva comear a codificar que o programador deve tema, que podem realizar
nato ningum consegue ficar srio ao partindo de uma tela vazia, comear modificando algo operaes como registrar
lado dele, pois transforma at anlise mas sim modificando algo j em funcionamento devolues e cadastrar fil-
que j esteja funcionando. mes. Um ponto alto deste li-
Ficha tcnica O livro sobre JDBC tem 200 pginas e vem vro a parte relativa aos relatrios, assunto
com um CD-ROM com aquelas quinqui- quase nunca abordado em livros de Java.
Tudo o que voc
lharias que todo desenvolvedor Java Para concluir, o autor afirma que no tem
queria saber sobre
a JDBC... adora. Comeou a ser escrito a partir das a menor pretenso de substituir os gran-
notas dos cursos ministrados pelo autor e des livros de treinamento Java no mercado,
Fernando Anselmo
das perguntas que os alunos lhe faziam. como por exemplo, o seu fervorosamente
Editora Visual Books Ao procurar respostas, Fernando cons- amado formiguinhas, dos irmos Deitel
200 pginas tatou a brutal falta de documentao em (Java Como Programar, Editora Bookman).
R$ 37,00 portugus sobre JDBC. Foi esse o ponto Seu objetivo facilitar a vida do desenvolve-
ISBN 8575020560 de partida: responder cada uma das dor quem quer dar os primeiros passos em
perguntas; e ao melhor detalh-las, cada uma dessas tecnologias, sem traumas. Com
Tudo que Voc Queria resposta foi se transformando em um ca- uma vantagem para ns: por ser um escri-
Saber Sobre o JSP... ptulo completo. Em seguida, foi criado um tor brasileiro, a editora no precisa pagar
Fernando Anselmo projeto completo de locadora de DVDs, ini- royalties ao exterior. Portanto, prestigiem
cialmente conectando com o Access (como os autores tupiniquins e bons cdigos!
Editora Visual Books
de costume em livros semelhantes) e pos-
192 pginas
teriormente com o banco de dados MySQL.
R$ 39,00 Daniel deOliveira (daniel@dfjug.org) o
Em resposta aos leitores do primeiro
ISBN 8575020943 coordenador do DFJUG (Braslia Java Users Group),
livro, que solicitaram o desdobramento
www.dfjug.org.
do projeto, o sistema de locadora reto-