BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Um panorama do JSF 2.x com o líder da especificação, Ed Burns

Um panorama do JSF 2.x com o líder da especificação, Ed Burns

O InfoQ teve a oportunidade de conversar com Ed Burns, Engenheiro Sênior da Oracle e líder da especificação do JavaServer Faces desde sua primeira versão. Burns nos falou sobre onde o JSF se posiciona em relação a HTML5, recapitulou as mudanças nas versões recentes, e resumiu o trabalho sendo realizado para a próxima versão, além de discutir os rumos da tecnologia.

InfoQ: Você poderia resumir as principais mudanças do JSF 2.1 em relação ao 2.0?

O JSF 2.1 foi um revisão menor; não trouxe alterações de grande impacto na especificação. A principal mudança ocorreu no ambiente de execução (runtime); implementamos um mecanismo que torna possível reconhecer uma página JSP como se fosse uma página Facelets [Facelets é uma linguagem de marcação para construção de páginas web utilizando os componentes do JSF]. Em outras palavras, qualquer página jpsx será processada como uma página xhtml [extensão usada no Facelets], desde que todos os componentes definidos na página JSP sejam suportados pelo Facelets. Dessa forma, aplicativos com grande quantidade de páginas jspx podem tirar proveito, por exemplo, de uma renderização otimizada do JSF.

Também adicionamos um novo plugin, o FaceletCacheFactory. Esse componente permite a customização e o controle de como as instâncias dos objetos do Facelet são mantidos em cache. Com isso, é possível customizar uma factory, por exemplo, para recuperar instâncias de objetos a partir de uma base relacional otimizada.

InfoQ: Quais são as novidades previstas para o JSF 2.2?

O Java EE 7 traz suporte a multitenancy [habilidade de isolar dados, tráfego, configurações e recursos em um ambiente distribuído, de forma transparente para múltiplos clientes]. O multitenancy é uma característica essencial para plataformas de cloud computing, e como o JSF 2.2 é uma das tecnologias que compõem o Java EE 7, implementamos duas funcionalidades para suportar multitenancy: Tasks Flows e Multi-Templating.

O objetivo do Tasks Flows (fluxos de tarefas) é permitir que uma coleção de páginas JSF seja reconhecida como um único fluxo lógico, de forma que essas páginas possam manter e compartilhar dados com alta coesão e baixo acoplamento, o que favorece a manutenção do software. Essa funcionalidade foi fortemente baseada em dois produtos: ADF Task Flows (da Oracle) e Spring Web Flow (da VMWare).

O uso de multi-templating é uma alternativa para sites que precisam de mais flexibilidade e opções na apresentação do conteúdo, indo além da proposta convencional de mudar cores ou fontes (skinning) do conteúdo. A partir da versão 2.2 o JSF suportará a construção de aplicativos web com várias opções de templates, tornando possível mudar, além do skin, a forma de como as informações são apresentadas.

Com essas duas novas funcionalidades, será possível construir uma aplicação JSF sobre a infraestrutura de multitenancy do Java EE 7 - tirando proveito de todo o potencial disponível em uma plataforma de cloud computing, e de forma simples e produtiva.

InfoQ: Foi implementada alguma funcionalidade no JSF 2.2 para suporte a HTML5?

Queria deixar claro que não estamos tentando reconstruir o JSF 2.2 para torná-lo um framework para desenvolvimento de HTML5. O HTML5 é importante, principalmente por padronizar um modelo de arquitetura com servidor leve e cliente rico.

No caso do JSF, a maior parte do código para a lógica dos componentes visuais reside no lado do servidor, e isso não muda com o JSF 2.2. Mas existem áreas do HTML5 que podemos alavancar no JSF:

Metadados. Aplicações JSF têm acesso a uma grande quantidade de metadados. Precisamos encontrar o melhor modo de vincular os metadados do JSF com as funcionalidades equivalentes do HTML5.

Seções e cabeçalhos. A estrutura de seções no HTML5 foi definida com base em pesquisas sobre como estavam sendo usadas tags <div>, e a mesma ideia pode ser aplicada e Facelets, identificando como estão sendo usados os templates.

Elementos associados a formulários. Formulários são a razão da existência de muitas aplicações web, e é nesta área que vai acontecer a maioria do trabalho no JSF 2.2 relacionado ao HTML5. Por exemplo, componentes do HTML5 para formulários, como slider e calendário são nativos; antes eram implementados no servidor, que devolvia imagens e código JavaScript.

InfoQ: Foi implementada alguma melhoria no suporte a REST? E em Ajax?

Nada novo em REST. A última melhoria implementada nessa área foi no JSF 2.0: a possilidade de guardar URLs (bookmarkable) para um determinado recurso JSF e acioná-lo via GET. Já o suporte e a padronização no uso Ajax foi uma das principais funcionalidades do JSF 2.0; faremos pequenos ajustes na versão 2.2.

InfoQ: Quais grandes sites, com quantidade expressiva de tráfego web, utilizam o JSF?

Em 2006 comecei a registrar os sites que utilizam JSF em uma página no wiki do projeto, mas essa página foi removida. Atualmente mantenho uma lista em RealWorld JSF Links. Lá você pode encontrar empresas importantes e conhecidas que utilizam JSF. Uma curiosidade é o mapa demonstrando o uso do JSF em todos os continentes.

InfoQ: Existe alguma otimização no processamento do estado dos componentes JSF para reduzir o uso de sessões HTTP? Houve alguma mudança nisso desde a versão 2.0?

No JSF 2.0 realizamos grandes melhorias nesse sentido, ao introduzir a possibilidade de salvar e recuperar o estado parcial. O JSF 2.0 inclui o Facelets, que permite transformar rapidamente uma página HTML em uma árvore de instâncias UIComponent, e só precisamos salvar e recuperar as mudanças que ocorrem em cada requisição. Na versão 2.1 fizemos pequenos ajustes nessa funcionalidade, para componentes complexos como os data tables. Não existe nada planejado nessa área para a versão 2.2, no entanto.

InfoQ: O JSF é criticado injustamente? Será que, apesar da grande evolução do framework, as melhorias não foram devidamente reconhecidas?

O JSF é uma tecnologia madura e utilizada intensivamente em aplicações críticas, em empresas de diversas áreas em todo mundo. Muita coisa foi escrita comparando JSF com outras tecnologias similares, e uma lição que se pode tirar desse tipo de discussão, é que não existe um framework web perfeito. Todos os frameworks fazem abstrações e precisam fazer certas concessões para manter a integridade dessas abstrações. Acho que os melhores frameworks são os que atingem um equilíbrio entre produtividade e facilidade de manutenção.

Dito isso, acredito que o JSF melhorou drasticamente desde de o lançamento da versão 1.0 e as melhorias foram sim reconhecidas. Veja, por exemplo, o relatório anual do ZeroTurnaround que aponta o JSF como framework web Java mais popular de 2011.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT