Criando portlets em ambiente Open Source
Conheça a especificação e aprenda como criar, empacotar e instalar portlets no ambiente referência da especificação
Gustavo Concon e Alex Barbosa Coqueiro
Quando falamos em portal, logo vêm à cabeça grandes sites com inúmeros conteúdos de diferentes assuntos, como por exemplo, terra.com.br ou uol.com.br. Imagine o quão complexo seria o desenvolvimento e manutenção desses portais se não houvesse uma arquitetura componentizada e baseada em serviços. A especificação Java respondeu a essa necessidade com APIs para o desenvolvimento de portais, e a partir disso os fornecedores de software trabalharam no desenvolvimento de servidores que suportam toda a infra-estrutura necessária.
O principal objetivo de um portal é agregar conteúdos de diferentes fontes em uma única página da web, permitindo que o usuário tenha acesso completo a tudo que o site tem a oferecer.
Para agregar esses conteúdos, a tecnologia permite o particionamento da página em elementos conhecidos como Portlets. Um Portlet é um componente plugável que pode ser colocado em uma ou várias páginas de um portal. Neste artigo, vamos entender o que são os portlets, como e quando usá-los.
Alguns artigos já abordaram portlets em edições anteriores da revista, por isso vamos apenas rever alguns conceitos e partir para implementação e deploy de portlets no Pluto Container. Para nosso exemplo, usaremos o Eclipse e o framework Apache Pluto, um portlet container que implementa a especificação JSR 168 (que também examinaremos). Utilizaremos também o Maven 2, um utilitário utilizado para criação, assembly e deploy de projetos.
No atual estágio de maturidade dessa tecnologia, há ferramentas comerciais que desenvolvem portlets em um formato totalmente visual, como o WebSphere Portlet Factory, ganhando com isso produtividade, mas este tipo de estudo está fora do escopo deste artigo.
O que são portlets, afinal?
Primeiro devemos ter o conceito de três componentes principais da arquitetura:
· Os portais, que são aplicações que agregam aplicações portlets em uma única página de apresentação;
· O portlet container, que é um mediador entre as aplicações portlets e o portal, provendo todo o ambiente para a execução dos portlets e controlando seu ciclo de vida;
· E os portlets, que são aplicações de interface gráfica simples, geralmente pequenas, disponibilizadas em páginas de Portais. Ou seja, um portlet é uma entre várias outras aplicações que fornecem ao usuário um conteúdo, que em conjunto a outros portlets formam uma página de portal, como a Figura 1.
Figura 1. Portlets em uma página de portal
Para compreender melhor a relação entre esses três componentes, vamos ver como é o fluxo de requisição de uma página de portal (Figura 2).
Quando é feita a requisição de uma página, o servidor de portal a encaminha para o portlet container, que tem a lista de portlets que formam esta página. Em seguida, cada portlet processa a requisição e gera a resposta na forma de markup[1], devolvendo-a ao container que encaminha o conteúdo gerado ao portal para exibição ao cliente, como ilustrado na Figura 2.
Figura 2. Fluxo da requisição de uma página de portal
É importante frisar que os portlets não são como os servlets, apesar de terem algumas semelhanças, como pode ser visto na Tabela 1.
Semelhanças |
Ambos são baseados na tecnologia Java. |
Seu ciclo de vida é gerenciado por um container específico. | |
Geram conteúdos dinâmicos. | |
Interagem com o cliente utilizando o paradigma Request/Response. | |
Diferenças |
Portlets geram apenas fragmentos de markup, pois o Portal agrupa os fragmentos dos portlets em uma página completa. |
Portlets não são diretamente acionados via URL. | |
Os clientes interagem com os portlets através do Portal. | |
Portlets possuem alguns modos e estados de janela (veremos adiante). | |
Portlets podem existir várias vezes em uma página de Portal. |
Tabela 1. Semelhanças e diferenças entre portlets e servlets
Quanto à padronização
Em 2003, membros do Java Community Process resolveram estabelecer um padrão para o desenvolvimento de portlets, e criaram uma especificação, a JSR 168. Esta estabelecia uma série de conceitos e padronizações tanto no próprio desenvolvimento dos portlets, quanto na arquitetura envolvida (segurança, caching, interface gráfica e etc).
O tempo passou e a tecnologia amadureceu muito com os inúmeros produtos no mercado, levando então à necessidade de uma atualização: a JSR 286 (Portlet 2.0). Na data de escrita desse artigo, esta JSR já teve seu release final aprovado; quando você estiver lendo este artigo a especificação já deve estar disponível, bem como sua implementação pelo Pluto 2.0. A proposta inclui muitas correções da primeira versão e outros componentes como filtros, melhoramentos em caching, gerenciamento, implementação de portlets remotos, etc.
O ciclo de vida dos Portlets
A especificação define um ciclo de vida a ser gerenciado pelo portlet container, contendo as seguintes fases:
1. Instanciação: É onde o portlet container instancia a classe que representa o portlet, definida pela implementação da interface javax.portlet.Portlet;
2. Inicialização: Onde o container inicializará os recursos que podem ser utilizados pelo portlet. Geralmente são recursos como conexões ou abertura de arquivos, portanto é uma operação custosa, efetuada apenas uma vez durante todo seu ciclo de vida. Após essa fase, o portlet está pronto para atender os ...