Saturday, August 29, 2009

JSF e Portlets no JBoss Portal

Dias atrás estive envolvido em um "projeto case", com o propósito de experimentar a arquitetura de Portais e Portlets. O software portal escolhido foi o JBoss Portal versão 2.7, que além do Portlet Container possui elementos bem interessantes, como o modulo de CMS e Portlet Bridge.

É possível instalar o JBoss Portal em JBoss AS existente. Fiz isso na versão 4.2, a única configuração necessária no meu caso foi o datasource do portal, mas isso pode ser mais complexo dependendo de como esta configuração de bibliotecas do servidor! A documentação é boa, existem vários exemplos de portlet e o próprio fonte do portal - implementado sob JSF e Hibernate - de fácil customização.

Um recurso que me chamou a atenção foi o JBoss Portlet Bridge, que permitir criar portlets utilizando JavaServer Faces (v 1.2) + Seam + RichFaces, com suporte Facelets. Com isso é possível criar um aplicação composta por portlets com todos os benefícios do JSF, sem se preocupar com a API e curva de aprendizado de Portlet, PortletContainer e Portais.

Montei um aplicativo relativamente simples, utilizando Facelets + RichFaces c/ JBoss Bridge, gerenciado pelo JBoss Portal dentro do JBoss AS 4.2. Nessa estrutura a programação é a mesma de um aplicativo MVC comum, ou seja, criação de telas com Facelets usando as tags JSF e RichFaces, o Managed Bean resolvendo a integração do View com Model. Na camada model utilizei Pojos com Hibernate. O único portlet utilizado na aplicação foi o javax.portlet.faces.GenericFacesPortlet, e no JSF o ViewHandler org.jboss.portletbridge.application.PortletViewHandler.

Encontrei pequenos problemas nessa integração, principalmente com alguns componentes do RichFaces, mas todos foram revertidos. Acredito que mistura tenha funcionado justamente por todos os componentes serem JBoss.

Java EE define 2 especificações para portlet: JSR 168, JSR 286. O JBoss Portlet Bridge é um draft para outras 2 especificações a JSR 301 e a JSR 329 que visam padronizar a integração entre Portlet e JSF.