Escrevendo
Escrevendo
meu primeiro
meu primeiro
porlet
porlet
Gustavo Lira
Consultor – 4Linux
Para quem tiver interesse a 4Linux está lançando os seguintes cursos:
●Desenvolvendo Portlets Java EE
●Desenvolvimento de Portais Dinâmicos com eXo WCM
Quem tiver interesse basta mandar um e-mail para
contato@4linux.com.br ou procurar a Fernanda no chat por PVT
Especificação para os Portlets
Os padrões para Portlets Java EE são definidos por duas JSRs: 168, que define a API de Portlets versão 1.0, e 286, que define a API de Portlets 2.0
JSR 168 - http://jcp.org/ja/jsr/detail?id=168
O que São Portlets
● Portlets são aplicações ou componentes exibidos como
parte de um portal web.
● Geram apenas fragmentos de páginas HTML ● Cuidado com eventos Javascript e tags como
<body> e <meta>
● O software do portal é quem gera a página completa e
cuida de toda a interação com o (navegador web do) usuário
● Fornece a interface para associar portlets a páginas ● Em geral usa o conceito de “janelas” dentro da
Restrições ao HTML de um Portlet
● Um portlet não é dono da sua página!
● Isto é, ele deve conter uma marcação completa, fechando todos os tags abertos por ele mesmo
● Não pode gerar diretamente cabeçalhos HTTP, como autorização e redirect
● Gera apenas um fragmento HTML, onde vários tags são “proibidos”
● Deve tomar cuidado seu seus estilos CSS e código Javascript não interfira com a página do portal ou com outros portlets
Benefício dos Portlets
● Possibilidade de incorporar ao portal portlets prontos,
desenvolvidos por terceiros
● Aplicações desenvolvidas in-house para um portal
podem ser migradas facilmente para o Software de Portal de outro fornecedor
● Portlets usufruem de toda a estrutura padrão do Java
Portlets x Componentes
● Portlets são componentes de um portal, não de uma
aplicação!
● Portlets encapsulam aplicações, ou pelo menos partes
delas (subsistemas) que sejam independentes das demais
● Então portlets são bem diferentes de componentes de
O que é um portal?
● É um agregador de informações, ou seja agrega informações
provenientes de várias origens e aplicações.
● Ponto único de acesso para várias aplicações
● Baseado na composição de múltiplos portlets como parte de uma
mesma página
● Definido por JSRs do JCP (168 e 286)
● A especificação não define como é o funcionamento e
configuração do software de portal em si
Portal x Portlets
Aplicação de Colaboração Gerenciador de Documentos ou Conteúdo Pacote Comprado Sistema de Informações (Transações) Portal Java EEPortlet Portlet Portlet Portlet Página HTML
Portal x Portlets
Página do Portal Página do Portal Navegação do portal Portlet maximizado Portlet maximizado _ x Porltet minimizado Página 1 Página 2 Página 3 Página 4Porltet minimizado
Porltet normal
Software de Portal x
Container de Portlets
Servidor de Aplicações Java EE
Servidor de Aplicações Java EE
Container de Servlets Container de Portlets Container de Portlets Portlet 1 Portlet 2 Container EJB EJB 1 EJB 2 Software de Portal Software de Portal JTA EJB JMS JAAS etc
Portlet MVC
public class HojePortlet extends GenericPortlet {
// a assinatura do método deve ser exatamente esta!
public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
// formata a data de hoje
DateFormat df = DateFormat.getDateInstance(); String hoje = df.format(new Date());
df = DateFormat.getTimeInstance(); String agora = df.format(new Date());
// gera o fragmento de página
request.setAttribute("hoje", hoje); request.setAttribute("agora", agora);
Descritor de Deployment de Portlets
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portl et-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="1.0"> <portlet> <portlet-name>HojePortletMVC</portlet-name> <portlet-class>exemplo.HojePortlet</portlet-class> <!-- continua... -->Descritor de Deployment de Portlets
<!-- ...continuação --> <expiration-cache>60</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>VIEW</portlet-mode> </supports> <supported-locale>pt_BR</supported-locale> </portlet> </portlet-app>JSP de Visão
<%@ page pageEncoding="UTF-8" %> <h1>Data de Hoje MVC</h1>
<p>
Hoje é dia ${hoje}, <p>