0% found this document useful (0 votes)
3 views68 pages

Java Magazine Edicao 73

The document discusses the highlights of JavaOne 2009, emphasizing the importance of community and advancements in Java technologies such as Cloud Computing and JavaFX. It features articles on various topics including Hibernate, JavaServer Faces, and Scrum, along with insights from the event's keynotes and interviews with industry leaders. The magazine also encourages reader feedback and offers access to previous editions and online resources for software development education.

Uploaded by

Aldemir Queiroz
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF or read online on Scribd
0% found this document useful (0 votes)
3 views68 pages

Java Magazine Edicao 73

The document discusses the highlights of JavaOne 2009, emphasizing the importance of community and advancements in Java technologies such as Cloud Computing and JavaFX. It features articles on various topics including Hibernate, JavaServer Faces, and Scrum, along with insights from the event's keynotes and interviews with industry leaders. The magazine also encourages reader feedback and offers access to previous editions and online resources for software development education.

Uploaded by

Aldemir Queiroz
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF or read online on Scribd
me Magazine ec i Sy, LSB GEL 7 — ww AS o—- —— = - ~ , «~~ 7 wr = , A persisténcia do alleys) sarees | Grpecss eckgoageme 3 We Oreciee sari COTA try Carry ent CU on er ule desenvolvimento de portais —————————————— ee eee Sumario 06 - JavaOne 2009: Java + Community = Powerful (Osdestaqus do mais importante evento do ano: hud, vaF¥, TV Digital fava SE EE. [Ya Senge) Conthecaospassos para ciarcomponentes SF [Moros Sousa} Java 28 ~ Portals Corporativos Teoria e prética no desenvolvimento de portlets para Portas Corporativas [Wagner Santos ¢ Marcelo Zanatto ) (0, eusouo DevMan!Desta pagina em ciante, eu estar! he ajudando a compreender com ainda mais faciidade o contetido desta edicso. Seré um prazer contar com sua companhial Confira abaixo 0 que. teremos nesta revista: ‘46 ~ Desenvolvendo com Hibernate Explore Hibernate, conheca seus conceltos eaprenda a configuar€ esenvolver uma aplicacio Uzi Pree Somue Sats} | j58 - Spring-WS de pontaa ponta oa etic, Cre [ete ese eae (Whe Zanini} / 68 — 0 diferencial Scrum Eagenbain Como gear vantagem compeitva para sua orgaizagi através de ma aboragem Agile enxuta no desenvolvimento de sistemas [Wonel inet! | 14 Desenvolvendo com JavaServer Faces - Parte 2 Boas Praticas ng. de Software TT SUE Ree ely +3 video-aulas sobre Introdugao a Design Patterns e Principios de Design. Para visualizar acesse o link /atp-/[Link]/aticles/istcompasp?keyword=im73&codigobanca= iano ‘Gostou das video aulas? © portal wwraevnedlacom.b possul mais de 2 mil video aulase dezenas de cursos online sobre desenvolvimento de software! ‘Agora voce pode comprar a vdeo aulas que prefer e fazer sua propria combinagio de videos! Saba mals em [Link] br/creditos Edigbes Anteriores da Java Magazine \Vocé pode comprar todasas edigbes anteriores da Java Magazine através do site DevMedial Para isso basta acessar [Link] Dé seu feedback sobre esta edica ‘A Java Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que voce, leitor, acha da revista! Dé seu voto sobre esta edicSo, artigo por artigo, através do link: [Link]/javamagazine/feedback Para votar, voce vai precisar do cédigo de banca desta edico, que é: hibernate j Ano io 73 2009-554 6754361 Edigao ors sald Dede (opineognatcn) dato pina (tpndvagnatcon) Arte ‘apse iagramaco Romie ha (rmeloodermdla com) Producao ‘rina de Marketing ale abel leedateracont) fev eSupeite Tage cn higacncoedemedaom ordenag Gr Dai on iiaodemeds om) Distribuicdo terns gous. Aun 976 8 car 33.90, 0 m7 7HON8 Atendimento ao leitor ‘Abed osu uma Cental de tendnento in, cade vc pode ‘asus divi obese enviar ise sugestese fla ce umde ss atest raves a sa centatambemn psa dads ‘fra ositao sta deasinataseconeadatade ena desta reas. esse wn derma com lent se eee cantons aso leone 71382-5038, Edigdes anteriores aa edie ners res rage cde gua pblicacao de Grapo DevMetia de forma pita e segura, em trendemetcon aes, Publicidad pobadeademeacnty ~ 213382 038 vndies Aundrea Gaga Dee ck ‘ul suzma uproar 10ers dete ras emma 20 aes Se rss Meas em ets se prepsefomatesde anna. Reprints Eto Sefo pubic aaa Magazine um argo que poss alaanar as sas verdes mpc es peridot renpeso a maka com cpa dado em ques, edb sere peso enteseus cere. Encate de s—faacono esas mas anaes Ena um (D ‘omura asta de seuspodtosna aa Magee ats um pies gerade fomadr de opi, Jini di decal a etodascs masa bets enovieentere ease macs comer mars egtedssoSun ‘Meco inc os aes nse utes pes. rte pa pene abe ainsi eee apa, (peso nun date tn em aa cn os ens Sscreegmaccleenigyet —mandootoensundeienage imipamtguleeetncngnnn wl pst Fipeovnatpe cement (ees sa ee aut tren Srcteteretoceenpblavun — crphoedyadiem oO BevMeda aroun Carta ao Leitor 40 Hibernate, um framework ORM que nio pode ser sta edigho dediea ae chamado de novidade de to maduro, popular ¢influente, Mas seo destaque de capa requ tanto relevdncia quanto algum grau de novidade ou inovagio (no tema ou abordagemy, nosso artigo no decepciona, J se passou algum tempo desde nossa dltima matérla focada neste projeto, mas 6 Hibernate nio descansa sobre as glérias; manté atuallzada do Hibernate sendo recomendado tanto aos iniciantes que ainda possam estar nas “trevas da JOC", quanto a quem usa o Hibernate hi ans mas ainda nfo teve tempo dese atualizar com suas itimas versbes, Outro carro debatatha doJavaéa JavaServer Faces, Js tivemos vsrios artigos sobre JSF, inclusive na EdlgSo anterior, que inicia uma série. Masna sua continuidade ensina como etlar novos componentes JSF uma opsio poderosa e natural num framework baseado em componentes, mas que muita gente que js usa a JSF ainda nio tentou. Como o litor veri no artigo, tal desenvolvimento nio pode ser descrto como trivial, mas também no ‘6 um bicho de sete eabesas: eo esforgo exigido se paga para qualquer componente que se em evolugio e renovagio. Nosso artigo oferece uma visio ‘vocé vi reutilizar em varias péginas ou aplicagées. [Nossa cobertura de eventos foca na JavaOne 2008, 0 maior acontecimento do ano, edo qual nossa repértertraz sempre uma anise de primeira moe temperada por entrevistas com personalidades por trés de tecnologias em destaque. Cobrir eventos numa revista impressa (eujo cielo de produ 1mas os principais fatos da JavaOne costumam ser “pedras fundamentais” queleva-se um ‘ano ou mais para amadurecer. Outro destaque desta edigdo esté na forca da SpringSource, que entre muitos projetos, ‘esti Spring Framework, Spring LDAP e Spring Batch. Os leitores mais presentes lem. brardo que a Java Magazine 69 publicamos um excelente artigo sobre o Spring Security, [Nesta edicio contamos com uma matéria sobre 0 Spring Web Services, explicitando a importa cexemplo real ‘Além de tudo isso, ecomendo a leitura do artigo Portais Corporativos, que expicta a Jmportincia de portais para as empresas, como desenvolver portlets (item essencial para 6 de alguns meses) tem sempre a dificuldade do timing, do desenvolvimento contract-first, com foco pritico e demonstrando um todo portal), desenvolvimento de web services para portals, transformar uma aplicacio SF cemuma aplicagio de portlete muitas outras coisas. Apés aleitura vocd teré uma excelente base para desenvolver poderosas e robustas aplicagées de Portal Como artigo da seeao Engenharia de Software, apresentamos O diferencial [Link] so destacadas as motivagSes, beneficiose como gerenciaro trabalho de desenvolvimento iterative e incremental de software através do Scrum, Além disso, destacamos algumas combinagdes do Scrum, com FDD (Feature Driven Development) e com XP (Extreme Programming) ‘Apés um ano e meio como Editor da Java Magazine, me despego desta pigina. Meu parceiro Eduardo Spinola, que ultimamente js fazia a maior parte deste trabalho (espe- cialmente toda a Edigio Digital) assumiré sua totalidade. Agora continuo com os artigos dda minha coluna mensal Boa leitura, Osvaldo Doedertel [Link] SecAo JAVA: NESTA SECAO VOCE ENCONTRA ARTIGOS INTERMEDIARIOS E AVANGADOS SOBRE JAVA BENE 1e) aie Java + Community = Powerfu Os destaques do mais importante eventod Joma agiisigio da Sun pela Oracle ceskavamos apreensivos e ansiosos para 0 JavaOne... Com uma série dle questives em mente: Como vai ser? Vai ter audigncia, ainla mais com essa crise mundial? Vio falar alguma coisa sobre o futuro doJavaedos proxtutosSun? OLarry Eulison vai participar? Alguns até fizeram piadinhasmencionando que oeventonao ria JavaOne, mas sim OracleOne, Mas 0 ‘evento foi realmente um JavaOne, condu- ido pela Sun e embora as duas empresas ainda ndo possam falar muito sobre tudo to, nem mostrar sinais de fuso a0 mer- ‘ado, contou com a participagio especial de Larry Ellison Emborango tenhamos todas as respostas {que gostarfamos, foi bom ouvir 0 que os gurus tinham a dizer, bem como o Larry Entison, esafmos do JavaOne com uma vi- so um pouco mais clara das direcées das tecnologias, que por sinal nos deixaram rnas nuvens, cheios de efeitos (effects), ou melhor, FX. ‘O keynote & sempre um dos melhores momentos do evento, muita vibracéo, muita expectativa e as vezes chega a ser emocionante, refletindo 0 “tom” do evento em um resumo dos assuntos mais importantes. Por isso apresentamos uma cobertura detalhada dos keynotes do ‘CommunityOne e do JavaOne, antes da cobertura técnica com os detalhes das tecnologias apresentadas nas centenas de palestras do evento. Fazendo um paralelo entre os eventos re- dos no exterior JavaOne) eos eventos locais Java@TVDigital),recomendamos a itura do artigo sobre TV Digital publica- donna Edigio anterior, com duas entrevis- tas relevantes que nos ajudam a ter uma perspectiva mais clara da importancia do processo de padronizagSo da TV Digital Resumo DevMan Deque se trata artigo: (JavaOne ¢omaloreventode Java do mundo, ehd 14 anos apresenta as novas versbes das APIs eos langamentos da Sun Microsystems. Apresentamos neste artigo asprincipals novidades do 140 JavaOne 'bem como do pré-evento gratuito Community One. Pora que serve: Flearatulizado em Java é uma “Miso Impossivel so centenas de API, frameworks eferramentas © foco do JavaOne este ano fol Cloud Computing e JavaFX. O destaque fol a partcipagso de Lanry Elson. Além de um resumo disso tudo apresentamos boas referéncias para videos imperdives. Mas ‘io se preocupe, este &somente o primeire artigo da sie de artigos JavaOne 2009, onde ealizamos diversas entrevistas sensaclonas com algumasestelas do Java, Emquesituaséoo temaéiiti: Este artigo no exatamente incante, mas também no ¢ avancade.€ interessante para quem quer estarna vanguarda da tecnologlae da comunidade. Java0ne 2009: Este €oprimeiro artigo da série JavaOne 2009, trceracobertura do maior evento de Java do mundo realizado pela nossa representante Yara Senger. Destacamos neste artigo os principals Keynotes do CommunityOne @ do JavaOne, bem como alguns momentos em que o Brasil esteve em destaque, que chamamos de “Momento verde amarelo’ Outroassunto abordado neste artigo € participacio especial de Larry Elson presidente da Orale,em sua primeira aparicdo& comunidade depois da aqusilo da Sun pela Oracle Tecnicamente flando, os destaques do evento foram Cloud Computing, JavaFX, e BluRay, que nos chamou atengéo devide 20 momento que estamos vivendo no Brasil com a padronizagSo do padiéo brasileiro de TVDigital, Além de todo 0 conteido oficial do evento, tivemos a oportunidade de reali- zar diversas entrevistas exclusivas, ees tamos abastecidos para asérie de artigos JavaOne 2009, onde compartilharemos ‘um pouco dos seus melhores momentos com voce, seguindo o mesmo padrio da série JavaOne 2008, com as entrevistas e artigos técnicos sobre Spring com Rod Johnson, Java EE com Roberto Chine~ cini, entre outros de JavaFX ¢ Applets, JavaServer Faces ¢ Facelets. Voed no vai perder, vait CommunityOne | (© CommunityOne, pré-evento gratuito 4o JavaOne foi ainda maior e melhor do que no ano anterior. Em termos de qual dade € praticamente impossivel df ciar os eventos, a grande dierenga ests | no contesido que no CommunityOne no 6 restrito a Java e tem mais espago para produtos e tecnologias da Sun. keynote © keynote “Communities. Open Source Platforms, and Clouds" apresentado por omunid. David Douglas, vice presidente de Cloud ‘Computing, sustentabilidade e ferramen- tas da Sun, incluindy © [Link], toi muito interessante, A apresentagio fol cadenciada com analogias inteligentes, varios convidados, contetido sobre Cloud ‘Computing algumas demos e mendes de produtos. David fez uma comparagio interessante centrea forma que asinovagbes do século 20 ceram realizadas, em geral provenientes do ‘meio académicn por cientistas praticamente individuais controladas Tep-Dowon (de cima para baixo na hierarquia), proprietérias plangjadas versusasinovagbesdo século2: originadas também por engenheiros, comu- nidades, muito mais partiipativas, abertas, espontineas e com evolugio continua, © “0 Open0iceorg esté diiponivel em todo 2 mundo, em 80 idiomas, multo mais idiomas ‘que 0 Micotoft Office, € todo este trabaho foi realizado por organizagées voluntéras, ajudando as traducées no opresentogdo das fontes Comretamente. Um trabalho inciveldecomunidade «em todo 0 munda" David Douglas ‘Momento Verde Amarelo no keynote! ‘Nao é possivel falar de comunidades sem. ‘mencionaros universitérios,équea cultur ‘open source nas universidadesestdcada vez ‘maior, e havia mais de 600 universitérios no evento. O brasileiro Tom Mix, embaixador ‘Sun ne Centro Universitario FEI junto com trés outros estudantes de outros patses foram chamados 20 paleo para falar sobre 0 trabalho que estio realizando nas univer- sidades, onde Tom falou da evangelizagio de JavaFX que tem desempenhado. loud Computing David passou de open source para Cloud falando como Linux, Solaris, MySQL, servidores de aplicacio livres Viabilizam o Cloud, e como o deploy de CMP Pte oc (eau ketal eur p JavaFX, TV Digital no Brasil, OTe CU Ces} amarelo, e claro, um pouco de jade Java aplicagdes em um Cloud ao invés de em ‘uma infra-estrutura convencional via- biliza os negécios de forma muito mais rpida e com menos risco. Fol assim que surgiu 0 aniineio ¢ a demonstragio do servico de Cloud da Sun, que apesar de jé utilizado internamente estard disponivel 40 pablico para testes antes deste artigo cchegar as bancas (junho-agosto). A con- figuragdo da infra-estrutura da aplicagio no Cloud ¢ feita de forma visual, onde é possfvel configurarambientes simples ou ‘complexos, com balanceamento de carga e utilizando Apache Hadoop (uma alterna- tiva open source ao j famoso framework MapReduce do Google). David comentou sobre a descrenca dos desenvolvedores em relagSo a0 deploy de aplicagbes reais em Cloud e 0 receio da comunidade em relagio & seguranca, e anunciou o langamento de uma JVM mais “fechada” e segura para Cloud em Solaris. Desta forma, os desenvolvedores, que geralmente néo sio especialistas em seguranga, podem fazer deploy de suas aplicagSes em Cloud sem se preocupar tanto com isso. Ele ressaltou ainda a im- portincia do ciclo completo de desenvol- vimento estar preparado para Cloud, ou seja, o ambiente de desenvolvimento, no ‘caso o NetBeans, deve em breve suportar ‘deploy em Cloud. AAinda assim, embora ele tenha comen- tado sobre 0 uso do Cloud internamente, parece propaganda, Seré que funciona ‘mesmo? Para aumentar a credibilidade precisamos de ntimeros, casos de sucesso, pessoas relatando sua experiéncia com a tecnologia. Por isso, Eric Baldeschwieler, da Yahoo!, foi chamado ao palco para ‘comentar sobre o uso intenso de Hadoop ra Yahoo, onde mais de 500 milhdes de ususrios tnicos sfo atendidos em mais de 25,000 nades em clusters gigantes. a. , Yara M. H. SENGER BENE Bere Aproveltando.o momento Hadoop, vale embrar ‘quetivemotoprivilgia de realizar uma entrevista exclusiva com Doug Cuting, da Yahoo, crlador do ‘ApacheLuceneedo Apache [Link] fol agendasa com 0 apolo do amigo Benedicto Franco unio també da Yahoo! que além defer link nos deu uma aula particular de Cloud Com ting. A entrevista serd pubicada nas préximas ‘edgbes 6a Jove Magazine, nesta séve, O keynote foi encerrado com uma apresentagdo muito bem produzida sobre OpenSolaris. Até vocé que adora sex sis- tema operacional vai gostar de conhecer as novidades: ZFS, JavaFX, et. ‘Apesar do resumo do keynote, recomen- do fortemente que assistam a apresenta~ so completa ou parcial, pois a qualidade do video edudio € excelente, ocontesdo 6 extremamente interessante. Javaone (Os temas mais diseutidos do JavaOne foram sem divida JavaFX e Cloud Com- puting. Embora tenham sido apresentadas muitas palestras sobre os eco-sistemas Java EE, Java SE e Java ME, como estas plataformas sdo desenvolvidas através do Java Community Process, que por sinal lest eada vex mais aberte hhouveram tantas novidades em relagdo a0 que estava sendo discutido publicamente nas dezenas de JSRs (lava Specification Requests) pela internet Apesar das novidades das prineipats APIs nao serom realmente novidades, & nntido um maior amaxturecimento no dis- cursoe nas demos, AlgumasJSRs jf tema implementagio cespecificagto completos, como € 0 caso de JSF 20. Apesar do interesse da comunidade ‘em relagio as novidades das platafor- mas Java SE, Java BE ¢ Java ME, um dos grandes destaques, como proprio Scott McNealy afirmou, foi a aquisigao da Sun pela Oracle. o priblicn, nde 1& Emque maisestamos pensondoalémde:O que val econtecer com este “negécio” de Ora ‘Suntrdiziao slidede Scott McNealy, deixando loro ‘que, excepcionelmente neste JavaOne a pergunta ora quelreaimentebuscévamosarespestandocra técnica mas sm loséfca. (Yara Senger) Keynote ‘Momento Verde amarelo Parece besteira, mas quando estamos em ‘um grupo de 30 pessoas em meio a uma gigantesca platéia de 10.000, provenientes de 85 paises diferentes, qualquer mengio 20 Brasil é sempre especial. Embora acostumados com carinho do John Gage, 0 ex-host da JavaOne, que sempre cativou a platéia e especialmente 0s Brasileiros com as mengées positivas ‘em relagéo a postura comunicativa € pparticipativa da nossa comunidade, Chris Melissinosndonos desapontou. Ainda nos primeiros minutos do keynote, ao saudar a platéia, que respondeu um “Bom dia” bastante “timido’, Chris pediu mais en- tusiasmo do Brasil, Minutos depois, ao apresentar alguns iimerosdo eventoe parabenizar os cinco paises com maior ntimero de participantes no JavaOne, fez. uma simpética brinca- deira, mencionando que o Brasil esté na lista dos 10 masores: na décima posiglo! E que no ano que vem precisamos subir esta lista Vero Brasil em destaque 6 sempre bom, ‘Blu-Ray eava na TY Digital Brasielra Aapresentagto de Bi-Ray ¢ tradicional ino JavaOne, If varios anos a Sony © a Sun vem apresentando casos de suces possibilidades de interagio no contetido do Whe Ray. Por ainda nao ser popular ‘aqui no Brasil, sso nunca despertou muito ‘nosso interesse, Mas este ano foi diferente, algumas coisas chamaram atengioehouve correlagdo com © momento que estamos vivendo aqui no Brasil, A transmissio analégica ests sendo “deslignda” nos Estados Unidos, ou seja, a ‘maioria das pessoasié possuem televisdes HD, enestes aparelhos.o Blu-Ray faz: muito ‘mais sentido. Vale lembrar que: isso esté acontecendo praticamente no mesmo mo- ‘mento que a nossa TV Digital est sendo ligada, Mesmo assim, ainda ndo érealida- de para a maioria dos brasileiros. ‘Noentanto osntimeros de Blu-Ray jsio grandes: trés milhdes de set top players nos Estados Unidos, além dos sete milhées de PlayStation 3, com previsio de triplicar estes niimeros no préximo ano fiscal © modelo de programagdo ¢ algumas APIs utilizadas para prover interagdo no Blu-Ray sdo similares aos utilizados para ‘TV Digital no novo padrio Brasileiro. Nao podemos dizer que sio idénticos, mas si0 arecidos, tornando o investimento neste aprendizado ainda mais produtivo. © Foram realizadas duas Technical Sessions sobre Java na TV Digital Braslelra"TS-4453 New Java Digital TV Standard Goes Brazil” e “TS 4674 Java inthe Brazilian Digital TV: Interactivity and Digital Inclusion on TV" reforgando a importin- cia do trabalho que ver sendo desenvolvido no Brasil pare definigso do padréo Brasileiro Ginga através do Férum SBTVD, bem comoaimportan- ‘ladomercado braslelo, apresentado pelaintel ‘como 0 segundo malor mercado em 2012, atrds apenas da India. Para saber mais sobre Java na TV gital Brasileira veja 0 artigo “Java na ‘TV Digital Brasileira - A importancia da interatividade e do padrio” na Java Magazine 72, contendo entrevistas ex- clusivas com 0 Gerente de Operagio da Rede Globo, Carlos Fini, e Aguinaldo Boquimpani, Gerente de Produtos da TOTVD. Javare Todos os keynotes ¢ general sessions foram repletos de JavaFX. A primeira demo da tecnologia foi uma ferramenta de ‘comunidade, o DarkChat: uma mistura de ‘Twitter Chat escrita em JavaFX. Veja mai sobre DarkChat no quadro “Aplicaces ctiadas com JavaFX” No entanto, o grande andncio, ou demo de JavaFX foi a Java Store, que embora Utilize 0s principais novos recursos da JavaFX, tem um apelo de negécio ¢ de ‘comunidade muito maior que 0 tecnols- ‘gico, sendo anunciada diretamente por Jonathan Schwartz e James Gosling. Veja mais sobre a Java Store no quadro “Mais informagdes sobre a Java Store”. Perdemos aoportunidade? ‘Quando voltamos do JavaOne 2008, esta- vvaclaro para mim que casos de sucesso de JavaFX eram importantes. Danny Coward, em entrevista exclusiva & Java Magazine (Edigio 62) explicitou que gostariam de ver ‘oImposto de Renda utilizar este recurso. Evidentemente a distribuigio exclusiva do IRPF em Java é uma vitdria por si sé, € nao parece o projeto ideal para testar ‘uma nova tecnologia. Mas como diz © velho ditado "Para um bom entendedor ‘meia palavra basta’, eo pedido do Danny poderia ser entendido como um pedide 20s desenvolvedores brasileiros para que testem e criem coisas criativas com a nova tecnologia. Infelizmente ndo vimos muitas aplica- 98s desenvolvidas no Brasil com JavaFX. nem mesmo aplicagées simples, nem bbonitas, nem interessantes. Acredito que a comunidade esté perdendo uma opor tunidade com esta nova tecnologia, mas acho queaindaestiem tempo, ¢€ possivel set pioneiro. Java Open Source ‘A importancia da plataforma Java ser livee (Open Source), bem como a im portaneia do Java Community Process, parecem tio dbvias que ndo precisam de explicagio, Alguns veem a aquisiglo da Sun pela Oracle como sendo um fracasso da Sun, outros véem com mais naturali- dade: uma empresa gigante compra uma empresa grande, ¢ isto é bom, Niio importa como cada tum veja esta aquisigio, mas o fato de Java ser livre e ter um processo de evolugao democratico, ‘com diversas empresasno Java Communi= ty Process nos tranquiliza, embora ainda ro nos oferega uma resposta: Como vai ser depois da fusio? Aistéria do Java do ames Gosling) A histéria do Java, onde James Gos- ling & um dos personagens principais, narrada pelo proprio James, foi exibida ‘em um video que merece ser assistido rnovamente. (Veja o link nas referéncias Melhores videos do JavaOne). O video mostra de forma bem humorada como tudo aconteceu, desde a proposigio do projeto para Scott McNealy € a criagi0 do projeto *7 linguagem e hardware), a apresentacdo histérica do primeiro Ap- plet animado (com o Duke acenando), a abertura do cédigo fonte, ata atualidade conde a plataforma Java roda em bilhdes de dispositivos méveis, aparelhos de TV, cartoes, servidores e computadores pessoais em todo o mundo. Foi neste clima de emogio que Scott Mc- Nealy agradeceu Jonathan Schwartz pela ‘sua coragem e importincia no processo de abertura (open source) da plataforma Java (Figura 0) ‘Oque Lary Elson tem acer? A participacao de Larry Ellison foi muito importante no keynote. Ele foi chamado ao palco por Scott McNealy, © a conversa comegou sem grasa, com algumas piadas. Como a paixio de Larry Ellison por barcos & famosa, Scott ‘MeNealy entregou um presente para 0 seu barco. Veja na Figura 2as bandeiras gue Larry e Scott estdo segurando, cada bandeirinha representa uma letra em Sinais néuticos, que juntas formam a palayra Java ‘Aconversa foise tornando cada vez: interessante. Ndo vale a pena resumir muito, pois € muito recomendado assistir Ve RUC CERN Diverss aplicagbescrladas com JavaFX foram ‘mostradas durante 0 JavaOne, A tecnologia ficou ainda mals fortalelda como comentivio doLarryEllsonnokeynotedeabertura,dlzendo {que gostara de ver plugins para 0 OpenOtice ‘org ctlados com a JavaFX, Entre estas aplicagdes podemas car “JavaFX Juke Box: crlada por Manuel Tlerin, ‘apresentada por James Gosling no seu keyno- te, onde misios podem dlsponibiizar suas sca, que fleardo dsponivels em bares os frequentadores poderdo tocéas: + Darkchat: uma aplca¢io construldaIntela- ‘mente com JavaF¥, baseads ne tecnologia de Jogos Project Darkstar. Uma mistura de chat ‘om Twitter, onde voct segue as pessoas etem acesso aos chats esessbes nas qual as pessoas ‘esto envolvidas. Quanto mas voct usa, mals cestelas acum “TwitterFX:umlent Twitter cradocom JaV0FX ‘queestésendo deservolvidocolaborativamente noprojeto Kenai. Elepodeserinstaladocom Java Wieb Startatravés do arquivo np lsponivelem etre neitert/ Twitter Xn; “JavaFX Nintendo Wik:uma phicagio JavaFX projetada em uma superfice de video, plistico, ‘uaté mesmo uma parede, que tllza um con {tole remote de Wile uma luva especial tornan do possiel desenhar com a luva na superfice. ‘AaplicacSo projetada parece ofamoso Paint do Windows contendo uma paleta de cores econ- wolesparaconfiguarotipo eespessuradotago queestésendo desenhado com a lua; + JavaFX Authoring Tool: apresentado por Tor Norbye, que participa dos famosos PodCasts do avaPosse([Link] recursos ‘mestradosforama capacidadede tl ma aplicagio e adapti-a caso sea necessério tem dlversostipos de telasdispesitves,além de diversas formas de vincular componentes de Userinterface com eventos; + Visuvi este mecanismo de busca de imagens fotaplcado medicina, pemitindo queimagens ‘muito grandes,obtdascommicoscéploseoutros ‘equipamentospossam seramplladascentenasde eres Depo'saapiiagso permite aindacomparar tum pedaco selecionado de Imagem com uma base histérica de andlse de imagens similares e comodiagnéstco de outrosmédicos,aumentan- dodraticamente a precio do dagnéstic, ‘Alva Store é uma loja virtual de aplicacSes Java que visa amplaro canal de comunicagao entre 0s desenvolvedores de aplicacBes e 05 potencials consumidores, conceitualmente parecida com obem sucedido‘Tunescomércio demisicas da Apple, ‘Tecnicamentefalando a Java Store Uma aplicagso desktop, clada com todos 0s felts de JavaFX (uma prova "viva" que a tecnologia funciona”); Implementada utlizando 6 recurso de Drag and Drop de aplicacSes Java em execusio: ‘de uma JVM para 2 outra, permitindo que tum Applet sea instalado no Desktop, con- forme apresentado no artigo “Os Applets cestio de volta" da Edigdo 62. Este recurso da plataforma permite que o consumidor teste a aplleagio na Java Store antes de solictara Instalagdo na sua méquina, que ¢ relizada quando o usuario arrasta a aplicacio para desktop: DE Our ee ee eS Responsivel pela gestio dos aplicativosins talados através da Java Store no computador do usustio. Para isto, utllza © mecanismo de atualzagio, Java Update Center, que mostra para 0 usuirlo as atualizacbes disponivels,e permite que as atualizacées sejam realizadas, assim come a [Link]. (© A Jova Store, pora 0 descontentamento dos brasleiros etd dspontvelparatestesopenasnos £stados Unidos segundo elesatéqueasquestoes legals sejam resolvides. Conformeaspalavrasde James Gosling "Euma lojaque ndotemcaixaregistredoraomodelode negécios ainda estéem discussfo, Segundo ele ‘stem vias formasdecobrarequeremencon- tar junto da comunidade ammelhor manela Gosling delxou escapar que j3 havia um protétipo da Java Store na JavaOne 2008, acabaram optando em no apresenti-lo no passado @ le no sabla se esta hava sido a pedo coneta, ST Java + Community = Powerful a0 video completo (veja v enderego dos melhores videos em Links). Entretanto, segue um resumo com os pontos mais importantes abordados por Larry Ellison (Figura 3), * Os investimentos em Java vao aumentar; + Toda a plataforma de Middleware da Oracle depende de Java; * Ascoisas nfo devem mnudar muito! (Es pero que isto inelua o Java Community Process e o licenciamento da JVM); + Eleclogiou as interfaces ricascom JavaFX aoinvésdle AJAX eespera ver plugins para 0 [Link] escritos em JavaFX. Serd uma nova oportunidode? Mais uma vez as cartas estdo na mesa, Larry comentou sobre plugins para 0 [Link] em JavaFX. Voce esté interescado em discutir e colaborar com isto? Mais informagdes no link “Plugins para [Link] com JavaFX” nas referéncias deste artigo. Nao vamos perder mais esta oportunidade, vamos? ‘Uma visdo pessoal Como jé comentado no inicio do artigo, este fo um JavaOne muito especial, nico, ante, mas um pouco melaneslico para esta comunidade vibrante e apaixonada, CConfesso que foi um pouco triste ver 0 Scott McNealy a0 lado do Larry Ellison se abaixando para 0 piblico em seu “iltimo obrigado", bem como a homenagem a0 James Gosling, Mas durante asentrevistas € também nos corredores conversarmos bastante sobre o caso “Oracle-Sun’,e dei- xando a nostalgia, acho que vale lembrar as palavras de Larry Ellison: “Os investi- ‘mentos em Java vio crescer” e "Nao deve haver grandes mudancas” General Session: Bob Brewin Bob Brewin, Vice Presidente e CTO de Application Platform Software da Sun, fez um keynote cadenciado e contagiante, ‘em uma apresentagdo mais técnica que 0 keynote de abertura, mas ainda com meté- forase analogias inteligentes. Falou sobre a influéncia que as pessoas e empresas de tecnologia tinham na evolugio da propria tecnologia enas inovagBes. A comunidade tinha que “aceitar” o que era desenvolvido, Figura 2. Present para ary Elson comparando com a situacéo atual, onde 6 consumidores das aplicagées criadas coms tecnologias tém muito mais poder € direcionam/influenciam a tecnologia; ou seja, ditam 0 que nés desenvolvedores temos que fazer. Paralelamente falou de tecnologias evo- Jutivas versus tecnologias revolucionérias, classificando JavaFX como revolucioné ria, Citou como exemplo de tecnologia evolutiva 0 computador, que substituit completamente a maquina de escrever, ‘enquanto as revolucionarias podem ser complementares ds tecnologias antigas, citando como exemplo 0 aviso, que nio substituiu, nem vai substituiro trem. Com a participagio especial de diversos convidados outrostemas foram discutidos, Figua3. Lay Elson a como JDK 7, Java EF 6, Projeto Kenai e Zembly conforme apresentado a seyuie 0x7 Uma versio do JDK 7, desenvolvida através do projet OpenJDK, chamada JavaOne Proview build, que ainda no & Final, mas que teve a maioria das funcio= nalidades apresentadas no evento, est disponivel em [Link]/7. ‘As melhorias ¢ novilales esto separa- dasem tris objetivos: Plataforma Modular, JVM muiltictinguagem e simplificagio do desenvolvimento. Plataforma Modular A Java SE est cada vez maiot, ¢ deve uultrapassar 4.000 classes na verso 7. Evi- dentemente as classes slo importantes ¢ cada uma oferece um benetcio, no entanto temos alguns problemas no crescimento da plataforma: + Tempo de dovonload; += Dificuldade para disponibilizar a pla- taforma em pequenos dispositivos, com milhares de classes que nem sempre as aplicagdes utilizamy + As dependéncias também sio dificeis de gerenciar. Na Java SE 6 foram atacados alguns sin- tomas, com solugdes parciais como o Java Kemel, que reduziu drasticamente o tem- po de download. Mesmo assim a questo da modularidade continua fundamental, cea resposta parece se chamar Jigsaw (JSR 204), que serd utilizado para modularizar ‘a prépria plataformac também disponivel para modularizar as nossas aplicagdes. Embora possa parecer estranho ter dois sistemas de médulos diferentes: jigsaw no Java SE e OSGi sendo utilizado nos servidores Java EE, foi reforcado que 1 modularizag8o no Java SE foi criada permitindo interfaceamento com outros sistemas de médulos. & "OGlasspathestd mort" Mark Reino ier dos projets gsow eJOK7) Vale a pena conferir o blog detalhado de ‘Mark Reinold sobre Jigsaw: hitp/[Link]. com/mrlentryfjigsaw. ANNA éamallsinguoger Duaslinguagens que fearam muito popu ares so Ruby © Phyton, respectivamente ‘mplementadas por JRuby e hyton, quesdo robuntas e permitem aceaso ds APIs Java. Diversasagdes tm do tomadas paca melhorar ainda mais a performance. Este continua send 0 caminho da JVM, cada vez mais aberta ¢ mult/-linguagem. Simphifcaro desenvolvimento Entre as novas sintaxes plancjadas para ‘Java’ destacamos a declaragdo implicta de tipos ao usar generics do lado direito e do lado esquerdo de uma operagio, com tum operador chamado diamante “<>" ‘que quando utilizado assume que 0 tipo _genérico do lado dieite do operador éigual ‘0 do lado esquerdo. Isso é muito itil, por ‘exemplo, na criagio de colegdes, pois evita ‘que ao invés de escrevermos algo como: MapcatrLstchran>anies= new shilpa, Liteaniges bastard eserever: Mp cht Usehtiga>>atigos=newHashap <> Outrasnovidades sia ampliaggodo uso de annotations, melhor aproveitamento dos beneficios oferecidos pela execusoem processadores multi-core, melhorias nas APIsde 1/0 (NIO2.0), ClassLoaders send ccarregacios em paralelo, entre diversas ou- tras funcionalidades que serio discutidas lem detalhes em artigos futuros. Java E6 ‘A plataforma Java EE 6 jé estava bas- tante avangada no JavaOne 2008, sendo apresentada em entrevista exclusiva com Roberto Chinccini, publicada na EdigS0 66 da Java Magazine juntamente com um detalhado com os novos recursos desta versio, Sem diivida alguma neste period de um ano que separa os eventos houve bastante progresso em grande parte das APIs que compdem esta versio da plataforma, mas a direcio, que foi apresentada continua a mesma. Poristo,ndo vamos apresentar outro res~ smodasmudangas, deixando este excelente tema para os réximos artigos. Tratande-se de Java EE 6, podemos destacartrés ent xn o P Vistas exclusivas realizadas neste JavaOne, 4 primeira com Reza Rahman, membro dos expert groups de EJB 3.1 ¢ Java BE 6 ‘uma entrevista com o time responssvel polo Glassfish, que é a implementagio de referénela do Java, ncluindo um dos mais Importantes nomes de Java EE, Bill han- non, Iker da espeificacio de Java EE desde 2 primeira versio; bem como, o Lider da ‘especificagio do JSF 20, Ed Burns, Projet Kenai 0 Projeto Kenai ¢ uma mistura de rede social com reposit6rio de cédigo (Orkut + SourceForge ou [Link]), que expe suas funcionalidades através de servicos REST. Foi apresentada uma demo do NetBeans ‘acessando os servicos REST do Kenai, per- mitindo a interagio com os colaboradores ‘ou membros do projeto e operagées no repositério a partir desta IDE. Foi anunciado também que o servigo de integragio continua através do Hudson secs disponibilizado na infra-estrutura do proje- toKenai, permitindo queseja posstvel fazer build e testes dentro do Cloud do Kenai [Link] Zembly é um servico de Cloud onde ¢ possivel criat, armazenar e escalar apli- cages web/widgets, como por exemplo, plugins para redes sociais, permitindo que seja possfvel apontar para estas aplicagdes ‘a partir de outras aplicagSes, criando ‘mashups. O Zembly 6 como um Wiki, s6 ‘que ao invés de textos armazenamos pe- {quenas aplicagbes. Qutra analogia interes- sante que pode ser feita 6 com acriagao de ‘um blog, que oferecem diversos modelos de blog, 0 Zembly oferece diversos mode- losde aplicagdes a partir da qual voct pode crlar a sua propria aplicagao. Duke's Choice Awards Alguns projetos interessantes que rece- beram o Duke's Choice Awards este ano so apresentados aqui. Voct pode consul- tar a lista completa no site: [Link]/ enfdukeschoiee/09toinners jsp. Projeto alice ‘O projeto Alice, da Universidade Carni- sgie Mellon, apresentado também no livro “The Final Lesson’; ¢ utilizado para ensi- nar programagio para criangas ¢ adoles- ccentes com Java. Em entrevista exclusiva ficamos sabendo que jé estio em contato com algumas universidades Brasileiras. Para mais informagdes, acesse 0 site [Link]. Runescape Um jogo escrito em Java instalado no Desktop através da Java Store, estilo RPG, ‘com diversos efeitos especiais e gritos, criado pela Jagex Itda. Para maisinformagies,acesseo site ww. [Link]. Mites Uma solugio de micro-financiamento para familias de paises pobres. Para maisinformagoes, acesse [Link]. org /product. Entrevistas exclusivas ‘Além da cobertura do JavaOne 2009 foram realizadas diversas entrevistas, sobre virios assuntos, com engenheiros da Sun, SpringSource, Yahoo! e Google, além de profissionais auténomos. Nas proximas edigOes serao publicadas as entrevistas realizadas, tradicionalmente ‘complementadas com um artigo ou tuto- rial sobre o mesmo asstinto da entrevista Nao percal Conclusées A JavaOne 2009 foi excelente, muitoacima daexpectativa. Embora no tenhamos abor- dado neste artigo muito a respeito da evo- lugio das principais APIs Java SE eJava EE, ppercebemos que praticamente tudo 0 que fos prometido no ano passado em relagioa estas tecnologias esté sendo cumprido. No mundo Java EE vérias APIs estio bastante maduras, como JSF 2.0, enquanto outras ainda esto em discussSo, como a JSR 299 ~Java Context and Dependency Injection Notamos muitos avangos no sistema de médulos do Jigsaw do JDK ¢ também na adogiio de OSGi por diversos projetos. Outro ponto interessante é que um dos resultados do JavaOne foi o aumento da confiabilidade em JavaFX mediante o posicionamento de Larry Ellison, a =a i ree eo web; psa certfcaes SC SOP SCWCD, Dieta ucrional Gabe onde aa ecardera ves ‘uses ascoretas Academia do ae Academia Web Developer alestanteem dives events aorlsbem omo no lawOne evap, ufeedbacksobreestaedicio! Rimatigainetemesitane 2% ‘eigen pecmaster seve eto aaa oe Dé seyotosobeesteatge, através ik: vo [Link] lava + Community = Powerful py/wwnglobalode. [Link]/pane. seamtchave=Videoslava0ne2009 Osmelbores videos do JavaOne ‘nttp:rw [Link]/site/noticiay pine seamrchave=OpenOfficek Ina para ciao de plugins ava parao Opendtice Anttptwnwsjovacond/en/ dukeschole/09uinners sp Vencedores do Duke Choice Anads ‘ttpi/wwnjava.convenfjova_in_acton/ runescope Runescape -ttpy/[Link]/ew/java_in_acton/ alien Ace ‘ntp/femblycom/ Tembly ‘tp:/[Link]/ Kenai tp/fopenjdk [Link]? Preto OpenX Anap//[Link]/earning/ Javaoneonlinefsssnsp?sessa=T5- 446534yr=2009 ApresentacoTS-4453-New avaDigialTV Standard Goes Bra ‘http-//[Link]/learning/ Jevaoneonlines Isessnsprsessn=TS- 4674&yr=2009 ‘Apresentaci0TS-4674- Javain the Brain Digital W-nteractivty and Digital ndusion on TV ‘ttp:/blogssuncom/me/ Mark Reinhold blog sobre Jigsaw, JDK7, Plataforma Modular : L ‘SecAo Javi Desenvol ie ihe com ee: WY ‘ Conhega os ‘0 primeiny artigo da série, foram abontados os conceites bssicas do JavaServer Faces: ciclode vida, con: versores, validadores. Foi também proposta actiagio deuma lja virtual onde foramap! eados alguns dos principais funcamentose componente padres do JSF. Na ocasido, foicriadaa pigina pararegistrodos clientes, paraalloja virtual, Pontm, foi possivel notar que os componentes padrées disponiveis, atendem apenas problemas muito bisicos. Neste contexto, odesenvolvedor possui duas, opgdes utilizar componentes de terceiros, ‘ou criar seus préprios componentes. JavaServer Faces é um framework que auxilia na criaglo de interfaces de usudrio baseadas em componentes. © uso desses ‘componentes ajuda a simplificar o desen- volvimento, uma vez que abstrai toda a complexidade do desenvolvedor, possibi- litando a reutilizagio em diversas partes do projeto e até mesmo a reutilizagio dos ‘mesmos em varios projetos. A implemen- tacdo padrao de JSF oferece apenas compo- nentes bésicos para criagdo de formulrios € componentes primitivos para interagio de dados e formatacio de layout. (Criar um componente JSF ndoé uma tarefa ‘muito faci Mas,apesar da complexidade, hi diversos artigos esitesna internet que abor- dam este assunto; a exemplo deles pode-se destacar um tépico dedicado a este iter, ( presente artigo objetiva mostrar os fundamentos necessérios para a criagio de componentes Faces. Os componentes aqui criados auxiliardonacriagdo do carrinho de ‘compras para a aplicacao de LivrosOnline iniciado no artigo anterior. Seré criado um componente paraexibig30 de imagens savas. no bancodedados eum outro paraeexibirdi- ‘as decontexto toltips) personalizadoscom suporte a formatagio HTML do contetido. Mas antes de criar 0 primeiro,iniciaremos conhecendo alguns conceitos. + NESTA SECAO VOCE ENCONTRA ARTIGOS INTERMEDIARIOS E AVANGADOS SOBRE JAVA Resumo DevMan De que etrata artigo: salvas em bance de dados. Para que serve: Emquestuagéootema iti Desenvolvendo com JavaServer Faces Parte2: ‘presentagso dos passos bisicos necessérlos paraa crlagdo de componentes JSF. Apossibildade de ctlarcomponentes de interface grea personaizados & sem divi, uma das principals qualidades do JavaServer Faces. longo do artigo, abordada,passo-2-passo, actiag3o de dots componentes, sendo uma calxa de sugestio e um componente de Imagem que especializa 0 componente padrio Permitindoavisualizacio de imagens partirde um array de bytes, ideal paraaexibicdo de imagens Esteartigo destina-sea deservolvedoresnteressados em conhecer 0 processo de criagSo de compo- rnentes de interface grsficapersonalzados para aplcacbes JSF. (Ocontaide deste artigo ti para gua leltor em cendros pelos quals os componentes JSF padres ‘no atendem as necessidades da aplicacSo que exigem acriagbo de novos componente. ‘OJavaServerFaceséum [Link] componentes de interface grfica que possuitodo ‘ummecanismo que possbiltaa ciao de novos componentes. O desenvolvedor tem como pce criar ‘um novo componente ou especaizar um existente A ctiagio de um componente envolve quatro atvidades béscas:criar 0 componente, claro renderer, iar uma classe tag paraintegragio com a SP e registrar tag no TLD. ncialmente, parece ser um pouco ttabalhosocriarum componente, masa possiblidade de reuilizac30 do cédigoe ganhos de produtvidade compensa oesforgo gastono desenvolvimento domesmo. HH, na comunidade, uma variedade considerével de componentes dsponiveis, a exemplo, temos 0 ‘Apache Tomahawk, JBoss ichFaces eo ICEFaces. Ao longo deum projeto, anecessidade decriagso de Primeiros passos? Criar componentes JSF nfo éuma tarefa complicada, porém, requer do desenvol- vedor um conhecimento basico tanto da cestrutura do Faces quanto da criagd0 de custom tags em JSP. Essa tarefa pode ser simplificada ainda mais se componente 1 ser criado tiver comportamento extra ‘08 componentes padres jé existentes. ‘Assim como foi dito na Parte 1 do ar- tigo, a implementacio de componentes € muito similar ao desenvolvimento de componentes Swing. Componentes JSF novos componentes 6, de certo modo, bara, quando se uliza estas biblotecas possuem eventos e propriedades assim ‘como os componentes Swing. Possuem, também, o suporte a vinculagao de com- ponentes, ou seja, um componente que gerar uma linha de uma tabela precisa estar inserido dentro do corpo de uma tabela, Basicamente, um componente centra: liza duas funcionalidades: coditicagso © decodificagdo de dados. Neste contexto, a codificagao ¢ 0 processo destinado 3 conversio de determinados dados em artefatos HTML para oqualo componente LTML correspondente a uma coluna de ‘uma tabela ou a'uma caixa de texto, JM a dlocodificagto se propde a converter os pparimetros da requisigdo para valores: nificativas ao conteato do componente. A Figura I mostra acodificaglo e decodifica- ode um componente em relagio a0 ciclo dle vida JSR. A coditicagio ocorre durante 1 fase Apply Request Values e a decodi- ficagio do componente ocorre durante a ultima fase, denominada Render, [Em tese, os componentes JSF nio sso diretamente dependentes do JSP e HTML, Neste caso, temos uma estrutura bisica de irés elementos: ‘© Uma classe pertencente & hierarquia de UlComponentELTag para inicializar, receber os atributos da tag e definir gual & 0 componente e qual é 0 renderer associado a ele; * 0 componente propriamente dito pertencente a hierarquia de UlCompenent, responsével por registrar eventos ¢ ge- renciar 0 estado do componente e; ‘© Uma classe pertencente a hierarquia de Renderer, responsvel por gerar 0s ar- tefatos HTML e também por decodificar 0 dados recebidos. ambiente SF oferece ao desenvolvedor duas formas de codificacio e decodifica- so, Uma delas éa implementacio direta. Neste caso, a codificagio e decodificagao ‘ocorrem dentro do préprio componente, descartando 0 uso da classe Renderer. J& nna outra forma, o componente delega a codificagdo e decodificagSo para a classe fenderer. Delegar a decodificagao de um componente permite a0 desenvolvedor reaproveitar este mesmo componente associando novos comportamentos, como or exemplo, uma caixa de multi-selegio ‘© uma lista de checkbox, Figura Fass IS relaconadas com a caficaoe decefcao de componente SF eer ae iprenda na pratica EXECU TT ator rh beseriter de tat Gs) Figura Cases biscas sadas para clio de componeris .& oct pode encontarem artigos naintenetouem ‘sreferénciasacose UCampenentagEstacloseera sada atéaversto 2que,comoadventadaintegragao comasexpressbes IP passouaser bsoleta Seestiver sandoaversdo .2dépreferéncaa classe Component [ag pols pos alguns recursos foiitadoresporaa ‘manipulagao det (Expresion Languoge. Antes de criar primeiro componente, 6 bom que o desenvolvedor conheca as classes basicas necessérias para criar componentes. A Figura 2 mostra um diagrama com as principais classes ¢ 0 relacionamento entre clas, Desenvolvendo com JavaServer Faces - Parte 2 As interfaces ValueHolder c EdtabeValueHol der definem os métodos basicos para componentes que recebem um valor. Flas possuem métodos como GET/SET, além de ‘métodos para definiroconversora serusa- do, para detinie validadorese para definir eventos d alteragio de valor. J4 a interface stateHolder foece os métodos responsivels. ‘para manter o estado do componente. “Asclasses bsicas [Link] de com- ‘ponents sto: Ucomponent,UcomponentBase, output e Uiinput. Essas classes implemen- tam as interfaces citadas fornecendo 0 comportamento bésico do componente. ‘Agora que temos uma ideia de como implementar um componente JSF, chegou ‘omomentode péra mona massa. Criare- _mos um componente capaz de gerar dicas de contextos, também conhecidos como tooltips, que seré capaz de exibir tanto textos simples quanto textos formatados em HTML. Griando componente dica de contexto (Oprimeiro passo aser tomado ao iniciar ‘© desenvolvimento de um componente ¢ simular 0 resultado que se deseja com 0 ‘mesmo. Isto permite identificar se o que se pretende fazer realmente funciona, ou ‘seja, se ndo funcionar na simulacio, difi- cilmente funcionaré no componente. “Além de simular 0 c6digo resultante, é importante testar a compatibilidade deste ‘cédigo coms principais componentes de terceiros. E, caso tenha fungGes JavaScript ou estilos CSS definidos, 6 sempre bom certificar-se de que estas fungbes e estilos no se colidem com cédigosjé existentes na pagina. E, por diltimo, simule o c6digo do seu ‘componente em vérios navegadores e nas diferentes versbes destes navegadores. O 83 “Mats Snrormacdes 45 | background: uric/Lteroson? ine top/bubble.o11) no-repeat bottom: 50 < span? 52 53 “
too}tipc/i> aceita formatagso HIM..
55 Span stylem"colorsred Hats opgder em relagio propriedade TITLe 56 cad 57 58 _ 59. 0 ‘inico tooltip através do uso do identifi- cador ComponenteTeste, usado na tag lnk (imha 48), que delimita o contetido do tooltip. Desta forma, garante-se que os estilos no irdo se colidir com outros estilos da pagina. O texto “Mais informagdes” (linha 49) representa 0 elemento para o qual deve set exibida a diea ao ser posicionado © cursor do mouse sobre ele. Este ele- mento pode ser um rétulo, uma caixa de texto, uma diy, entre outros. O efeito de ocultar e exibir 0 tooltip (linha 50) & realizado pelos estilos das linhas 7 €15, respectivamente. As linhas 51 ¢ 8 s3o usadas para desenhar as bordas superior € inferior do tooltip. © contetido da dica 6 posicionado dentro da div (linha 53) e as propriedades “style” e “class” sero ‘opgdes para formatagto dispontveis no ‘componente ‘Oresultado da fag ¢semelhante a0 exibi- dona Figura3, Uma vez realizada asimu= lagto do componente, chega 6 momento de implements-lo. Vamos iniciar eriando ‘a classe Componente, ora une pcos em Helse go a Srapresage THLE pasrss Figura brenplodotootpaesmalgo [Link] Componente (O segundo passo é criar o componente, ‘Como ele ira apenas exibir dados, a clas- se Ufeeltip apresentada na Listagem 2 herda a classe Uldutput. Se o componente recebesse entrada de dados, ele deveria herdara classe Ulaput, que oferece suporte aentrada de dados. A propriedade family do componente € usada para associar © componente & classe renderer. Na linha 5 é criada a constante e, na linha7, € retornado o valor desta constante como o identificador do ‘componente. © componente permitiré ao desen- volvedor definir © contetido do tooltip de duas formas: a primeira é definindo uum valor através de uma propriedade value jé a outra usa facets, possibilitando a0 desenvolvedor inserir tags JSF para compor um contetido mais complexo. Os métodos getContentTootip) setContentTool- tip0 (linhas 11 219) sio responsdveis por recuperare ajustar o componente do facet com nome fixo “content”. Mais adiante -veremos um exemplo demonstrando 0 uso de facet na montagem do contetido da dica de produtos do carrinho de compras, Por fim, hé momentos em que é neces- sirio manter valores de determinadas propriedades de um componente entre varias requisig6es. Entdo, para estes ‘casos hé os métodos saveStatel) e restores: tate(, definidos pela interface StateHol- der, O componente de tooltip dispensa Unger 2. Cae decomoneeespnie pe gat package Jn. 19 osonl ine. J8f components: pubtte class UiTooTtip extends Ui0vtout pubite final statte String FaMiLr = pubive String getFamtiy0) 1 pubIte String getRenderertypec) | etien Toot ti pkender SHOT TYPE etien getFacets() gett -eonvent 1: 1 2 i 5 8 ewurn fait 3 1 1 1 1 1 1 1 0 1 2 Bi public UlConponent. getTeottipcontentc> 5 6 1 public vald setToott{pcontent(UiComponent header) ( 18 getFacetsc) putt content, header): Wind 20 override 21 public votd restorestate(FacesContext context, abject state) ( Be Object) values = (Object) state; B SupersrestoreStatet content, vaTues(0) a getatirfoutes() put(svolue®, valuesf1): % getattributest) putt "style™, values(12) a Seeattrioutest) puttvstyleciass”, valuesC2) 7 2 eoverrige 23 pubic" Object cavestatecFacesContext ar90) { 3 Object) values = new ObjectC4]: x values(0)'= Super. savestate(arg0): R ValuesC1) = getatirioutes() get vatue" B Valuest2) = getattributes().gett~style"): 3 Walues(3} = getattrtoutes()gett“styTectess™): 38 Feturn values Pane) x a implementagio destes métodos, mas ‘como 0 nosso intuito aqui ¢ aprender os rincipais conceitos de implementacao de componentes, eles foram sobrescritos ‘como exemplo de implementagao. O que épossivel notar aqui é que estamos cons- truindo erecebendo um vetor de objetos, sendo 0 primeiro elemento 0 estado da superclasse. Isto conclui a implementagio do compo- rnente mostrando que com poucas linhas de cédigo foi possivel criélo. O préximo paso é a criago da classe que ira geraro cédigo HTML semelhante ao que vimos na simulagio. Griandoo renderizador Chegou 0 momento de eriar a classe Renderer que iré gerar 0 cédigo HTML do componente. Como o componente iré apenas exibir dados, no serd necessério sobrescrever 0 método decode). processo de codificagdo dispoe de trés métodos: encodeBegin(), encodechildren() e encodetnel) Tais métodos sio titeis, principalmente, quando a tag do componente possui um corpo, ou seja, permite que outras tags sejam adicionadas entre a delimitacdo inicial e final da tag. A Listagem 3 mostra o codigo da classe renderer. Note que o componente possui ‘um corpo para o qual o tooltip seré ex do, por isto foram sobrescritos os métodos encodeBegin()(Linha 8) encodetnd® (linha 26). Ométodo: in, primeiramen- te, verifica se o componente deve ou no ser exibido através do valor do método IsRendered) (linha 10). Desenvolvendo com JavaServer Faces - Parte 2 Na linha 13, ¢ obtida a referéne’ Responsediter, classe pela qual sors gerade ‘9 oSdigo HTML, Os principais métodos que esta classe oferece sto: startElement) que invicia uma tag, HTML; weiteAtbuted, que define um atributo para o elemento {niciado no momento; wniteFent, que c ereve uma determinada String dentro do clemento aberto ¢ endElement), que fecha atagaberta, Oidentificador padrao do componente do dols-pontos por um hffen. Logo apés, €Iniclada a tog style e na linha 18 6 cha- mado o método generateComponentsyle), we Gimplementado a partir da linha 78. Ocddigo deste método foi omitido, pois © contetido & a concatenagdo do estilo CSS exibido na Listagem 1, substit do apenas "ComponenteTeste” pelo id do componente ¢ “/LivrosOnline” pelo contexto da aplicagdo que foi passado como pardmetro. , finalizando 0 méto- nentes inseridos no corpo da tag através, do método encodechiléren(). E, para fina. lizar a geragio dos artefatos HTML, 0 método encondetnd() ¢ chamado. No geral, ‘0 método cria as tags spane dlv usadas na ‘geragio do tooltip em si. As linhas 55.3 @) tote do Devtian usa 0 separador dois-pontos (*") para gerat 0 ID exibido no cliente, porém este Sum caractere usado para separar o seletorda propriedade cm CSS ¢ por este motivo, na linha 15, € feta asubstituigho Ustagem 3. otiphende ges ata ML C55 componente do, & fechada a tag style ¢ iniciada a tag 4, onde seré inserido o Jooltp e também o contetido para 0 qual ele se dest Depois que o método executado, sto decodificados 0s compo- ‘TU (Tag bar Descriptor) & um ato IML gue ‘ont des ecenfiguao da ite de gs bem ‘modern dead tag petercente a bot. 5 aq TD so uiiades plo we canter pr rola ds as amb por eramentas de eo Ae pigs. codeBegin() 6 F package [Link] “___wrfter.startélenent(spay™, tooltip 2 pores oat tides 42 writer eritenttrrbute(id", to'* "top", "1d": 3 public class TooltipRender extends Renderer | 43 writer-writeactrioute(“class”, 3 “Styleclass™ S public final state String RENDERLTYPE = 44 writer-endelenent ("span"): ‘jm. 1ivrosonl ine. render 8001p"; 35 T7'content port s 45 [Link]("span", tooltip 2 a 4) ritercwritenteribueetig", 4d 4" middle 3 public void encodeegin(FacesContext context, 48 Mester writeateribute(class", “middle”, ‘UlCospenent component) stylectass") 8 throws T0Exception | 42/1 content container 10 tf Cieompanent. 1sRenderedt)) | 50 [Link]€lement("div", tooltip): n return 51 writervuritenttribute( "Id", id + "content, “ia: woo 52 Mriterswriteateribute"class™, attributes. 13 ResponseWriter writer = context. ‘gettrstyleclass"), “styleclass"): getResponseliriter() 53 writersuriteattriputer*style™, attributes. 14 String d™= component setc} ienttd¢context); igetcrstyle"), “styleclass"): 15 td'="[Link]*y "-")s, si "render conntent 16 [Link](*siyle™, component): 55 UlComponent content = tooltip. V7 writerzwriteattribute( type, stextiess*, gettoot ipcontent(): “typ 56 {Fe (content f= Ault) | 18 [Link](generateconponentStyle(id, s7 content -encodedegIn(context): 8 context .getExternalcontext(). 53 Content .encadeChilérent context): ‘getRequestcontextPath()), esapenent, sul) 58 content .encodeEnd( context): 20 writer-endElenent(styie"): 6b else | 21 [Link]("s", component; 61 [Link] [Link]("value") 22 writerswritesttribute(tigé, fd, "1d": ‘component, mut) 34 ee 3 2 63/7 ends content container 25 serrige Si [Link]("éty"): 26 public vosd encodetnd(FecesContext context 6 V7 endg content UlCosponent component) 66 [Link] ("span"); 27 thraws "T0Exception { § 7 botton part 28 1f [Link])) | 63 [Link]("span”, tooltip 2 retur 69 riterswriteattrtbute("Id", 14 + "potter", “iu"); cn) 70 Wrstervwriteateripute(class”, *botton™ 31 MapeString, object> attributes ~ conponent. “styleclass) getAttributes(): TL writersendEtenent("span"); 2 72 Th ends‘ container 33 String $4 = component gett ientid¢context): 73 writercendélenentt span"): 54 TooltipCanponent. tooltip = (Tool tipcoapanent) 4 ‘Component 25 [Link](™ 35 Responseliriter writer = context % 1 getResponsedriter(): n 36 container 78 private string generateConponentstyle( string 37 writer. start€lement “span”, tooltip): ig, Steing context) | 38 [Link] "1d", 10+ “tooltip”, 79 SiringButider css = new Stringgutlder(s S10); 80 7/°CS$-do componente e inserido-aqu weitersurttentertbute(class”, “tooltip”, 81 return css. tastringt): “euyletlase")s & 1 ota part 8) 62 morecem destaque, pois elas geram fo contedido da dica, A tag facet possui precedéncia em relagio propriedade value ¢, neste caso, 6 componente infor: mado dentro da tag facet & decodificado, Por fim, as tags div e span so fe Sinserida a tag span, que gera 0 rodopé da dica. Finalizandoaimplementagio do rnderer, chegao momento de criara classe de inte gtagio coma tecnologia JSP? Antes ce ts ‘componente, énecessério registrar a lag, fem um arquivo TLD c registrar 0 compo nente dentro do arquivo [Link] hadlas e Integraéocom IP ‘A ditima classe a ser criada & a classe «de integracSo com JSP ou clase ta. Essa , ou soja, assim como o corpo da tag, 0 valor dos atributos também no aceltard seripllels. ‘Ap6s configurar 0 componente no deseritor de tag library, resta apenas registrar 0 componente ¢ 0 renderer no arquivo [Link]. A configuragio Usage uot 1 cian verston=" vers ton= I tpe//Jav web Jsptagliprary 2 1exsd"> [Link]/xni/ng/Javace hetp:// av uns con/xnt /ns/javece/, ‘vroson! ine. [Link]. ooltipTagc/tag-class> no ser gerado 4 5 conponentes personal {zados. 6 F &[Link]/t11b-verston> 3 Shore-nane>jac/short-nane> 9. Survonttp://}a.1 vroson ine/Jst/ntmt 10 “tae? 11 ““Shane>toortspc/nane> 12 Gagrelass>sm, 13 14 cattribute> 1S “edeseription> 16 TaentiFicador do toot tip 1 c/deseript tons 18 name> 4deynane> 19 Grtexprvalue>falsec/rtexprvalue> 20 ciattributes 21 Gattripute> 22 “description 3 Tndica se 0 componente deve ou 2 cideseription> 2 26 © fatsec/rtexprvalue> 2 SGeferred-value> Ey ‘ctype baoleanc/type> 29 cideterred-vatue> 30 cattribute BM Cteribute> 32 ““Gaesertption 3 Define o estilo do componente 34 cideseription> 35 Ghane>styletlassc/nane> 36 falsec/rtexprvalue> 37 Gaeferred-vatue> 38 “typed Java. lang. Stringc/type> 38 csaeterred-value> ao cractributes AL Gteributes: 42 “Gaeseription> a ‘Atribut estilo do componente 44 c/aesertptton? 45 Gnane>stylec/nane> 46 Grtexprvaluedfalsec/rtexprvalue> 2 GGeferred-value> e java. lang. Stringc/type> 48 craeverred-value> 50 51 be ceescrtption> 53 ‘Atribul estilo do componente $4 55 Gnanedvaluec/aane> 56 ——_Crtexprvalue>valuec/rtexprvalue> 51 Gaeferred-value> ype? [Link]¢/type> rerred-value? bute? do componente se resume a0 simples clemento , conforme cédigo da Listagem 7. Esse elemento possui ‘outras opgdes além do tipo € a classe que facilitam a identificagéo do compo- ente em IDE’s, como: fcone, des: nome de exibicio, etc. Para 0 exemplo do artigo, apenas estas duas opsdes s30 suficientes. Todos os renderers sio registrados dentro do elemento , pois um renderer io existe por si s6, ou seja, ele precisa estar associado a um Renderhit. Registrar o renderer também é simples, ele € configu- rado por meio do elemento . A opcio (linha 8) recebe oiidentificador do componente ao qual cle deve realizar a codificacio e decodificagao. ‘A partir deste momento, a tag ja pode ser uusada no projeto da seguinte forma: _fmtosipid= tcp value =nlerme apenas meas do or “chouputabel lve" I> (Ou utilizando facets: _jtoaipid tipsy Tn fay: Alfonse: persed hguelrup> ‘b> Preenchinento bianco Infrneapensos meres oF attacet> “houputatelaue"CF ter" /> Esta segio abordou como criar um novo componente em JSF. Mas aqui cabe uma pergunta: é possfvel personalizar um jé existente? Especializar um componente é ‘mais simples que criar um novo. Porém, antes de se especializar, € preciso ter dominio, no minimo razodvel, da imple- ‘mentacdo deste componente. A seguir é apresentado um exemplo mostrando a criagio de um componente de imagens desenvolvido a partir da implementagio padrao para possibilitar a exibigio de imagens salvas no banco de dados. Griando componente de imagem ‘Uma pergunta comum em {6runs de discussio & “Como exibir imagens salvas no banco de dados?” Hi diversas respostas para esta pergunta, mas a maioria delas ‘nBodideal a0 conteto}SF. Peter Muir, der do desenvolvimento doSeam Framework, cescreveu em seu Blog uma sohiglo par a exibigho de imagens armazenaclas (ver Links). Diilizaremosesta solugho sugerida por Petter fazendo alguns nyactoris, visan- domaior performance e evita problemas para alguns ce Exibir uma imagem vinda do banco de dads envolve duas requisighes distintas: ‘uma requisiglo para obter © contevido da pagina e outra para obter a imagem. Apesar de alguns navegadores possibili- tarem informar na propriedade sre da tag os bytes correspondentes imagem, 1 solug3o do componente no pode se limitar ao browser X ou Y. Como foi dito anteriormente, componente deve ser 0 _maiscompativel nas mais diversas verses ‘e browsers disponiveis no mercado. [Em se tratando de duas requisigdes, um questionamento vem 3 tona: como manter aimagem disponivel entrea requisigfo da pagina ¢ a requisicio da imagem? Uma solugSo para este caso 6 salvar a imagem rna.sess5o usando identificadores variaveis para cada imagem. O componente exibe ‘as imagens usando este conceito ¢, apés ‘exibida, a imagem é removida da sessio. Remover aimagem da sessio apés exi la implica em dois aspectos: um positive € outro negative. O ponto positive é que os problemas com armazenamento na sesso serdo minimizados, ou seja,o tem- po que a imagem ficaré armazenada na ‘sesso é muito baixo. Mas, ese a imagem for chamada mais de uma vez? Este € 0 ponto negative, Uma vez removida da ssessio, esta imagem ndo seré maisexibida 1 partir da segunda chamada. Estes casos acontecem quando hé alguma funcio Ja- vaScript que re-exibe a imagem em outro local, por exemplo, re-exibir uma imagem ‘em uma jancla modal. Para este problema 1h6 uma solugio: usar uma URL Resiful © cestratdgias de cache, Glando a asse Componente ‘Com base no contexto exposto no pico anterior, chegou © momento de erlar 0 herda da classe Htm\Graphlcmage padrio da ‘especificagio JSF. O componente gera uma URL Restful dindmica (linha 13), ou soja, ccada vez. que 0 componente é chamado, cele gera uma chave hexadecimal de um ‘ngimero aleatério (linha 32) que ¢ usada ‘componente de imagem. Ele Ird expecta- Waar 6 componente padrio de exibigio dle imagens, 0 . A classe UDynamicimage, exibida na Listagem 8, para obter a imagem na sessio, ‘AURL da imagem precisa ser vilida den- tro do contexto JSF. © padrio de URL da imagem pode ser configurado por meio de {sagem Reade ocemponste oan eon 2 2 “Ceomponent-type>n. 14vrason! ine. tooltip 5 Component -class>Ja. ivrosont ine. Jef .conponents. Tool tt pComponent ‘/eomponent-€1ass> 4 creomponent> 5 Grenderskit> 6 “Crenderer> 7 “"Catsplay-nane>toolt1pc/ateplay-nane> 8 Jn Tivrosant ine- toe] t1p¢/conponent-faat1y> 3. m,11vrosonl [Link] toe) tipc/renderer type? 10 jn.1 vrocanl ine. Jef render Tool tt pRender 11 12 corender-Ki8> QUANTO TEMPO VOCE GASTARIA PARA DESENVOLVER COBRANGA COM BOLETOS BANCARIOS PARA APENAS UM BANCO NO SEU SOFTWARE 56 BANCOS E MAIS DE 420 CARTEIRAS DE COBRANGA PARA, IMPRESSAO E/OU ENVIO DE BOLETO BANCARIO POR EMAIL: © cERAGAO DE BOLETOS ON LINE; (GERAGAO E LEITURA DE ARQUIVOS (REMESSARETORNO) NOS PADROES FEBRABAN E CNAB; [MAIS DE 40 EXEMPLOS EM DIVERSAS LINGUAGENS DE PROGRAMACAO DOWNLOADS E INFORMACOES EM WW COBREBEM COM | Desenvolvendo com JavaServer Faces - Parte 2 ‘Usage Case ypaninage T package jm 1ivroson! ine-JsT-componentsy M7) ant other TIME tr foutee 2 \anorts foram oat Tos 9 He CaetAttetutesc) te mult) 3 pubite class Ullynaatctnage extends ltmlGraphicimaget 0 stringt]!Ingattetbutes = { align’. git" a Mpublye statte final String TANTLY = "[Link] tne weder". "height", *hspace’ cf Rinaryaraphictoage”: a “usemap" . “vspa 5S publie statte mal String MAPPING = ~[Link] “thle. OLE AULTCAAPPING™ 6 “omoursoup", “ormouseover” . > public static String aetvtew!00) 1 8 .Toneouseut", “onkeypee? 3 "return “Dynamic toage “onkaydown™,“ankeyup", "ancl Ick" aa “ for (String property. "inghttributes) ¢ to % ‘Object value ~ getALteibutes().getproperty? 11 Random random = new Random) % String htmlProperty = “styleG tase” equals R (property) 1'“class” + property: 13 private string bulldleageniRl String key) 1 a 11 Uisre* equal stproperty) hk vaiue I= nut) | Facescontext context = [Link]); | 48 welter wrltenttrlbutetntal Property, v {Caternat Content extContext = context getExternalcontextt >; property): String mapping = [Link] Harring): | 49 ‘mapping = mapping = null || "sequels (mapping) 20 TE jer $1 sapping 82 Ster endElement ("ing"): rmpoing ~ [Link]"*", get¥icwl0c) + /key/™ + keydi | 53 rapping [Link](=/") sa throw new 11TegatAcgunentException("value aust Pmapprne byte} Instanee type"): + mapping: 58 return [Link]) + mapping: | 36 1 57 Goverriae 26 Cover 58 public votd encodechitdren(FacesContext 2°90) throws 27 public votd encodetegin(FacesContext context) throws TOExcept ton (1 TOException | 59 eoverride 28 -ResponseWriter writer = [Link](): | 60 publte votd encodetnd(FacesContext arg0) throws 29° 4 Cauper-getvalue() instanceof bytel) | TOEx ¢ gerado no método encedeBegin() (linha 27), uma vez que este elemento nio suporta tags fihasem seu corpo. Oarray debytes cor- respondentes ao contesido da imagem € salvo na sessao (linha 34) usando a chave sgerada. A imagem recebe 0 identificador ‘gerado pelo contexto JSF salvo no dlenté ha 36) em seguida a imagem recebe ‘2 URI gerada pelo método buildimageURI0. Para completar a geragSo do elemento , os demais atributos da imagem sio atribuidos, caso tenha um valor in- formado (linhas 39 a 51), eo elemento & encerrado na linha 52 ‘Ocomponente suporta apenasimagens no formato array debytes. Caso 0 tipode dads informadona propriedadte value sejadiferen- te, élancada uma MlegalAgumentException Visando evitar possiveis incompatibili- ddades com outras implementagbes JSF, fo- am sobrescritos os métodos encdeChlren) € encadetnd). E, como todo 0 contedido da tag foi gerado, estes métodos desprezam qualquer implementagSo. Por fim, os métodos getfamily) (linha 62) ¢ getRenderer() (linha 66) foram so- brescritos para redefinir o identificador do componente ¢ para anular a atuagSo dde qualquer renderer usado para gerar a imagem, respectivamente. Cando Phaselstenerparaexbigio das imagens ‘Ocomponente gerou um elemento com uma URL vélida dentro do contexto JSF que originars em outra requisigao. Ha vvérias formas de se tratar esta URL, uma dolas através do uso de Phaselistener. Um Phaselistener é uma classe que permite executar determinadas operagées antes (ou depois de uma das fases JSF. Para exibiraimagem, vamos interceptar todas as requisicdes JSF antes da pri- rmeira fase, a restore view, como mostra a Listagem 9, Paraisto,€ preciso retornara constante RESTORE_VIEW no método getPha- seld( (linha 4), Todo 0 processamento sera realizado antes da fase, por isto ométodo afterPhase() ndo possui implementacio. O ‘método beforePhasel) (linha 10) échamado antes da execugio de uma fase JSFe veriti- cardia presenga do view id do componente (inha 14) que indica que a requisigto se refered recuperagio da imagem. ages. Case ase sada para eb amagen haa se Terinp viewidT 1 packoge jm, 11yrosont ine. 4st phaselfsteners a cert 4 Peiaporte: afte J ponte class lnaaetor Phasetdt | lerPhaseLtstener Implements PhaseLtstener ( Hapestrings obsect> seustortap ~ facescontext, igeutaternalcontext).setSess onMapt): 3 Ube Pues et a yer rneag AcaTORE vce strate rescentes © ettenebreterts tevin: return Phased ASTOR 3 ipshaithespenssrelponsettvieretResanse $ Be eenintnfteernlcan nase vod avterasecmhaetvent event) | tiscus fon conttnatey eesvicetey}h {pat ytd antetmse wt 3 pote tne terete eso, 16 vols bevoretasecPhascent event | ite no tour: 1 PPG tatent tacescontent = Facestontent, 2 raceneantextresponseconpletet: etteetentnatancet)e Be caus sitcoms se__siinu’ritoat tgs atapsereteutequst> ect obd = [Link] resource): A Stam atentette c CUmdcantestsgeetequeston, | 41 TF Coy tnstanor byt) etiegnestit 8 eopnge sl Statur itighorvetRespone.S¢.08): te er RESIS Cuty a vtewottd ndesor 8 sheer ee Eahtaarsoetfastancets olineyntnage get ewtot)) f= a ernaata ean stop, 360000) ng (UabvatrcueeSidebeccntent viewoottdh & response setieagert "Prope, "es nay & rebpante, thease ache contr at ie, cee sete) U deavate state string gettesorceteystring view | 47 rtapontesetaeepert apices", htelCapiresdate 1M Urt tee ce ah Sa cans totetou ast inesor FePantGioraatte gttiaet)) 18 eae teagty ® serrata respi etouttsreos zo resource VresureertngeNOE "bed? 8 sleteet yet ob) Ho reverse stoinont voresinsar®. 2) + eesurens | $8 seusn) He ettaetaures 3 seasse ean 2 Hesston. resposecompetet: A battc wate cucterme nmcgrrmerameo) | : tS ytepoecFanest say Spi cboteoen 1 eeeas tasay aheaesre TE Laten cexcepton 0) | maccicsr BE | Skeet Sh Sothtctpliontrrortnsing resort", ey: 35 guapetaralsettietonectistoegettinzonecvear; | 32! Bia goue a S 3, 30 private votd serveResourcelFacestontext facesContext. [Link] requisigbes que o view destépre- sente, o método serveesoure) é chamado. Primeiramente, a chave da imagem na. 2 epeetesta n>: iments Scored 2 GREET cteargeerorn ini. phses catey0 (linha 18) depois, éverifiadosehs 3 "00717 : é 7 Usage 10. Rexsando Pastner a fest ener InageLoaderPhaseLtstener algum atributo na sessio através da chave ‘dn.1{vrosonl tne. BinaryGraphicimage informada e caso no encontre 6 definido “Image not found”. Acontecendo isso, 0 _étodo responseComplete) € chamado para core tne engi ee ede enme Para cs casos que a imagem existir na ses- 1 package jm. 11vroson} ine. [Link] socapocrenendoantuindbocnes $B oy cereaeio, mae egntaae Pomerecca sae} ltrtiaeeeecanan si ei ra sono ce epone MUN are SioimesctaitedeceumahorPorim, — § Siig [iia natin de Seritomption, feat ghgttentrertne ‘onde 0s bytes da imagem sero escritos 12.) i (linha 49) e 0 método responseComplete() & te chomadn pr cnc sven Deste modo, apés escrever os bytes da Jmagem, 0 fluxo JSF ¢ encerrado exibindo a imagem no navegador. Para que este Phase- User seja executado, ¢ preciso registré-lono arquivo faes-config-xml, conforme o cbdigo ‘exibido na Listagem 10. Note, também, 1 presenga da declaragio do componente {inhas 447) no arquivo fces-conigzm. ‘Antes de ver o componente funcionando, esta sobrescrever a classe de integragdo com JSP e registrar a tag no Tag Library Descriptor, abordados na sessdo a seguir. Integragéo com 15P A classe tag para 0 componente deve herdar da classe tag padrio, Graphiclma- ‘gelag, da implementagao de referencia JSF. Nao ha muito a ser feito na classe DynamicimageTag, descrita na Listagem 11, Desenvolvendo com JavaServer Faces - Parte 2 uma vez que o trabatho sujo seré reali- zado pela superelasse, Faz-se necessario apenas redefinira classe component a ser sgerenciada ea classe renderer Paraométodo getContentTypel) (linha 8), & preciso passar 0 valor do component {ype [Link],clo- finido no [Link], Para facilitar a manutengdo do eddigo, foi erinda a ‘constante FAMILY na classe UIDynamicimage ‘com este valor. Como a geragie do cédigo HTML relacionado A imagem acontece na classe do componente, nao se faz: mai necesséria a utilizagao de uma classe renderer. Por este motive, 0 método getRenderertype) retorna um valor nulo para indicar que 0 componente no ird usar um renderer. Uma vez criada a classe de integragio com a JSP, chegou o momento de re- gistrar 0 componente no arquivo TLD. A Listagem 12 demonstra 0 c6digo necessério para registrar o componente na tag library. Pelo fato deo componente ter as mesmas propriedades do compo- nente padrio, as propriedades foram ‘omitidas. Para obté-las, basta ir até a Web App Libaries do projeto, expandir 0 contetido do arquivo sfimpl jar e abrir arquivo itml_basic.ld presente na pasta ‘META-INE. Na versio 1.2.12, os atributos da tag graphicmage esti localizados apés a linha 2650. A tag tem como nome dynamiclmage (linha 6) e a classe DynamicimageTag é definida na linha 7. elemento HTML ‘no possui corpo, por este motivo o ‘elemento body-content (linha 8) tem como valor “empty”. Deste modo, ao eriar a tag dentro de uma IDE, a tag ser auto- ‘maticamente fechada: . Por outro lado, quando a tag possui suporte a corpo, ela € completada pela IDE da seguinte forma: Meu textochcoutputText>. Depois de registrada a tag no arquivo TLD, a implementagio do componente de imagem foi conclufda. Agora, chegou ‘momento de criar um carrinho decom- ras para a aplicagio LivrosOnline in ciada na Parte 1 desta série. A proxima Usage 12. agai compere na tg ery 1 caw 2 Tectntton 3 ““Eatbe aa HINL ino" basoada om um array de bytes, 0 componente tem 05 mesnos 1 Conportamentos do componente podria. i } tag-classddn,ttvroson! Ine, J2f .components. Oy 8 5 r jeTac/tag-class> 10 LUstagem 13. fade peste des. 1 package Ju. 14vrason! ine-ent dade: 2 317 Imports ome ides 4 5 etntity 6 erabtetname="TOLIvRO") 7 publte class Livro Implenents Serial zablet 8 "@coltimi(nane="PUBLICACAD", Tength=4, nul lable~fatsey 9 private Integer anoPubl fea lo “ecolumn(name="AUTOR", Tength=S0, nul Tablenfalse) 11 private String suto 12. GanyToonet rete 13. @lotncolunn( name 14 private Categoria categoria: 15 @ColuanCnane="DESCRICAO™, ul lable: 16 private String descricao! 17 @Coluan(nane="EDiTORA", iength=50, nulTable=true) 18 private String editora: 19 ld OGenerotedvslue(strategy~Generat ionType. IDENTITY) 20. private Integer ids 21 Scolunn(nane=" LD1OMA 22 private String tdiona 23 Gcotuan(nane=" 1HAGEN" 24 private bytel) imagen: 25 Gcolunn(name="1SBK-13", 26 private String isbn: 27 @colunn(name "NOME" 28 private String none: 23. Gcolum(nanen"PAGINAS: 30 private Integer paginas 31 @colunncnane="PRECO", precision=B, scale=2, nullable~false) 32 private Double preco; alse) Tengthe20, nul lable=fatse) nvTablestrue) ength=14, nullable-true) Jength=s0, nul lable-false) length-s, nullablesteue) 3 34 publte Livro U1 357) nétodos GET/SET onitidos a ‘sessiio aborda a aplicacao das tags criadas no artigo para codificagio das paginas deste carrinko de compras. Componentes criados em aco CChegou 0 momento mais esperado do artigo, omomento de estar 0s componen- tes desenvolvidos. Considere o cadastro de livzos no qual a imagem ilustrativa 6 salva na tabela do banco de dados em ‘uma coluna do tipo BLOB. Omapeamento ‘objeto-relacional para a tabela de livros é demonstrado na Listagem 13. A imagem do livroémapeadana propriedade imagem do tipo byte. ‘A pagina de entrada da livraria virtual cexibe esta imagem salva para cada livro listado. A exibigdo da imagem utiliza 0 ‘Além da imagem so mostradoso titulo, ceditora, oautoreo prego. Para complemen- tarocontesido de cada livre sto mostradas, através do componente de tooltip eriado, formas de pagamento parcelado. A tela ial daloja virtual de livros ésemelhante tela mostrada na Figura 3. A Listagem 1d mostra 0 cédigo usado ina geracio da pagina de entrada da loja virtual. Antes de usar os componentes pela primeira vez, & preciso adicionar a diretiva taglib correspondente a0 arg) TLD configurado (linha 1). Note que a sfo inseridos os conteidos dos livros listados. A propriedade lives do Ma- nagedBean liestean contém a lista dos ivros selecionados e os exibe através da tag cforfach da JSTL. Para cada livro listado, € criado um link que chama a agio seleconativo0 (linha 7). Este link compreende a imagem e o nome do li- ‘ro. Quando o usuério clicar neste link, antes de chamar a acio para selecionar 6 livro, a propriedade lvreldSteconado de limesBean recebe 0 identificador do livro selecionado por meio da tag fsetPropertyActoalistene (linha 8). ‘A imagem do livro é exibida gracas 20 ‘componente criado (linha 10} note quea ‘expressio #livedmagen) retorna o array de bytes correspondente Aimagem. Além do contetido da imagem, s8o fixedos o tamanho e a largura da imagem e abaixo dela é mostrado onome dolivro, comple- mentando 0 conteddo do link. Logo abaixo ao link, € adicionado ofol- sip Vinha 14) para exibir as condigdes de pagamento. Como o ontetido dacaixade sugestdo ¢ mais elaborade, foi escolhida a opsio usando facet. Aqui, éimportante lembrar que dentro da tag facet € per- ido informar apenas um componente, motivo pelo qual foi adicionado ocompo- nente hpanelGroup (linha 17), usado para agrupar ocontetido da sugestio. Dentro da caixa de sugestdo sto exibidas as duas formas de parcelamento: os valores, ap6s 1 2 3 £ Gdiy sersvroncantatner> § ““[Link]="¥ (14 ¥[Link])™ var="tvro"> 6 “div teerLivroseen> 7 ‘hconmaneLine act on="#([Link])"> 8 “csetPropertyactionLtstener- valuc~"B(Itvra. 1a)" 3 ‘targete"d (vrossean- 1 vrotdselectonado}™”/> io
n GhroutpuText value@(]tvre,nome)™ > 2 1B forss) i Ciestoottip 1de"For 15 is v “ahepane| Groups a
1 2x 0 CheoutputText. valuen"([Link] / 2)" > 2 Cteconverthanber pattermnR8 PIO.00" locale“BR/> a hsoutputText>. B Sx ChfoutputText. valuenc#([Link] / 3) > 2 “Geconverthunber pattern"R5.0#0-00" locsle-"BR"/> a 3 gunepanelGroup> 3s otstaees. 2 i utputText value"P{[Link]) por #([Link]}/> 2 Sor) Xo Por. aper EN ‘hruputtene valueaCiivraorecol= style--color:0999300;"> Ea “fsconverthuaber patterneit 990-00" locale 3 ihzoutputtext> EY 3 cai 36 cresfortacn> 3 ai a divisao, sfo formatados usando a tag fconvertetumber padrio do Faces. As has 28 a 33 correspondem ao contetido alvo do tooltip, ou seja, quando o usuério posicionar o mouse sobre este contetido, serd mostrada a sugestio, assim como exibido na Figura 3. Para o exemplo mostrado na Figura 4, serio realizadas ste requisigdes SF, endo a primeira para gerara pagina JSF e mais seis requisigdes para exibir cada imagem. £ importante lembrar que as requisigbes para exibiglo da imagem nio executam nenhuma das fases JSE, pois, antes que

You might also like

<