Académique Documents
Professionnel Documents
Culture Documents
6
0
0
2
e
n
O
a
Jav
Especial
ta do Evento
Cobertura Comple
pen Source
Novos produtos O
ectiva Tcnica
p
rs
e
P
a
m
u
e
d
s
o
Annci
tBeans
Novidades do Ne
a 6 e Java 7
O que vir no Jav
Eclipse
Os 10 Mais do Eclipse 3.2
Detalhes sobre as principais
novidades da nova verso, de
melhorias a novos projetos
Criao de Plug-ins
Aprenda a estender o
Eclipse criando um plug-in
completo, passo a passo
Contedo
JavaOne 2006
Leonardo Galvo
Apresentando a dcima edio do maior evento
para desenvolvedores
06
JavaOne 2006
Fabio Velloso
Foco em produtividade, desenvolvimento corporativo
e novas tecnologias
xx
xx
xx
Capa
20
40
Introduo ao JMS
Fernando Lozano
Especial
Sun
Tech
Days 2006
Java na Era da
Participao
30
50
52
Era da participao: Jonathan Schwartz destaca a importncia das comunidades e a apresenta a viso
da Sun para o open source.
Introduo ao BlueJ
Marcelo Daibert e Marco Antnio Arajo
Core
62
68
Esp
Direo
Diretor Editorial Leonardo Galvo
Diretor de Marketing Gladstone Matos
Diretor Comercial Casseano Filho
Edio
Publisher e Editor-Chefe
Leonardo Galvo (leonardo@javamagazine.com.br)
Editores-Adjuntos
Fernando Lozano (lozano@javamagazine.com.br)
Osvaldo Doederlein (osvaldo@javamagazine.com.br)
Colaboraram nesta edio
Ana Abrantes, Andr Rocha, Bruno Souza, Fabio Velloso,
Felipe Leme, Fernando Lozano, Leonardo Galvo,
Marcelo Daibert, Marco Antnio Arajo, Osvaldo Doederlein,
Vincius Teles, Vinicius Senger, Yara Senger
Arte
Diretor de Arte Tarcsio Bannwart (phdesign@phdesign.com.br)
Diagramao Jaime Peters Junior, Lais Pancote e Tersis Zonato
Ilustraes Felipe Machado e Francisco Peixoto
Produo
Gerncia de Marketing Kaline Dolabella
Distribuio
Fernando Chinaglia Distribuidora S.A.
Rua Teodoro da Silva, 907, Graja - RJ
CEP 20563-900, (21) 3879-7766 - (21) 2577-6362
Atendimento ao leitor
A DevMedia possui uma Central de Atendimento on-line, onde voc pode
tirar suas dvidas sobre servios, enviar crticas e sugestes e falar com um
de nossos atendentes. Atravs da nossa central tambm possvel alterar
dados 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 contato conosco atravs do telefone 21 2283-9012.
Edies anteriores
Adquira as edies anteriores da revista Java Magazine ou de qualquer outra
publicao do Grupo DevMedia de forma prtica e segura, em
www.devmedia.com.br/anteriores.
Publicidade
publicidade@javamagazine.com.br, 21 2213-0940
Anncios Anunciando nas publicaes e nos sites do Grupo DevMedia,
voc divulga sua marca ou produto para mais de 100 mil desenvolvedores
de todo o Brasil, em mais de 200 cidades. Solicite nossos Media Kits, com
detalhes sobre preos e formatos de anncios.
Reprints Editoriais Se foi publicado na Java Magazine um artigo que
possa alavancar as suas vendas, multiplique essa oportunidade! Solicite a
reimpresso da matria junto com a capa da edio em que saiu, e distribua
esse reprint personalizado entre seus clientes.
Encarte de CDs Faa como nossos maiores anunciantes. Encarte um CD
com uma amostra de seus produtos na Java Magazine e atinja um pblico
segmentado e formador de opinio.
Realizao
om mais uma cobertura do JavaOne, chegamos ao quinto ano da Java Magazine. Isso num momento em que a tecnologia Java est mostrando que
pode ser madura e tradicional, ao mesmo tempo que se mantm gil e em
constante renovao. Como voc ver, os anncios e lanamentos feitos no evento
confirmam que a tecnologia continua num processo rpido de evoluo, e que vem
se consolidando em mercados nobres e atuais, como SOA, Web 2.0 e aplicaes
distribudas. Com quatro artigos por cinco autores, nossa cobertura vai alm de
um relato detalhado do que aconteceu, aproveitando as novidades apresentadas
para explicar conceitos e discutir as conseqncias prticas do que foi divulgado
no evento.
No s de novidades vive o desenvolvedor, e essa edio traz artigos sobre relatrios, testes, JMS e Eclipse, o tema de capa. No primeiro artigo sobre o Eclipse,
voc ver uma seleo com as dez principais novidades da verso 3.2, desde a nova
integrao com o JUnit 4 at o importante projeto Callisto que est mudando as bases
do Eclipse. Na segunda matria de capa, voc aprende a criar plug-ins para o Eclipse
3.x, atravs de uma conceituao slida e um exemplo real e completo.
Relatrios constituem uma parte essencial de muitos projetos corporativos. Nesta
edio, um tutorial detalhado volta ao tema, revendo o JasperReports e o iReport
e criando um relatrio de pedidos, desde a definio do modelo de dados at a
criao de uma aplicao web para iniciar a gerao, no esquecendo, claro, da
criao do relatrio em si.
Temos tambm um artigo sobre a tecnologia Java Message Service (JMS), com
exemplos prticos no servidor de aplicaes JBoss 4. O JMS usado freqentemente na criao de sistemas de grande porte. Se bem aplicado, pode reduzir muito
o acoplamento e aumentar a responsividade e confiabilidade de suas aplicaes
corporativas.
Em uma aplicao OO, objetos geralmente se organizam em um rede complexa de
dependncias, e fazer testes de unidade que verifiquem isoladamente a funcionalidade de um objeto no uma tarefa simples. Uma soluo elegante o uso de mock
objects objetos que funcionam como substitutos sobre os quais o desenvolvedor tem
controle total. Veja como usar essa tcnica em um artigo que apresenta o conceito e
mostra como usar a ferramenta EasyMock, que automatiza boa parte do processo.
Por fim, temos um artigo sobre o ambiente de desenvolvimento BlueJ, que focado
no aprendizado de Java e orientao a objetos, e permite a criao visual de classes
e instanciao interativa de objetos. Uma tima maneira de comear com Java e conhecer o essencial de tcnicas OO.
Apoio
Boa leitura!
Parceiros
Leonardo Galvo
ao do Leitor
Volume de informaes
Sou assinante da Java Magazine h quatro meses
e sou apaixonado pela revista. Realmente fico espantado com o volume de informaes. Parabns!
Thiago Alvarenga Lechuga
Eclipse TPTP
Gostaria de dar parabns a todos vocs da Java
Magazine. A revista est muito boa. Sou assinante
h pouco tempo, mas antes disso j acompanhava a
revista. A ltima edio sobre Logging e otimizao
foi boa, mas indo por esse tpico vocs poderiam
fazer uma matria sobre o Projeto Eclipse TPTP
(Test and Performance Tools Platform). Trabalho
com testes de software e h pouco conheci o TPTP.
Em alguma edio futura vocs publicaro um
artigo sobre o assunto? At mais e continuem com
o timo trabalho!
Jaime Gabriel Valrio
Jaime, obrigado pela apreciao. Planejamos
sim artigos sobre vrios projetos da Fundao
Eclipse, j comeando na prxima edio. O TPTP
est na nossa pauta.
Participe!
Envie sua dvida, comentrio, correo
ou sugesto, com nome completo,
cidade e estado, para:
cartas@javamagazine.com.br
Cartas publicadas podem ser editadas
por motivos de clareza ou extenso.
Na unha
Gostaria de parabenizar Osvaldo Doederlein pela
matria Persistncia Turbinada, na Edio 25. Um
artigo com excelente grau tcnico fazendo uso de
APIs que raramente utilizamos (ex.: Proxy Class),
Grficos em 3D
E
JavaOne
Palavras-chave
Terminologia do JavaOne
2006
java.sun.com/javaone/sf
Site oficial do JavaOne
java.sun.com/javaone/sf/sessions/
general
Webcasts com o contedo completo dos General
Sessions
java.sun.com/javaone/sf/sessions/main_
session_pdfs.jsp
Slides de todas as Technical Sessions
java.sun.com/javaone/sf/tshirt_hurling.jsp
Mais sobre o campeonato de lanamento de
camisetas
JavaOne 2006
Anncios e a Parti
Temas principais
gias corporativas.)
A Oracle foi a responsvel pelo general
session do segundo dia. Apresentou suas solues e estratgias
baseadas em SOA, e reforou
a importncia de novas
tecnologias, como EJB 3
e JavaServer Faces, para
simplificar o desenvolvimento e suportar novas aplicaes da Web
2.0, com JSF e AJAX.
No terceiro dia, Erich
Gamma (o pri ncipal
autor do clssico livro
Desig n Patterns) e
John Wiegand, ambos
Distinguished Engineers
da IBM Rational Software, apresentaram o general
session da IBM. Trataram
detalhadamente do projeto
Eclipse e seu processo de desenvolvimento, e demonstraram um
plug-in que faz a integrao com
o Bugzilla (ferramenta open source
para gerncia de bugs e correes).
Apresentaram ainda a evoluo do
desenvolvimento do produto atravs de
vrios grficos.
Pavilho
Os dias do evento so tomados por centenas de palestras, mas vale a pena reservar
algumas horas para visitar o Pavillion,
com estandes de empresas
e produtos. O pavilho,
alm de apresentar
aplicaes de vrios tipos, foi um
show de tecnologia, mostrando entre
outras
coi-
cipao Brasileira
ento corporativo
Fabio Velloso
sas jogos escritos em Java, celulares
e outros dispositivos JME.
Entre os celulares, destaque para
o Jasper S20 da Savaje, empresa
que desenvolveu um sistema
operacional baseado em Java para
dispositivos. Com este celular a
Savaje conseguiu demonstrar na
prtica a aplicao do conceito. O
celular ainda uma verso para desenvolvedores, e talvez no tivesse
sucesso no mercado para usurios
comuns, mas incorpora muitas tecnologias, incluindo APIs recentes do JME,
como suporte a Bluetooth, mensagens, grficos em 2D e 3D, segurana com suporte a
JCE, JSSE, JAAS e a nova JSR-209 (Advanced Graphics and User Interface Optional
Package for the J2ME), que especifica um
subconjunto de funcionalidades do Swing
e Java 2D para pequenos dispositivos.
Tambm chamou ateno o estande com
aplicaes Java Real Time. Alm de robs,
foi demonstrado um autorama, com os
carrinhos controlados pela tecnologia
Java Real-Time System (Java RTS), onde
passei um bom tempo me divertindo com
as corridas.
Sesses finais
A general session do ltimo dia do evento
foi voltada a inovaes, comeando com
uma apresentao do novo Flow Designer para MIDP 2.0 do NetBeans; e uma
aplicao de RFID com Web Services, em
que um celular mandava mensagens
SOAP atravs de uma aplicao JME.
As ltimas apres e nt a e s fora m
do Java Real-Time
System (Java RTS)
com aplicaes
de imagem e
vdeo e uma
criada uma nova API com estas funcionalidades chamada Java Persistence API que pode
ser usada fora de containers JEE, por exemplo em aplicaes desktop com Swing.
Outro assunto importante foi JavaServer
Faces, o framework web com modelos de
componentes visuais e de eventos que possibilita criar aplicaes web com maior interatividade. Alm do JSF, tecnologias como
AJAX e RIA tiveram bastante destaque, por
serem fundamentais para a chamada Web
2.0. Destaque para o Google Web Toolkit,
um framework para desenvolvimento de
aplicaes AJAX com Java que foi lanado
durante o evento.
Outro assunto destacado foi SOA e Web
Services, com muitas palestras e referncias
em general sessions, porm sem grandes
novidades em relao tecnologia. Dois
tpicos relacionados, relativamente novos
e que merecem ateno so:
Java Business Integration (JBI), que prov
um barramento para comunicao de aplicaes SOA padronizado atravs da JSR 208, e
j apresentado na Java Magazine.
REST Web Services, uma arquitetura para
Web Services, com conceitos da Web 2.0,
usando protocolos stateless e operaes
simples de cadastro em banco de dados.
Palestras de brasileiros
Referncias ao Brasil e
a participao brasileira
Alm da referncia de John
Gage aos brasileiros na abertura do evento, fomos citados
vrias vezes nos general sessions. Jonathan Schwartz (o CEO
da Sun) disse que a comunidade
Java nunca foi to vibrante, falou do
crescimento do JCP, que atualmente
tem 1052 membros, mostrando um slide
com alguns membros de peso como Sun,
Oracle, Apple, Philips, BEA, IBM e entre
eles estava o SouJava. Continuou falando sobre projetos do governo brasileiro
relacionados a open source, TV Digital e
uso de padres. Terminou dizendo que a
comunidade brasileira esta in fire.
Jeff Jackson falou sobre o
crescimento da comunidade NetBeans,
que j tem mais de
200 committers, e
Concluses
O JavaOne 2006 teve como principais
assuntos JEE 5, SOA e Web 2.0, os quais
certamente estaro presentes no dia-a-dia
dos desenvolvedores e empresas. importante estarmos preparados para desenvolver aplicaes com estas tecnologias. Para
ns brasileiros, ficou a sensao de termos
java.sun.com/javaone
Site do JavaOne 2006
java.sun.com/javaone/sf/sessions/
general
Vdeos e podcasts com os general sessions
www28.cplan.com/javaone06_cv_124_1/
sessions_catalog.jsp
Download das palestras do evento
jnpodcasts.dev.java.net
Podcasts do java.net Community Corner 2006
glassfish.dev.java.net/
Servidor JEE 5 open source download e
documentao
www.perronerobotics.com/tommy.htm
Site do carro conceito vencedor de um Dukes
Choice Award
jcp.org/en/jsr/detail?id=220
JSR 220 Enterprise JavaBeans 3.0
jcp.org/en/jsr/detail?id=209
JSR 209 Advanced Graphics and User Interface
Optional Package for the J2ME Platform
jcp.org/en/jsr/detail?id=295
JSR 295 Beans Binding
jcp.org/en/jsr/detail?id=296
JSR 296 Swing Application Framework
jackpot.netbeans.org
Jackpot, extenso do NetBeans para refactoring
inteligente
11
JavaOne 2006
Uma Perspectiva
Web 2.0
O termo Web 2.0 refere-se nova gerao de servios disponveis na web, que
possibilitam aplicaes mais parecidas
com aplicaes desktop, com a utilizao
de Web Services, AJAX, e podendo incluir
outras ferramentas como Wikis e blogs.
O Web 2.0 tem como principais smbolos
aplicaes como Google Maps e Flickr, entre outras, e o assunto esteve presente em
diversas technical sessions do evento.
SOA
Um dos destaques relacionado a SOA
(Service-Oriented Architecture) este ano foi
Tcnica
Tiger
Na technical session Mastering Mustang,
Developing Dolphin (TS-3439), apresentada
por Danny Coward (Senior Staff Engineer)
e Mark Reinhold (Java SE Chief Engineer), ambos da Sun, foram apresentados
nmeros interessantes sobre o Java SE 5.
O objetivo era demonstrar a consolidao
desta verso do Java no cenrio de desenvolvimento atual:
Mais de 260 milhes de downloads
Estimativa de que 60% das mquinas
novas j venham com o Java 5 instalado
Benchmarks indicando que Java SE 5
mais rpido no cliente e no servidor, e
perspectivas de que Java SE 6 ser ainda
melhor (veja a Figura 1).
Performance do Java
Normalizado para performance do J2SE 1.2.2
J2SE 142
Tiger
Mustang Beta
Mustang
O Early Draft da especificao do JSE 6
foi publicado em 21 de dezembro de 2005,
atravs da JSR-270, e o lanamento do release final est previsto para outubro deste
ano. Algumas das novidades e JSRs que
estaro presentes no Mustang so:
Facilitar o desenvolvimento atravs de
processadores de annotations (JSR 269);
JDBC 4.0 (JSR-221);
Suporte a Scripting Languages (JSR223);
Anotaes comuns para suporte a Web
Services (JSR-250);
Incluso do Java DB no JDK
Incorporao do gerenciador de layout
GroupLayout, utilizado pelo construtor de
interfaces grficas Matisse do NetBeans,
para facilitar a criao de telas com dragand-drop em IDEs.
13
Suporte a JavaScript
Alm do engine PHP citado, tambm ser
includo no projeto Mustang um engine
JavaScript baseado no projeto Mozilla Rhino, que uma implementao open source
de JavaScript. Isso permitir que cdigo
JavaScript seja misturado a cdigo Java.
JDBC 4.0
A JSR-221 JDBC 4.0 API Specification
visa atualizar e facilitar a utilizao da
API JDBC aproveitando recursos do Java
SE 5 como Generics e Annotations, alm
de prover novas classes utilitrias.
Java DB
O Java DB uma verso do gerenciador
de banco de dados open source Apache
Derby, com mesmo cdigo fonte e mesmos
binrios, mas com suporte da Sun. Este
banco de dados relacional escrito em
Java, e pode ser facilmente distribudo com
suas aplicaes.
Dolphin
Embora a verso Java SE 6 ainda no esteja pronta, o planejamento para a verso
Java SE 7 (Dolphin) j comeou. Apresentamos aqui alguns itens de destaque que
podero fazer parte do Java 7:
Passagem de mtodos como referncia;
Suporte a propriedades
(para o padro JavaBeans
getPropriedade() e setPropriedade());
Supor te n at ivo a
XML;
Criao de novos
engines para suporte a linguagens de
script, como BeanShell;
O que AJAX ?
XMLHttpRequest;
Uso de JavaScript para a ligao entre todos
esses elementos.
O princpio bsico para obter uma maior
interatividade nas interfaces web, adotado
pelo AJAX, consiste em atualizar somente a
parte da pgina que deve sofrer alterao e
no o documento inteiro. Isto pode ser feito
atravs do elemento XMLHttpRequest, que
cria uma thread para enviar uma requisio
para o servidor. A resposta do servidor depois
recebida atravs de um documento XML, que
processado por cdigo JavaScript que faz a
extrao dos dados e atualizao da pgina.
Beans Binding
A nova funcionalidade de Beans Binding,
descrita na JSR-295, foi criada para minimizar os problemas encontrados na sincronizao de propriedades de JavaBeans.
Em uma aplicao Swing, por exemplo,
muito comum a necessidade de sincronizar
o contedo de um JavaBean que representa
o objeto do modelo (ex.: um objeto Cliente),
e uma propriedade do JavaBean que representa um componente de interface com o
usurio, como um JTextField.
Com a nova JSR, o vnculo entre as
propriedades poder ser configurado facilmente, indicando se deve ser realizada
uma converso de tipos, ou feita uma validao antes dos valores serem copiados
de um JavaBean para outro.
Project Simplice
Visual Basic na plataforma Java
O objetivo do projeto Simplice reaproveitar o conhecimento que os programadores Visual Basic tm da linguagem,
permitindo que cdigo VB seja escrito dentro de mtodos Java e que possa invocar
mtodos Java. O cdigo VB ser compilado
para classes Java que podero ser executadas pela JVM. Note que o Simplice no
visa portar aplicaes escritas em Visual
Basic para Java, pois essas aplicaes so
geralmente fortemente vinculadas a APIs
do Windows sendo portanto dependentes
de plataforma.
Expandindo a plataforma
Java para outras linguagens
Atualmente a linguagem Python suportada em Java atravs do projeto Jython,
e Ruby atravs do JRuby. O objetivo
permitir que a mquina virtual suporte
diretamente linguagens dinmicas e
de scripting, expandindo a plataforma
Java. Esta funcionalidade est definida
na JSR -292: Supporting Dynamically-Typed
Languages on the Java Platform.
Concluses
Participar do JavaOne sempre bom;
uma somatria de coisas interessantes,
contatos, palestras, discusses, novidades.
Faz a gente admirar ainda mais a evoluo
da tecnologia Java, e tudo que est a seu
redor.
Se voc no pde participar, aqui esto
algumas sugestes para tirar proveito do
que foi gerado e discutido no evento:
Assistir os General Sessions que esto
disponveis no site do JavaOne.
Procurar pelas apresentaes sobre
assuntos de seu maior interesse no site
do evento. Os slides de todas as Technical
Sessions esto disponveis em PDF.
Ficar atento aos blogs dos lderes das
principais especificaes (h vrios no
portal Java.net)
jcp.org
JCP onde voc poder encontra a
especificao de todas as JSR citadas no
artigo
java.sun.com/javaone/sf/sessions/general/
index.jsp
Videos das General Sessions
developers.sun.com/prodtech/javadb
JavaDB
blogs.sun.com/roller/page/dannycoward?
entry=mastering_mustang_developing_
dolphin
Danny Coward blog com link direto para
apresentao do JavaOne
Yara M. H. Senger
(yara@globalcode.com.br)
formada em Cincias da Computao na USP em So Carlos,
especialista em desenvolvimento web;
possui as certificaes SCJA, SCJP e SCWCD. Atualmente
Instrutora e Diretora Educacional da Globalcode, criadora e coordenadora de diversos cursos das carreiras
Academia do Java e Academia do Web Developer.
Vinicius Senger
(vinicius@globalcode.com.br) com
mais de 15 anos de experincia em
desenvolvimento, diretor e fundador
da Globalcode especialista em Arquiteturas Java e desenvolvimento Java Enterprise Edition;
possui as certificaes SCJA, SCJP e SCEA (1). Criador
e coordenador das carreiras Academia do Arquiteto e
Academia do Enterprise Developer na Globalcode.
15
JavaOne 2006
Open Source em F
oco
ce movimentam o JavaOne
Bruno Souza
que o projeto Glassfish a implementao
de referncia do JEE 5, e que est sendo
desenvolvido em um projeto open source
(sob licena CDDL) desde o seu anncio no
JavaOne do ano passado. A novidade que
o Glassfish, agora tambm chamado de
Open JEE, est disponvel em sua verso
final, e o primeiro servidor de aplicaes
a suportar a nova especificao.
Com o Glassfish os desenvolvedores
j tm acesso s novas funcionalidades
do padro JEE 5, como suporte a EJB 3.0,
incluindo as novidades em persistncia e
o suporte s ultimas verses de especificaes de Web Services. O Glassfish ainda
traz um servidor web (Projeto Grizzly)
completamente reimplementado usando
Java NIO, com performance melhor e
suporte a um maior nmero de conexes
simultneas.
No palco principal do JavaOne, reuniramse representantes de todas as empresas que
participaram da definio da especificao
JEE, para formar a frase Compatibility
Matters (Compatibilidade importante).
O comprometimento demonstrado por
essas empresas, junto ao lanamento de
um produto open source como o primeiro servidor JEE 5 no mercado, fortalece o
padro, que foi uma das grandes vedetes
deste JavaOne.
Abertura em destaque: Jonathan Schwartz e Richard Green discutem participao e open source
do produto Sun Java System Message
Queue, e por isso j traz funcionalidades
como clustering e criptografia segura,
integrao com mensagens SOAP e HTTP,
e uma API permitindo uso por aplicaes
no-Java. portanto um projeto recente,
mas que j traz funcionalidades maduras
para o ambiente corporativo, o que deve
permitir o uso imediato no apenas em
aplicaes internas que necessitem de uma
implementao de messaging robusta,
mas tambm em projetos de integrao
business-to-business.
Ainda na linha SOA, outro anncio
importante foi a disponibilizao como
open source da Web Services Interoperability Technology (WSIT), uma coleo
de implementaes de Web Services que
abrange segurana, mensagens, qualidade
de servio e outros. Conhecido como Projeto Tango, o WSIT facilita a integrao
com o ambiente .NET da Microsoft, simplificando a vida de quem precisa interagir
com o ambiente Windows Communication
Foundation (WFC), a infra-estrutura de comunicao para Web Services da Microsoft
(antigamente conhecida como Indigo).
mais um projeto open source que ir dimi-
Servidor de Portal
e Business Integration
Continuando na direo de disponibilizar todos os seus softwares sob licena
open source, a Sun lanou mais dois projetos relacionados a servidores de aplicaes
e SOA: um servidor de portal, e um sistema
de Business Integration (BI).
Baseado no produto Sun Java System
Portal Server, o projeto OpenJava Portal
um servidor de portais completo, que tambm ser liberado sob licena open source.
Compatvel com a JSR-168 (Portlets), esse
servidor inclui um container para execuo de portlets, servios de colaborao
e federao de portais, e um engine de
busca, bem como recursos para integrao
com web services e dispositivos mveis. O
projeto inclui ainda vrios portlets prontos
que podero ser utilizados diretamente no
seu portal.
J o Open ESB uma implementao da
Edio 37 Java Magazine
17
Ferramentas de Desenvolvimento:
Adies Corporativas para o NetBeans
claro que nenhum evento voltado para
desenvolvedores poderia estar completo
sem anncios a respeito de ferramentas de
desenvolvimento. O NetBeans, que esteve
em foco durante boa parte do JavaOne,
ganhou uma srie de funcionalidades
nos ltimos meses, desde recursos vindos
de produtos consagrados, at novidades
diretamente sadas dos laboratrios de
pesquisa.
O primeiro dos projetos anunciados, e
que j est disponvel nas ltimas verses
beta do NetBeans, o Enterprise Pack, um
conjunto de extenses voltadas para projetos corporativos, que antes compunham o
produto Java Studio Enterprise. O Enterprise Pack open source e traz suporte a
todas as funcionalidades do JEE 5, alm
de editores de UML e BPEL, entre outras
novidades.
O editor visual de UML mantm sincronizados o cdigo Java e os diagramas. So
suportados os diagramas mais importantes, e a ferramenta traz funcionalidades
para levantamento de requisitos e mesmo
modelagem abstrata (ex.: modelos de domnio), sem utilizao da linguagem Java.
Com isso, possvel integrar, em uma
ferramenta, as necessidades
variadas de desenvolvedores, arquitetos,
projetistas e documentadores.
O editor
visual de
No-anncio
Com todos esses anncios de liberao
de cdigo sob licena open source, a Sun
no precisava ter feito o no-anncio
no incio da palestra do Schwartz. Green,
que justia seja feita estava h apenas
uma semana de volta Sun, acabou dando
a impresso de que a empresa est mais
uma vez empurrando com a barriga a
deciso de liberar sua implementao de
Java como open source. E vendo o histrico dos ltimos anos, bem provvel
que esteja mesmo. Como esse sempre
um assunto polmico, atraiu muitas das
atenes, e acabou por fazer passar despercebida a grande quantidade de projetos
e produtos disponibilizados como open
source, praticamente de uma vez, como
vimos acima.
Mas os projetos open source no se restringiram aos anncios da Sun. Enquanto
Schwartz e Green faziam jogos de palavras, Geir Magnusson, vice-presidente da
Compatibilidade importa: empresas que definiram o JEE 5 demonstram seu comprometimento com compatibilidade
Apache, liderou durante o JavaOne uma
apresentao sobre a situao do projeto
Harmony. O Harmony uma iniciativa
da Apache para construir uma implementao Java certificada e open source.
Magnusson, acompanhado de desenvolvedores que trabalham no projeto, demonstrou entre outras coisas, a implementao
de Swing sendo desenvolvida, que j
capaz de rodar diversas aplicaes de
porte. Apesar do Harmony no ser o nico
projeto indo nessa direo, vem ganhando
importantes contribuies de empresas
interessadas em ver uma implementao
open source do JSE.
At o ano passado, a implementao JEE
da Sun no era open source, embora j
existissem servidores open source certificados como JBoss e JOnAS. Quem sabe, no
prximo JavaOne teremos implementaes
open source do JSE, como Classpath, Kaffe,
GCJ e Harmony, ainda que a Sun at l no
tenha decidido como. A verdade que
a comunidade Java est definitivamente
enraizada nos conceitos de open source, e
temos muito a ganhar com isso.
Concluses
O JavaOne 2006 foi, mais uma vez,
um evento nico e especial. O Brasil foi
lembrado de forma importante, a nossa
delegao contou com representantes
de grandes empresas brasileiras, e o
evento todo foi muito voltado para open
source uma viso adotada fortemente
em empresas e no governo Brasileiro. O
JavaOne um termmetro da direo que
a comunidade Java est indo no mundo
inteiro, e ano aps ano, percebemos que
o Brasil est muito bem posicionado
nessa caminhada.
Bruno F. Souza
(bruno@javaman.com.br) o JavaMan, veterano da tecnologia
Java e um dos lderes do movimento Java no Brasil. Consultor Snior
da Summa Technologies, fundador da Sociedade de
Usurios Java (SouJava), e diretor da OSI (a organizao
que define o termo Open Source mundialmente),
expert individual no JCP e coordenador da comunidade
mundial de JUGs no Java.net.
19
10 Mais do Ecli
+
20 Java Magazine Edio 37
Suporte a JUnit 4
10
1
Exemplo:
5 Java
2
Estas ferramentas, disponibilizadas
como preview no NetBeans 5.5 Enterprise Pack, faro parte da verso 6.0.
pse 3.2
elease do Eclipse
21
Trabalho em equipe
Outro fator importante na rea de complexidade o suporte ao trabalho eficiente
de projetos com grandes equipes. O Eclipse
3.2 permite exportar/importar grupos de
breakpoints, facilitando a depurao em
equipe. H vrias melhorias na infra-estrutura de controle de verses e suporte
a CVS, como templates para comentrios
de commit, melhorias na resoluo de
conflitos (com opo de merge no cliente),
histrico de alteraes unificado (para o
Local History e CVS ou outro servidor
de controle de verses), e uma opo de
visualizar anotaes no editor com as
alteraes do repositrio.
Evoluo em refactoring
3
Ou
que no estivesse aberto, ou que no fosse configurado como dependente do projeto A (e sim de um
arquivo JAR produzido por A).
Figura 3. Ao renomear um mtodo, temos uma opo para manter o mtodo original como um stub (deprecated) que somente delega a invocao ao mtodo atualizado.
Listagem 2. Exemplo de script de refactoring
<?xml version=1.0 encoding=utf-8 standalone=no?>
<session version=1.0>
<refactoring comment=
Rename method Banco.findConta(...) to localizaConta
- Original element: Banco.findConta(...)
- Renamed element: Banco.localizaConta(...)
- Update references to refactored element
- Keep original element as deprecated delegate to refactored element
delegate=true deprecate=true
description=Rename method findConta flags=589830
id=org.eclipse.jdt.ui.rename.method
input=/src<{TestRefactoring.java[Banco~findConta~QString;
name=localizaConta project=JM37 references=true version=1.0/>
</session>
23
Cache
O Eclipse gasta bastante memria com
objetos que modelam o contedo das
classes utilizadas pelos projetos abertos
no seu workspace. Isto inclui tanto os seus
prprios fontes (.java) quanto as bibliotecas
referenciadas (.jar, .zip, .class). Este cache
de objetos torna operaes como busca,
referncia cruzada, refatorao, outlining,
auto-completamento de cdigo, exibio
de JavaDocs etc. muito mais rpida, porque
o Eclipse no precisa ficar analisando o
contedo de JARs ou fazendo parsing de
fontes Java a todo instante.
Mas como um workspace pode ser arbi-
Recuperao de sintaxe
JSE 6
O novo Eclipse suporta a plataforma
JSE 6, apesar de que esta s ser finalizada depois (o release final do Eclipse 3.2
previsto para junho, mas o do Mustang
s para o incio do segundo semestre). O
suporte especfico exigido pelo novo JSE
consiste principalmente na compilao
de bytecodes, que agora inclui atributos
de pr-verificao, os quais tornam o carregamento das classes mais rpido (uma
otimizao que o JSE 6 tomou emprestado
da plataforma JME). Alm disso, o Eclipse
funciona corretamente sobre uma JVM
6.0.
JSE 5
O Mustang ainda est no mdio a longo
prazo, especialmente em ambientes JEE,
25
Plug-ins de terceiros
Listagem 3. Resultado do novo comando Generate hashCode() and equals().
public class TestHashcodeEquals {
private String nome;
private int idade;
public int hashCode () {
final int PRIME = 31;
int result = 1;
result = PRIME * result + idade;
result = PRIME * result + ((nome == null) ? 0 : nome.hashCode());
return result;
}
public boolean equals (Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
final TestHashcodeEquals other = (TestHashcodeEquals)obj;
if (idade != other.idade) return false;
if (nome == null) {
if (other.nome != null) return false;
}
else if (!nome.equals(other.nome)) return false;
return true;
}
}
5
Estas
Ambientes de execuo
Callisto
6
A no ser que se baixasse o Eclipse SDK, no recomendado por incluir muita coisa que a enorme maioria
dos usurios no precisa (o cdigo-fonte completo do
Eclipse, e o PDE).
27
Instalando o Callisto
Para testar o Callisto, comece baixando
e instalando, da forma tradicional, s o
Eclipse Platform (no precisa nem mesmo
do JDT). Depois
entre em Help>Software
Updates>Find and Install>Search for new
features to install.
Voc ver que, alm do
tradicional Eclipse.org update site, existe
um Callisto Discovery Site. Selecione este
site de update e clique em Finish. O Eclipse
primeiro apresenta uma lista de mirrors;
selecione o mais prximo, e voc ver algo
como o mostrado na Figura 8.
As opes de update deste site seguem
um versionamento do prprio projeto
Callisto, do qual at mesmo o ncleo do
Eclipse um subprojeto (ainda que o
principal deles).
O primeiro release, Callisto 1.0, ser
formado dos seguintes subprojetos:
1. Eclipse (Runtime, JDT e PDE) 3.2
2 . E M F ( E c l ip s e
Mo d e l i n g F r a m e work) / SDO (Service
Data Objects) / XSD
(XML Schema Infoset
Model) 2.2.0
3. GEF (Graphical
Editor Framework)
3.2
eclipse.org
Projeto Eclipse.
eclipse.org/callisto
Callisto, o release unificado do Eclipse.
eclipsecon.org/2006
Conferncia EclipseCon 2006, com muito material
disponvel sobre as ltimas novidades e prximos
planos.
www28.cplan.com/javaone06_cv_124_1/
sessions_catalog.jsp?ip=yes
O JavaOne 2006 tambm possui muitas
apresentaes sobre o Eclipse. Para baix-las,
filtre com keyword=Eclipse. Se o site pedir, use o
login=contentbuilder e password=doc789 ( um
login/senha liberado para uso geral).
Concluses
O Eclipse 3.2 no um update revolucionrio, como o 3.0, que introduziu grandes
mudanas na arquitetura de plug-ins;
nem um update to crtico quanto o
3.1, que trouxe o suporte s novidades
de linguagem do JSE 5. Ainda assim, somando o enorme nmero de melhorias,
temos um importante release que ir
certamente beneficiar qualquer usurio
atual do Eclipse. E para os iniciantes, as
facilidades de instalao e configurao
do Callisto so um timo motivo para
reavaliar este IDE.
Mesmo tendo descrito tantas melhorias,
deixamos de mencionar vrias coisas. O
PDE, SWT, JFace, Help e RCP tambm
trazem muitos avanos para desenvolvedores de plug-ins ou de aplicaes ricas.
Mesmo no IDE Java, tivemos que passar
por cima de vrias pequenas melhorias
em praticamente todos os componentes
do Eclipse editor de cdigo, debugger,
views auxiliares, Ant etc. inclusive
algumas importantes, como o suporte
muito melhorado ao CamelCase em
Edio 37 Java Magazine
29
Introduo ao
JMS
utilizando o JBoss
Fernando Lozano
Este artigo apresenta uma introduo ao
JMS, com exemplos bsicos, e demonstra
como rodar os exemplos no JBoss 4 (mas
acreditamos que todos os cdigos funcionem sem modificaes em qualquer verso
desde a 3.0.8).
Alguns desenvolvedores acreditam erroneamente que seja necessrio usar EJB
para usufruir do JMS, talvez por causa
da existncia dos Message-Driven Beans,
atrelados ao JMS na especificao EJB. Na
verdade, o servio e as API do JMS so totalmente independentes dos EJBs. Pode-se
fazer uma analogia com os Entity Beans,
que permitem persistncia em bancos de
dados via JDBC, mas nada impede o desenvolvedor de usar JDBC diretamente, sem
passar por EJBs. Reforando esta independncia entre o JMS e EJBs, os exemplos de
cdigo neste artigo sero de clientes JMS
independentes, e no EJBs.
31
Introduo ao JMS
Internet
Rede
Corporativa
Crdito
Usurio / Comprador
Vendas
Frente de Loja
Estoque
Rede DMZ
Entrega
Ordens de compra
Figura 1. Viso conceitual de uma grande loja virtual, em termos de componentes de alto nvel
Conceitualmente, o sistema da loja
virtual segue a arquitetura apresentada
na Figura 1. O sistema de Frente de Loja
apenas registra ordens de compra que
sero processadas posteriormente pelo
verdadeiro Sistema de Vendas. E o Sistema
de Vendas quem interage com os sistemas
de Crdito, Estoque e Entrega. Estes ltimos freqentemente so sistemas externos
empresa que mantm a loja virtual.
As principais caractersticas desta arquitetura que os dois sistemas (Frente de Loja e Vendas) so totalmente
desacoplados e a comunicao entre eles
assncrona. Estes conceitos valem uma
explicao mais detalhada:
Conceitos do JMS
Um servio JMS, assim como todo middleware de mensagens, manipula informaes na forma de mensagens. O formato da
mensagem quais informaes ela contm
e como ela deve ser interpretada opaco
para o JMS. Ou seja, o JMS apenas cuida
de armazenar as mensagens at que sejam
consumidas por algum cliente; ele no
interpreta de nenhuma forma as informaes contidas nas mensagens. Isto permite
inclusive que um servio JMS atenda a
clientes no-Java, ou que middlewares de
mensagens implementados com outras
tecnologias possam ser transformados em
servios JMS.
Uma mensagem no JMS possui propriedades (properties), atributos (attributes) e
um corpo (body):
A informao em si da mensagem est
no seu corpo, que no JMS pode ser um
array de bytes, um texto (String), um mapa
(java.util.Map) ou um objeto serializado.
Caso o volume de informaes contidas
na mensagem seja muito grande, h ainda
a possibilidade de se acessar o corpo da
mensagem como um stream do java.io, que
a aplicao pode aninhar dentro de qual-
2
A configurao padro do JBoss utiliza o HSQLDB,
mas ela pode ser modificada para usar outros bancos de
dados ou mesmo arquivos simples, sem perda de funcionalidade.
Queue JMS
Produtor
de
Mensagens
Mensagem
A
Mensagem
B
Mensagem
C
Consumidor
de
Mensagens
Topic JMS
Produtor
de
Mensagens
Mensagem
A
Mensagem
B
Mensagem
C
Mensagem
A
Mensagem
B
Mensagem
C
Assinante
de
Mensagens
Assinante
de
Mensagens
33
Introduo ao JMS
no servidor. Desde que conceitualmente tudo funcione como se cada assinante tivesse sua prpria
cpia de cada mensagem, qualquer otimizao
Em servidores Java EE 5.0, ser possvel substituir a busca explcita no JNDI (mtodo lookup())
permitida.
A API JMS
Vamos conhecer a API JMS por meio de
exemplos. A Listagem 1 apresenta um
cliente simples, que insere uma mensagem de texto dentro de uma fila chamada
queue/testQueue. Esta fila pr-definida
na instalao do JBoss. Assim, o exemplo
pode ser executado sem necessidade de
nenhuma configurao prvia no servidor. Mais adiante ser apresentado como
compilar e executar este cliente.
Todo cliente JMS, independente de ser
um produtor ou consumidor de mensagens (e nada impede que ele desempenhe ambos os papis) deve obter um
O JNDI (Java Naming and Directory Interface) um
servio e API padro do Java EE que permite localizar recursos locais ou remotos baseado em um nome textual.
Estes recursos podem ser desde objetos Java at usurios
e servidores de rede. O cliente do JNDI parte do Java
SE, e do servidor integrado ao servio JMS, podendo ser
compartilhado por outros servios Java EE.
3
Listagem 1. EnviaFila.java - Cliente que envia uma mensagem de texto para um queue JMS
import javax.jms.*;
import javax.naming.*;
public class EnviaFila {
public static void main(String[] args)
throws NamingException, JMSException
{
// obtm referncias ao QueueConnectionFactory e fila via JNDI
Context jndiContext = new InitialContext();
QueueConnectionFactory connectionFactory =
(QueueConnectionFactory)jndiContext.lookup(ConnectionFactory);
Queue queue = (Queue)jndiContext.lookup(queue/testQueue);
// conecta fila e inicia uma sesso
QueueConnection connection =
connectionFactory.createQueueConnection();
QueueSession session = connection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
// envia uma nica mensagem de texto
QueueSender sender = session.createSender(queue);
TextMessage message = session.createTextMessage();
message.setText(Oi via JMS);
sender.send(message);
// libera recursos
sender.close();
session.close();
connection.close();
ConnectionFactory
Destination
Message
QueueConnectionFactory
Queue
TextMessage
TopicConnectionFactory
Topic
BytesMessage
Connection
Session
StreamMessage
QueueConnection
QueueSession
MapMessage
TopicConnection
TopicSession
ObjectMessage
MessageProducer
MessageConsumer
QueueSender
QueueReceiver
TopicPublisher
TopicSubscriber
JMSException
35
Introduo ao JMS
Listagem 2. RecebeFila.java - Cliente que recebe uma mensagem de texto de um queue JMS
import javax.jms.*;
import javax.naming.*;
public class RecebeFila {
public static void main(String[] args)
throws NamingException, JMSException
{
// obtm referncias ao QueueConnectionFactory e fila via JNDI
Context jndiContext = new InitialContext();
QueueConnectionFactory connectionFactory =
(QueueConnectionFactory)jndiContext.lookup(ConnectionFactory);
Queue queue = (Queue)jndiContext.lookup(queue/testQueue);
// conecta fila e inicia uma sesso
QueueConnection connection =
connectionFactory.createQueueConnection();
QueueSession session = connection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
// recebe mensagens
QueueReceiver receiver = session.createReceiver(queue);
connection.start();
while (true) {
TextMessage message = (TextMessage)receiver.receive(1);
if (message != null)
System.out.println(Recebi: + message.getText());
}
Compilando e testando
os exemplos no JBoss
Para que seja possvel compilar os
dois exemplos para o JBoss, basta inserir no classpath do sistema o pacote
client/jboss-j2ee.jar fornecido com o servidor.
Outros servidores Java EE podero fornecer as interfaces da API JMS em um pacote
com nome diferente; ainda assim dever
ser possvel rodar os mesmos programas
em qualquer servidor Java EE (inclusive
usando os mesmos .class compilados com o
JBoss), desde que seja previamente criado
o queue queue/testQueue.
A execuo dos exemplos um pouco
mais complicada. Primeiro, o servidor
JBoss deve estar em execuo, utilizando
a configurao default inalterada em
relao ao pacote jboss-4.0.3SP1.zip (ou
mais recente) fornecido em jboss.org. Alm
disso, vrios pacotes JAR contidos na pasta
client do JBoss devem ser acrescentados ao
classpath.
Para facilitar, os fontes para download
deste artigo incluem um buildfile para
o Ant com alvos para compilar todos
os exemplos e executar cada um deles.
O buildfile configura para a execuo
dos exemplos todos os pacotes JAR na
pasta client do JBoss, o que no atrapalha apenas coloca no classpath alguns
pacotes que no seriam estritamente
necessrios.
Ento, basta editar o arquivo build.
xml e modificar o valor da propriedade
jboss para indicar o diretrio correto de
instalao do JBoss em seu computador.
E, com o JBoss ativo, digitar os comandos
destacados em negrito a seguir (o sinal $
representa o prompt de comandos e, claro,
no deve ser digitado):
$ ant compila
Buildfile: build.xml
init:
compila:
[javac] Compiling 10 source files to
/home/fernando/JavaMagazine/jms/jmsjboss/classes
BUILD SUCCESSFUL
Total time: 6 seconds
$ ant envia
Buildfile: build.xml
init:
envia:
[java] log4j:WARN No appenders could be found for
logger (org.jboss.mq.referenceable.SpyConnectionFactory
ObjectFactory).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 3 seconds
jboss.mq.server.jmx.Topic> indesejados. Na
verdade, todo o arquivo pode ser removido sem prejuzo para o funcionamento
do servio JMS do JBoss. O nico cuidado a se tomar no remover a fila DLC
(dead letter queue). Felizmente, esta
fila definida em outro arquivo, chamado
jbossmq-service.xml, que no deve ser editado a no ser por profundos conhecedores
da arquitetura interna do JBoss.
Para criar uma nova fila, basta criar um
arquivo com um nome qualquer, e o sufixo
-service.xml (ex.: minhaFila-service.xml), seguindo o modelo na Listagem 3, e copi-lo
para a pasta deploy da sua configurao
do servidor (na configurao padro,
server/default/deploy). O JBoss ir processar
o arquivo e imediatamente ativar todas as
filas (queue ou topic) definidas por ele.
Ser possvel ento modificar os exemplos apresentados nas Listagens 1 e 2 para
que eles usem a fila queue/minhaFila em
vez de queue/testQueue, e ser tambm
possvel verificar a presena de mensagens
na fila por meio do JBoss Web Console.
O JBoss sempre acrescenta ao nome JNDI de
uma fila o prefixo queue/ ou topic/, conforme
Figura 4. JBoss Web Console aps a execuo do primeiro exemplo, indicando a presena de uma mensagem na fila
queue/testQueue aguardando para ser consumida
Edio 37 Java Magazine
37
Introduo ao JMS
Implementando segurana
Este foi um exemplo trivial de criao de
fila. Em aplicaes reais, haver necessidade de configurar regras de autenticao
e de controle de acesso, para definir que
clientes (ou usurios) podem enviar e receber mensagens de cada fila. As filas de
Listagem 3. minhaFila-service.xml Arquivo de configurao para definir uma nova fila JMS no JBoss
<?xml version=1.0 encoding=UTF-8?>
<server>
<mbean code=org.jboss.mq.server.jmx.Queue
name=jboss.mq.destination:service=Queue,name=minhaFila>
<depends optional-attribute-name=DestinationManager>
jboss.mq:service=DestinationManager</depends>
<depends optional-attribute-name=SecurityManager>
jboss.mq:service=SecurityManager</depends>
<attribute name=MessageCounterHistoryDayLimit>-1</attribute>
</mbean>
</server>
Listagem 4. RecebeAssincrono.java cliente que recebe assincronamente mensagens de uma fila JMS
import javax.jms.*;
import javax.naming.*;
public class RecebeAssincrono {
private class RecebeUmaMensagem implements MessageListener {
public void onMessage(Message msg) {
try {
TextMessage message = (TextMessage)msg;
if (message != null)
System.out.println(Recebi: + message.getText());
}
catch (JMSException e) {
System.out.println(Erro ao receber mensagem: + e);
e.printStackTrace();
}
}
};
public RecebeAssincrono() throws NamingException, JMSException {
// obtm referncias ao QueueConnectionFactory e fila via JNDI
// ... cdigo omitido por ser igual listagem 2 ...
// conecta fila e inicia uma sesso
// ... cdigo omitido por ser igual listagem 2 ...
// recebe mensagens
QueueReceiver receiver = session.createReceiver(queue);
receiver.setMessageListener(new RecebeUmaMensagem());
connection.start();
}
public static void main(String[] args) throws
NamingException, JMSException, InterruptedException
{
new RecebeAssincrono();
while (true)
Thread.sleep(10000);
}
}
exemplo fornecidas com o JBoss demonstram como fazer estas configuraes, segundo o modelo de segurana declarativa
padro do Java EE (apresentado nesta coluna na Edio 23). Reunindo os exemplos
deste artigo, os exemplos fornecidos com
o JBoss, e o artigo sobre segurana citado,
o leitor no dever ter dificuldades em
configurar queues e topics seguros.
5
Os demais exemplos apenas trocam as classes de
queue pelas classes de topic, ou acrescentam uma ou
duas chamadas novas a mtodos da API JMS.
JMS e EJB
esenvolvedores interessados em
usar o JMS junto com EJBs tambm
podero utilizar os exemplos fornecidos,
com pequenas modificaes.
Um Message-Driven EJB (MDB) sempre
consome mensagens de forma assncrona, de modo que seu cdigo nada
mais do que uma verso resumida de
RecebeAssincrono.java ( Listagem 4 ) .
O MDB basicamente se limita a implementar o mtodo onMessage(), enquanto
que o container EJB quem registra o
MDB como listener do QueueReceiver (ou
TopicSubscriber) configurado no descritor
de deployment.
J um EJB que envia mensagens para
uma fila pode ser de qualquer tipo (mas
em geral ser um Session EJB), e utilizar
exatamente o mesmo cdigo de cliente
JMS apresentado nos exemplos de envio
de mensagens.
O uso de seletores com MDBs no exige
o uso direto da API JMS, pois a condio
do seletor especificada no descritor de
deployment do EJB. (Seletores so filtros
de mensagens baseados nas propriedades das prprias mensagens)
Na verdade, o uso de JMS com EJBs
to simples e to parecido com o uso de
JMS sem EJBs que no achamos necessrio incluir exemplos especficos para
download. Qualquer desenvolvedor com
conhecimento de EJBs ter mo vrios
exemplos de Message-Driven EJBs, e este
artigo fornece o conhecimento bsico
sobre a API JMS que ele necessitar para
entender estes exemplos.
Concluses
Este artigo apresentou conceitos sobre
middlewares de mensagens, e os primeiros
passos para trabalhar com a API JMS e a
configurao e monitorao do servio
JMS no servidor JBoss. Procuramos no
duplicar o contedo de outros exemplos
e tutoriais disponveis na internet, mas
sim reunir em um s lugar todo o que o
leitor necessita para iniciar o desenvolvimento de aplicaes JMS e dar uma idia
de situaes onde o uso de JMS pode ser
vantajoso. Dada a simplicidade da API e
sua maturidade, no h motivos para no
us-la sempre que houver uma oportunidade!
java.sun.com/products/jms
Pgina da Sun sobre JMS, incluindo artigos
e tutoriais
jboss.org
Downloads e documentao do servidor JBoss
jcp.org/en/jsr/detail?id=914
Especificao JMS, muito til especialmente para
obter o Javadoc da API
javamagazine.com.br/downloads/jm37/
jm-jmsjboss.zip
Fernando Lozano
(flozano@javamagazine.
com.br, www.lozano.eti.br)
trabalha h mais de 10 anos
com desenvolvimento de sistemas
de informaes e integrao de redes, sendo um dos
pioneiros do uso do Software Livre no Brasil. Dentro
da comunidade, atua como Conselheiro do LPI
Brasil, Webmaster da FSF e Community Manager do
Java.net. Atualmente consultor associado Neki
Technologies (www.neki.com.br).
39
Criando Plug-ins pa
Iniciando com o Eclipse Plug-in Development
possibilidade de customizao ,
sem dvida, um dos pontos que
devem ser considerados durante
a escolha de uma ferramenta de desenvolvimento. O Eclipse oferece muitas facilidades de personalizao e extenso, e no
A arquitetura do Eclipse
Grande parte do sucesso do IDE Eclipse
deve-se sua arquitetura extensvel (uma
IDE aberta e extensvel para tudo
e nada em especfico). O
Eclipse (neste artigo
usaremos Eclipse para nos
Como no apenas o Eclipse, mas diversas IDEs permitem extenso de suas funcionalidades atravs da adio
de plug-ins, isso motivou o desenvolvimento da JSR-198
(A Standard Extension API for Integrated Development
Environments), cujo objetivo permitir que plug-ins
possam ser implementados independentemente da IDE
onde sero utilizados.
ra o Eclipse
Environment
Estrutura de um plug-in
A partir da verso 3.0 do Eclipse, a descoberta e a ativao de plug-ins passaram
a ser comandadas por um mecanismo
baseado no Open Services Gateway initiative (OSGi). O uso dessa tecnologia
melhorou a portabilidade da ferramenta
entre diversos sistemas operacionais, e
fez com que os plug-ins passassem a ser
implementados segundo um novo modelo
(OSGi bundles).
O OSGi foi concebido originalmente para aplicaes mveis, mas aos poucos tem sido adotado
por aplicaes fora desse mercado. Seu objetivo
padronizar a maneira como os componentes devem ser registrados em uma aplicao, permitindo
que sejam carregados ou descarregados dinamicamente. O OSGi tem ganhado bastante destaque
ultimamente, e diversos projetos da Apache j
utilizam a tecnologia (ex.: Apache Directory).
As views fazem parte do Workbench. Alguns exemplos bastante conhecidos de views so Console, Tasks e
Properties.
41
O arquivo plugin.xml
O documento XML a seguir, extrado da
documentao do Eclipse, ilustra um descritor de plug-in simples, que implementa
uma nova view no Eclipse:
<?xml version=1.0 encoding=UTF-8?>
<?eclipse version=3.0?>
<plugin>
<extension point=org.eclipse.ui.views>
<category name=Hello Category
id=com.example.helloworld>
</category>
<view name=Hello View
icon=icons/sample.gif
category=com.example.helloworld
class=com.example.helloworld.HelloWorldView
id=com.example.helloworld.HelloWorldView>
</view>
</extension>
</plugin>
Plug-in Development
Environment (PDE)
Vimos que a plataforma
Eclipse responsvel por
gerenciar todo o ciclo de
vida de um plug-in, escondendo do desenvolvedor os
detalhes de infra-estrutura.
Assim, o desenvolvedor
passa a se preocupar apenas com a implementao
Figura2. Informando os dados bsicos do projeto.
da lgica de negcios do
plug-in, podendo aproveiA utilizao do plug-in ser feita da
tar os recursos de uma ferramenta bastante
valiosa (que tambm um plug-in!): o
seguinte maneira: o usurio seleciona,
Eclipse PDE. O Plug-in Development Enno Package Explorer, o arquivo que deseja
vironment um ambiente completo para
editar, clica com o boto direito e seleciona
desenvolvimento de plug-ins, que contemno menu popup o item correspondente.
pla recursos para sua construo, teste,
Todos os caracteres especiais do arquivo
(que deve estar aberto no editor) sero
depurao e empacotamento. O Eclipse
SDK j inclui o PDE, que vem configurado
substitudos automaticamente, e uma
barra de progresso indicar o andamento
e pronto para uso.
da operao.
Um exemplo completo
As funcionalidades do PDE sero apresentadas atravs do desenvolvimento
completo de um plug-in que automatiza a
codificao de caracteres especiais.
Quando escrevemos documentao
JavaDoc ou arquivos de propriedades
(.properties), um boa prtica utilizar
codificao HTML para caracteres especiais, permitindo que o texto seja exibido
corretamente em diversos browsers.
Desse modo, o caractere deve
ser substitudo por ã, o
caractere por ç e assim sucessivamente (veja referncia
ao final do artigo).
O maior problema dessa abordagem que
o desenvolvedor deve conhecer os cdigos
dos caracteres e digit-los corretamente. O
nosso plug-in far isso automaticamente,
substituindo caracteres especiais por seus
correspondentes em HTML.
de gerenciamento (Class
Name). Alm disso,
necessrio informar
se o plug-in faz alguma
contribuio para a interface grfica do Eclipse e se uma aplicao
rich client5 deve ser gerada.
Novamente vamos aceitar as opes
default, preenchendo os campos ID,
Name, Provider e Class. Nosso plug-in ser
identificado como br.com.jm.plugin (
uma conveno utilizar o mesmo nome
do projeto). E como o plug-in adiciona um
menu popup IDE, deixaremos marcada
a opo This plug-in will make contributions
to the UI.
A terceira tela do wizard (Figura4)
permite escolher um dentre diversos
templates de plug-ins disponveis no
PDE. O uso de um template facilita o desenvolvimento: baseado nele, o PDE gera
automaticamente o esqueleto de todas
as classes envolvidas e configura adequadamente os pontos de extenso necessrios. claro que ainda sero necessrias
alteraes no cdigo gerado para ajustar o
comportamento do plug-in, como veremos
a seguir. Para desenvolver o nosso plug-in
usaremos o template
Plug-in with a popup
menu.
A ltima tela do wizard (Figura5) configura
o novo popup. Como especificado anteriormente, um
menu popup ser exibido
sempre que o usurio selecionar um arquivo e clicar
com o boto direito. A filtragem
dos arquivos que sero vlidos para essa
operao (aqueles para os quais o popup
estar disponvel) configurada atravs
de duas propriedades: Target Objects Class
e Name Filter.
Na propriedade Target Objects Class, utilizaremos org.eclipse.core.resources.IResource,
especificando que qualquer recurso
disponibilizar o menu (adiante faremos
um refinamento dos arquivos que efetivamente permitiro o popup). A propriedade Name Filter ser preenchida com *
(indicando qualquer nome de recurso). O
novo submenu popup ser denominado
Java Magazine (propriedade Submenu
Name) e conter um nico item, denominado Substituir caracteres especiais
(propriedade Action Label). A classe
br.com.jm.plugin.popup.actions.SubstituirAction
(o valor da propriedade Action Class) responsvel por gerenciar as aes desse item
de menu e ser descrita mais adiante.
Analisando o plugin.xml
Na Listagem1 exibido o cdigo do
plugin.xml, gerado pelo wizard. Vamos
agora analisar esse descritor e entender
cada uma de suas partes.
O primeiro elemento, <extension>, especifica o nico ponto de extenso utilizado
pelo plug-in:
<extension point=org.eclipse.ui.popupMenus>
Este elemento adiciona uma contribuio (extenso) para menus popup, mas
este s ser exibido se o objeto selecio-
5
Basicamente, uma aplicao rich client um programa
cliente no-web com interface visual. O Eclipse oferece
facilidades para criao de aplicaes desse tipo atravs
da RCP (Rich Client Platform).
43
Codificando as classes
Agora que o esqueleto
do plug-in est pronto,
partiremos para sua implementao. O primeiro
passo consiste em indicar Figura9. Aps iniciar a nova instncia da IDE, o plug-in estar disponvel.
as dependncias (outros
MF). As dependncias devem ser aponplug-ins) necessrias para o nosso plug-in.
tadas na aba Dependencies, como indicado
O PDE disponibiliza uma view especial
na Figura10.
para edio das configuraes do plug-in,
Nosso plug-in composto de quatro de clasonde seus atributos podem ser manipuses: br.com.jm.plugin.JMPlugin (Listagem2),
lados de forma amigvel. Clicando duas
vezes no arquivo plugin.xml, as configubr.com.jm.plugin.popup.actions.SubstituirAction
raes so mostradas num editor especial
(Listagem3),br.com.jm.plugin.popup.actions.
com diversas abas. Nessas abas possvel
Substituidor (Listagem4) e br.com.jm.plugin.
visualizar e editar as caractersticas do
popup.actions.Config (Listagem5).
plug-in (inclusive o arquivo MANIFEST.
importante ressaltar que a classe
45
package br.com.jm.plugin;
import org.eclipse.ui.plugin.*;
import org.eclipse.jface.resource.ImageDescriptor;
import org.osgi.framework.BundleContext;
package br.com.jm.plugin.popup.actions;
org.eclipse.jface.action.IAction;
org.eclipse.jface.dialogs.MessageDialog;
org.eclipse.jface.text.Document;
org.eclipse.jface.viewers.ISelection;
org.eclipse.swt.widgets.Shell;
org.eclipse.ui.*;
org.eclipse.ui.texteditor.ITextEditor;
import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import java.util.Map;
import
import
import
import
import
import
org.eclipse.core.runtime.IProgressMonitor;
org.eclipse.jface.dialogs.ProgressMonitorDialog;
org.eclipse.jface.operation.IRunnableWithProgress;
org.eclipse.jface.text.*;
org.eclipse.swt.widgets.Shell;
org.eclipse.ui.*;
if (total > 0) {
MessageDialog.openInformation(new Shell(),
Substituio
de caracteres, total
+ caractere(s) substitudo(s));
}
else
{
MessageDialog.openWarning(new Shell(),
Substituio
de caracteres,
Nenhum caractere substitudo);
}
monitor.worked(1);
}
catch (Exception e) {
// tratar
}
finally {
monitor.done();
}
ø);
Ø);
ß);
®);
©);
€);
æ);
mapa.put(,
à);
mapa.put(, ´);
mapa.put(, À);
mapa.put(, Á);
mapa.put(, â);
mapa.put(, Â);
mapa.put(, ä);
mapa.put(, Ä);
mapa.put(,
å);
mapa.put(, Å);
mapa.put(, ã);
mapa.put(, Ã);
mapa.put(, ç);
mapa.put(, Ç);
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
é);
É);
è);
È);
ê);
Ê);
ë);
Ë);
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
ï);
Ï);
í);
Í);
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
ô);
ó);
Ô);
Ó);
ö);
Ö);
õ);
Õ);
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
mapa.put(,
ù);
Ù);
û);
Û);
ü);
Ü);
47
}
...
monitor.worked(1);
new ProgressMonitorDialog(win.getShell()).
run(false, false, m);
total = m.substituidos();
Empacotando o plug-in
Figura11. Progresso da substituio de caracteres.
Aps implementao e
teste do plug-in, necessrio
empacot-lo para distribuio. Para isso o PDE disponibiliza um wizard, que pode
ser acessado atravs do link
Export Wizard, na aba Overview da perspectiva Plug-in
Development (Figura12).
O wizard simples. Aceitando as opes default, o
arquivo br.com.jm.plugin_
1.0.0.zip ser gerado no
diretrio indicado (neste
caso, em c:\teste). Este ZIP
conter um JAR de mesmo
nome, que para instalao
deve ser copiado para o
diretrio plugins do Eclipse.
Depois disso, s reiniciar
o Eclipse e o plug-in estar
disponvel.
Concluses
O Eclipse possui uma grande capacidade
de extenso, e sua arquitetura foi pensada
para permitir que diversas contribuies
possam trabalhar em conjunto para oferecer novos recursos ferramenta.
Uma das principais facilidades para o
desenvolvimento de plug-ins o PDE,
que contm um conjunto de recursos que
auxiliam as tarefas do desenvolvedor e
aceleram a criao de extenses. Aqui
foram apresentados conceitos e exemplos
para iniciar a criao de plug-ins. Portanto
agora s comear a codificar!
onjava.com/pub/a/onjava/2005/02/09/
eclipse.html
Introduo aos plug-ins do Eclipse
eclipse.org/articles/
Article-PDE-does-plugins/PDE-intro.html
Introduo ao Eclipse PDE
help.eclipse.org/help31/index.jsp
Help online do Eclipse 3.1
ramsch.org/martin/uni/fmi-hp/
iso8859-1.html
Caracteres especiais em HTML
javamagazine.com.br/downloads/jm37/
jm-eclipseplugins.zip
Andr Dantas Rocha
(ad-rocha@uol.com.br)
bacharel em Cincias da Computao pela UNIFACS, mestre
em Engenharia de Software pela USP
e consultor da Politec. (O autor agradece a Cleiton
Diniz, headshot, pela ajuda na codificao.)
'%.%3)3