a renovação do jsf

Download A renovação do JSF

Post on 24-Oct-2015

161 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • A renovao do JSF Parte 1

    Esta a primeira parte de uma srie de dois artigos que, juntos,

    traro ao leitor uma avaliao das principais caractersticas

    incorporadas na verso mais recente da especificao JavaServer

    Faces, integrada Java EE 7.

    Esta a primeira parte de uma srie de dois artigos que, juntos, traro ao leitor uma avaliao das principais

    caractersticas incorporadas na verso mais recente da especificao JavaServer Faces, integrada Java EE

    7. Embora a grande maioria das mudanas tenha um carter mais corretivo ou adaptativo, outras constituem

    um arsenal ainda maior e mais rico de recursos para o desenvolvimento de solues web em Java. Os pontos

    abordados ao longo da srie no visam, definitivamente, encerrar o assunto, que muito amplo e tem uma

    gama incrvel de aplicaes. Deste modo, nosso foco ser direcionado quase que totalmente para quatro das

    mais significativas caractersticas, as chamadas Big Ticket Features.

    Em que situao o tema til

    Este tema bastante relevante para todo desenvolvedor que use a tecnologia Java como alvo em seus

    sistemas. igualmente til para todo entusiasta de tecnologias web e que, por este motivo, gosta de se

    manter atualizado em relao ao modo como os frameworks mais populares do mercado evoluem ao longo

    do tempo.

    Precisamente no dia 12 de junho de 2013, a Oracle lanou oficialmente a verso 7 da Java Enterprise

    Edition, a plataforma Java para desenvolvimento de solues web. Esta edio mais evolucionria do que

    revolucionria, e conta com atualizaes importantes em praticamente todas as especificaes que a

    compem (Servlets, JPA, Expression Language, CDI, EJB, JMS, JTA, JSP e outras) e tambm com o

    lanamento de outras inditas, como a API para o protocolo Web Sockets (JSR-356) e a API para

    processamento de contedo JSON (JSR-353). Alm disso, a Oracle liberou sua implementao de referncia

    para essas revises atravs de uma nova verso de seu servidor de aplicaes, o GlassFish 4, bem como uma

    atualizao da IDE NetBeans para a verso 7.3.1, totalmente compatvel com a Java EE 7 e disponvel para

    download gratuito no site do projeto (veja o endereo para a pgina desta IDE na seo Links).

    Neste artigo, cobriremos as novidades em torno da especificao JSF, dando maior ateno para as

    caractersticas consideradas mais profundas, intituladas pelo prprio grupo de trabalho como Big Ticket

    Features. Ao longo do texto, revisitaremos alguns conceitos fundamentais para facilitar a compreenso do

    cenrio em que a implementao atual se insere, complementando com exemplos prticos e anlises passo a

    passo de todo o cdigo-fonte utilizado. Desta forma, esperamos trazer ao leitor um nvel de conforto

    suficiente para encoraj-lo a utilizar as novidades deste framework em suas prximas aplicaes web ou,

    ainda, aplic-las nas j existentes.

    Todo o trabalho realizado para o lanamento do JSF 2.2 originou-se no texto proposto na JSR-344. Boa

    parte do que se planejou foi cumprido, e o resultado final uma especificao ainda mais madura, completa,

    poderosa e, por que no dizer, flexvel. Entretanto, os atrasos foram inevitveis, dada toda a turbulncia

    gerada em torno da tecnologia Java ao longo dos ltimos meses por conta de algumas vulnerabilidades

    tratadas com grande preocupao e, cabe comentar, certo exagero pela mdia. Tudo isso fez com que parte do trabalho fosse iniciada tardiamente, culminando na reduo do escopo de algumas caractersticas e,

    em alguns casos, postergao de recursos para edies futuras.

    A liderana das atividades em torno do JSF 2.2 ficou, mais uma vez, por conta do competente Ed Burns, um

    engenheiro snior da Oracle frente do desenvolvimento desta especificao desde sua primeira verso. Na

    seo Links, no final do artigo, convidamos o leitor a visitar a pgina da JSR-344, na qual possvel

  • conhecermos todos os demais membros da equipe e tudo aquilo que foi proposto e realizado por eles. Esta

    uma cultura importante, pois nos ajuda a conhecer melhor o papel fundamental exercido pelo JCP (Java

    Community Process) na evoluo da tecnologia Java em sua totalidade. medida que analisamos o

    potencial e o nvel de influncia das cabeas por trs de cada JSR (acrnimo para Java Specification

    Request), bem como as empresas que, direta ou indiretamente, esto envolvidas nas discusses, passamos a

    entender com muito mais clareza os motivos que fazem com que Java seja lder no mercado mundial por

    tantos e tantos anos.

    Embora as chamadas Big Ticket Features sejam poucas (mais precisamente, quatro), envolvem muitos conceitos e imprimem, por este motivo, grande densidade ao tema. Logo, para que consigamos tratar todos

    os pontos principais com o cuidado necessrio e didtica adequada, dedicaremos todo o restante do artigo

    para a anlise pontual de cada um deles, reservando o final do texto para algumas concluses importantes

    acerca de todo o material apresentado.

    Algumas palavras iniciais sobre o JSF 2.2

    JavaServer Faces, como sabemos, uma proposta de framework para a construo da camada de

    apresentao em sistemas web desenvolvidos em Java. Trata-se de uma dentre as muitas especificaes que,

    juntas, constituem a plataforma Java EE. Inmeras tecnologias relacionam-se entre si neste universo, e o

    JavaServer Faces 2.2 tem algumas dependncias diretas que precisam ser conhecidas por todo

    desenvolvedor, para trazer ao leitor uma viso da posio deste framework no ecossistema global. So elas:

    JavaServer Pages 2.2, incluindo Expression Language 2.2 (JSR-245);

    Expression Language 3.0 (JSR-341);

    Servlet 3.0 (JSR-315);

    Java Standard Edition, verso 6 (JSR-270);

    Java Enterprise Edition, verso 6 (JSR-316);

    Java Beans 1.0.1;

    JavaServer Pages Standard Tag Library (JSTL) 1.2.

    Todas essas JSRs esto devidamente documentadas no site do JCP, livres para download e consulta.

    Novamente, recomendamos ao leitor que dedique algum tempo para conhecer melhor este processo, que dita

    o passo do progresso da tecnologia Java em seus diversos sabores.

    Outro ponto que devemos destacar, antes de comear a investigar as novas caractersticas do framework, a

    limpeza realizada nos seus espaos de nomes (namespaces). O nome Sun foi definitivamente removido das

    URIs, que foram redefinidas conforme o contedo da Tabela 1. Embora os namespaces antigos ainda sejam

    vlidos, a recomendao, desde j, para que passemos a evitar seu uso, substituindo-os pelos novos.

  • Tabela 1. Mudana das URIs dos espaos de nome.

    Agora que j falamos rapidamente sobre essas mudanas mais gerais da especificao, hora de

    comearmos a explorar suas principais caractersticas.

    A primeira Big Ticket Feature: marcadores amigveis HTML

    Antes de entrarmos no mrito de marcadores HTML-friendly, dedicaremos algumas palavras iniciais para contextualizar o processo de tratamento de requisies de usurio desde o momento em que chegam ao

    servidor at aquele em que uma resposta enviada para o cliente. Observe o diagrama da Figura 1, que

    retrata a mquina de estados qual toda requisio JSF submetida. Tudo comea em sua recepo, feita

    por uma instncia da classe javax.faces.webapp.FacesServlet. Este o controlador frontal do framework,

    por onde toda entrada (javax.servlet.ServletRequest) chega e toda resposta (genericamente representada

    pela classe javax.servlet.ServletResponse) despachada. A cada nova requisio, este controlador ficar

    responsvel por criar um novo objeto de contexto (javax.faces.context.FacesContext) ao qual todas as

    estruturas relacionadas a ela (e seus respectivos estados) sero vinculadas. Logo em seguida, chega o

    momento do ciclo de vida ser executado; representado genericamente pela classe

    javax.faces.lifecycle.Lifecycle, ele encapsula o tratamento de cada um dos seis blocos ilustrados no

    diagrama da Figura 1 da seguinte maneira:

    Lifecycle.execute(javax.faces.context.FacesContext): cuida dos cinco primeiros blocos do ciclo de vida,

    da restaurao da view invocao da aplicao;

    Lifecycle.render(javax.faces.context.FacesContext): cuida da fase de renderizao de respostas que

    devero ser enviadas ao cliente (normalmente, um navegador web);

  • Figura 1. Ciclo de vida de requisies JSF.

    Observe que apenas a renderizao separada dos demais blocos do ciclo de vida, fato justificado pela

    maior complexidade associada a esta fase. Nos dois mtodos listados, vemos que h um parmetro de

    entrada que guarda uma instncia de contexto, criada para o tratamento da requisio. Este objeto ser, passo

    a passo, recheado com todas as informaes pertinentes interao atual, de modo a representar de forma

    fiel a situao da aplicao, a cada momento.

    A primeira fase do ciclo de vida a Restaurao de uma view, que, em JSF, representada genericamente

    pela classe javax.faces.view.ViewDeclarationLanguage. Nesta fase, o controlador procurar por uma view

    cujo identificador (view ID) corresponda exatamente quele passado na requisio. Caso no a encontre, ela

    precisar ser totalmente montada. Por outro lado, se for encontrada, ser apenas restaurada. Em ambos os

    casos, o objetivo desta fase fazer com que a view associada requisio esteja devidamente montada e

    identificada no lado servidor.

    A forma que o JSF usa para manter esta representao de uma view em memria a de uma rvore de

    objetos, que se inicia a partir de uma raiz (uma instncia de javax.faces.component.UIViewRoot), na qual

    todos os demais elementos (especializaes de ja