Duas JSRs, 168 e 286, atendem a criacao de portlets. Em outubro de 2003 o JCP lancou a JSR-168, a primeira especificacao que padroniza como os componentes devem ser desenvolvidos para os servidores de portal. Como as outras grandes JSRs, a JSR-168 possui o aval dos maiores fornecedores de portais. Esta especificacao atende aos seguintes quesitos:O contrato de conteiner de portlet e o gerenciamento do ciclo de vida do portlet; A definicao dos estados das janelas e os modos do portlet; Gerenciamento das preferencias do Portlet; Informacoes do Usuario como nome, endereco, e-mail, que podem ser informadas no arquivo de deployment descriptor e que podem ser recuperadas por um objeto Map atraves da constante USER_INFO definida na interface PortletRequest; Empacotamento e Deployment; Seguranca; Tags para JSF. Mas, quando grandes fornecedores como a Apache, BEA, Borland, Oracle, IBM, SAP entre outros que fazem parte do expert group da JSR-168 comecaram a criar as suas solucoes de Portal, comecaram a surgir tambem alguns problemas relacionados a limitacao da especificacao que antes nao haviam sido detectados.Conforme a adocao por solucoes de portal baseadas na JSR 168 comecou a aumentar, naturalmente o publico consumidor destas solucoes e o proprio negocio passou a demandar cada vez mais funcionalidades, que nao haviam sido contempladas, fazendo com que solucoes proprietarias fossem criadas pelos fornecedores. Entre as limitacoes da primeira versao da especificacao de Portlets (JSR-168), podemos citar:Falta de filtros para portlets (similar aos Filtros nos Servlets); Ausencia de funcionalidades para a intercomunicacao entre os portlets; Limitacao do Escopo de Sessao do Portlet, onde a sessao do Portlet na JSR 168 se restringe apenas ao ID individual da aplicacao e nao da sessao do usuario do Portal. Essas limitacoes culminaram no lancamento da JSR 286, que define a segunda versao da API de Portlets. A JSR 286 incluiu novas funcionalidades como tratamento de eventos, envio e recebimento de parametros (permitindo a passagem de parametros entre os portlets), inclusao de filtros, suporte a Ajax e a disponibilidade de recursos do servidor, com o uso da interface ResourceServingPortlet.Contrato do Conteiner e Gerenciamento do ciclo de vida do PortletA especificacao da JSR-286 define um contrato para o conteiner de portlets. O contrato define quais metodos o conteiner deve chamar durante o ciclo de vida do portlet mediante o uso da interface javax.portlet.Portlet. O desenvolvedor pode implementar estes metodos para fornecer a funcionalidade desejada. Dessa forma, todo portlet tem que implementar esta interface, seja implementando-o diretamente ou estendendo uma classe existente que a implemente.Os metodos do ciclo de vida executados pelo conteiner definidos pela interface javax.portlet.Portlet sao apresentados na Tabela 1. Metodo Descricao init() Metodo executado quando o portlet for instanciado no conteiner. processAction() Chamado apos o usuario submeter requisicoes ao portlet. E onde processamos os inputs disparados por uma acao do usuario do portlet. render() Chamado sempre que o portlet e reconstruido na tela. destroy() Executado no momento em que o conteiner destroi o portlet. Util para liberarmos recursos que nao estejam sendo utilizados, por exemplo, conexoes com banco de dados. Tabela 1. Metodos do ciclo de vida de um portletA especificacao da