Portlets

Introdução
Assim como existe um conceito universal de MOM's (Message-oriented Middleware) que foi utilizado como base para o desenvolvimento da Java Messaging System (JMS) (JSR 914), existe também um protocolo padronizado chamado Web Services for Remote Portlets, e que resultou no desenvolvimento das especificações (JSR 168 e JSR 286);
 * Componentes ou fragmentos plugáveis em portais web;
 * Têm como função tornar uma página visível como se fosse através de janelas ou containers como nas aplicações desktop (Desktop metaphor);
 * Portlets são "plug-and-play";

Exemplos
O iGoogle é um exemplo típico de portal contendo fragmentos. Se o mesmo fosse desenvolvido em Java seguindo o conceito de Portlets descrito aqui, cada uma das janelas internas da página (e-mail, previsão do tempo, etc) seria um portlet.

Sobre as JSR 168 e JSR 286
Entre os muitos pontos que as JSRs 168 e 286 definem, é possível destacar:
 * Interoperabilidade de portlets entre portais heterogêneos;
 * Uma série de API's que fornecem a comunicação entre o container de um portlet e sua personalização, apresentação e segurança;

Ciclo de vida de um portlet
No documento da JSR 286 em PLT.5.2 Portlet Life Cycle (página 37), o ciclo de vida de um portlet é definido basicamente pelos métodos init, render, processAction e destroy.
 * init: método utilizado pelo container de portlets para inicializar os parâmetros de um determinado portlet;
 * render: quando algum cliente realizar uma requisição (por uma URL, por exemplo) a um portlet, o container de portlets chama processAction que realizará as ações pertinentes ao portlet e, depois que a ação termina, é chamado processEvent que invoca render para cuidar da renderização dos componentes visuais contidos no portlet;
 * processAction: método chamado quando há uma requisição ao portlet;
 * destroy: método chamado quando o portlet não estiver mais sendo usado para permitir que todos os recursos do mesmo sejam liberados ou qualquer estado ativo seja persistido;

GenericPortlet
Quando se deseja implementar uma página que será utilizada como portlet é necessário extender uma classe abstrata chamada GenericPortlet.

Saber o que cada método passível de extensão ou até mesmo o que cada um faz por padrão é recomendável, já que as questões de concurso referentes a portlets geralmente citam nomes de métodos e suas funções principais.

Aplicação e uso
Um exemplo de fornecedor que atende às espeficificações de Portlets é o Apache Pluto.

Questões de concurso
É frequente encontrar questões em concursos envolvendo desde os conceitos básicos de um portlet até mesmo normas presentes em sua JSR e questões de implementação de portlets, como no exemplo abaixo:

(FCC - 2011 - TRT - 23ª REGIÃO (MT) - Técnico Judiciário - Tecnologia da Informação) No ciclo de vida do portlet, o método que permite liberar recursos e atualizar os dados persistentes que pertencem a este portlet é: Como visto anteriormente no ciclo de vida de um portlet, a opção correta é a letra c). Ainda, é necessário entender a classe GenericPortlet, citada acima em virtude de questões como esta logo abaixo:
 * a) GenericPortlet;
 * b) ProcessAction;
 * c) render;
 * d) destroy;
 * e) init;

(CESPE - 2008 - TCU - Analista de Controle Interno – Tecnologia da Informação - Prova 2) Considere que, durante o desenho e a implementação de um conjunto de portlets Java, visando-se à implementação de módulos do CMS, tenha sido assumido que o ciclo de vida desses componentes é composto pelas cinco fases seguintes: carga, instanciação, inicialização, tratamento de pedidos e fim de serviço. Nessa situação, para se atingir a conformidade com as especificações de portlets Java na versão 1.0, para cada uma dessas fases, é obrigatória a implementação de um método correspondente, definido na interface implementada pela classe de cada portlet.

Certo ou e rrado?

Errado! A classe GenericPortlet não obriga a extensão de nenhum método, mesmo sendo do tipo abstrata. Cabe ao desenvolvedor implementar seus métodos quando houver necessidade. Sendo assim, estude a documentação linkada em GenericPortlet. Ela é pequena e 10 minutos são necessários para se ter uma idéia sobre como desenvolver portlets utilizando a especificação de portlets em Java.

Referências

 * http://en.wikipedia.org/wiki/Portlet
 * http://portals.apache.org/pluto/v11/getting-started.html
 * http://en.wikipedia.org/wiki/Web_Services_for_Remote_Portlets
 * http://en.wikipedia.org/wiki/Desktop_metaphor
 * http://en.wikipedia.org/wiki/Web_portal
 * http://download.oracle.com/otndocs/jcp/portlet-2.0-fr-oth-JSpec/
 * http://www.questoesdeconcursos.com.br/pesquisar?te=portlet
 * http://www.bluesunrise.com/portlet-api/javax/portlet/GenericPortlet.html