SlideShare uma empresa Scribd logo
1 de 75
Baixar para ler offline
Construindo Portlets para IBM
WebSphere Portal – Parte 1
Rodrigo Reis
IT Specialist & Application Architect
IBM Collaboration Solutions

© 2013 IBM Corporation
Agenda
Introdução
Parte 1: Portal & Portlets
Parte 2: Construindo Portlets para IBM WebSphere Portal
Parte 3: Especificação JSR 286
Parte 4: Ambiente de Desenvolvimento

2

© 2013 IBM Corporation
Introdução
●

●

●

3

Este workshop não é de introdução a Java ou IBM WebSphere
Portal
Necessário conhecimento básico de Programação Java para
Web (JSP, HTML, XML, JavaScript, Frameworks)
O objetivo do workshop é introduzir ao desenvolvimento de
portlets

© 2013 IBM Corporation
Parte 1: Portal & Portlets

1878A
4

© 2013 IBM Corporation
Definições
O que é um Portlet?
"Um portlet é um aplicativo que fornece um conteúdo
especifico (informação ou serviço) para ser incluido como parte
de uma página de Portal."
O que é Portal?
"Um portal é um container que executa portlets e os
disponibiliza com o ambiente de execução requerido."

5

© 2013 IBM Corporation
Definições - Portal
Para entender o que é um portlet, primeiro é necessário entender o
que é um portal:
Portal é uma aplicação web que oferece personalização e
agregação de conteúdos de diferentes fontes, aglomerando e
distribuindo estas informações de forma direcionada a um publico
alvo
Um portal possui 3 funcionalidades básicas:
●

●

Agregador de Conteúdo

●

6

Portlet Container
Serviços Comuns

© 2013 IBM Corporation
Definições
Portlet Container: o portlet container é responsável por controlar o
ciclo de vida de um portlet
Agregador de Conteúdo: uma das principais tarefas de um portal é
agregar conteúdo gerado por aplicações de diversos portlet
Serviços Comuns: Um dos principais pontos fortes de um servidor
de portal é o conjunto de serviços comuns que ela proporciona.
Alguns serviços comuns que você pode encontrar na maioria das
implementações de portais são:
●

●

7

Logon único: Permite ter acesso a todas as outras aplicações
uma vez que você entrar no servidor do portal
Personalização: Permitir ao usuário personalizar sua página,
alterando cores, layout e decidindo quais portlets incluir na página
© 2013 IBM Corporation
Definições
●

●

●

8

No passado, com o surgimento de um número crescente de
portais corporativos, vários fabricantes criaram diferentes APIs
para componentes do portal
Esta variedade de interfaces incompatíveis geraram problemas
para os fornecedores de aplicações
Para solucionar estes problemas, foi criada a JSR (Java
Specification Request) 168, uma especificação de Portlets, que
nasceu para oferecer interoperabilidade entre portlets e portais

© 2013 IBM Corporation
Definições
O propósito da JSR 168 era:
●

Definir o ambiente de execução, ou portlet container, para portlets

●

Definir a API entre o portlet container e portlets

●

●

Fornecer mecanismos para armazenar dados temporários e
persistentes para portlets
Fornecer um mecanismo que permite incluir servlets e JSP
(JavaServer Pages) nos portlets

●

Definir um pacote de portlets para permitir uma implantação fácil

●

Permitir a portabilidade entre os portlets do portal

●

9

Executar portlets JSR 168 como portlets remotos usando o Web
Services for Remote Portlets (WSRP) protocolo
© 2013 IBM Corporation
Definições
●

Java Portlet 1.0 Specification (JSR 168)
Liberada em: 27 de Outubro de 2003

●

Java Portlet 2.0 Specification (JSR 286)
Liberada em: 03 de Março de 2008

●

Java Portlet Specification 3.0 (JSR 362)
Em desenvolvimento
Lider: Martin Scott Nicklous, IBM

10

© 2013 IBM Corporation
Checkpoint
NÃO é um dos propósitos da especificação JSR168:
A – Definir um pacote de portlets para permitir uma
implantação fácil
B – Permitir a portabilidade entre os portlets do portal
C – Definir o modelo de segurança do portlet container
D – Definir a API entre o portlet container e portlets
E – Definir o ambiente de execução, ou portlet
container, para portlets

11

© 2013 IBM Corporation
Parte 2: Contruindo Portlets para IBM
WebSphere Portal

1878A
12

© 2013 IBM Corporation
Arquitetura do WebSphere Portal
A arquitetura do ambiente de execução do WebSphere Portal
possui as seguintes caracteristicas:
●

●

●

É executado dentro de
um web container do
WebSphere Application
Server chamado de
WebSphere_Portal
Possui seu próprio
componente de
transporte HTTP
Possui 6 banco de dados
de apoio que por padrão
é instalado em Derby

13

© 2013 IBM Corporation
Arquitetura do WebSphere Portal
Banco de dados do WebSphere Portal:
●

●

●

●

●

●

14

Release – Armazena configurações do WebSphere Portal
Customization – Contém dados associados com cada usuário do
portal, como por exemplo, preferências de portlet
Community – Contém recursos que são modifcados em
produção
JCR – Armazena todo conteúdo do Web Content Management e
Personalization
Feedback – Armazena logs de utilização do site
LikeMinds – Contém classificassões e dados sugestão para
personalização
© 2013 IBM Corporation
Arquitetura do WebSphere Portal
Principais serviços do WebSphere Portal:
●

●

●

●

●

15

Model SPI – Fornece acesso leitura para todos WebSphere Portal
Data Model
PUMA – Gerência associação e atributos de usuários
Credential Vault – Prover acesso seguro as credencias de
usuário
Tagging e Ratting – Novidade no Portal 8, fornece serviços de
classificação e marcação de conteúdos
Personalization – Disponibiliza mecanismos para personalização
de conteúdos para usuários

© 2013 IBM Corporation
Visão Geral
Web Experience Suite

Browser / Systems

Out of the box features
Theme / Portlets

Custom Portlets

Client Engine
Markup (HTML)

Custom Development

REST SPI

(Client Side)

Model SPI
WebDAV SPI

Third Party

IBM products

Data (ATOM,binary…)

Custom Development
(Server Side – Theme, Extensions)

16

© 2013 IBM Corporation
Portlets e Servlets
●

Portlets e Servlets são parecidos em alguns aspectos, mas sem
nenhuma conexão direta

●

Portlets são executados em um Portlet Container

●

Portlet Container é uma extensão de um Servlet Container

●

Portlet Application é uma extensão de uma Web Application
web.xml + portlet.xml são os Deployment Descriptors

●

Podemos ter Portlets e Servlets dentro da mesma aplicação web

17

© 2013 IBM Corporation
Portlet Modes
●

O Portal monitora o modo do portlet

●

Um portlet pode conter 3 modos padrões:
●

●

Edit – Usuário personaliza o portlet

●

●

View – Modo de exibição padrão
Help – Exibe janela de ajuda

Portais podem conter modos adicionais (muitos são sugeridos na
especificação), o WebSphere Portal contem:
●

●

18

Edit Shared Settings – Configurações comuns a todos
usuários
Configure – Configurações administrativas
© 2013 IBM Corporation
Portlet Modes
●

Portlets podem modificar seu próprio modo de operação

●

O acesso a cada modo depente das permissões do usuário
●

●

Por exemplo, um usuário do tipo Privileged User tem acesso ao
modo Edit mas não ao Edit Shared Settings

O desenvolvedor deve implementar os Portlet Modes. As
configurações ficam armazenadas no arquivo portlet.xml
<supports>
<mime­type>text/html</mime­type>
<portlet­mode>view</portlet­mode>
<portlet­mode>edit</portlet­mode>
<portlet­mode>help</portlet­mode>
</supports>

19

© 2013 IBM Corporation
Portlet States
●

Diferente de aplicações web tradicionais, portlets utilizam apenas
uma fração da página

●

O estado da janela de cada portlet é controlado individualmente

●

Os seguintes estados de janela estão disponiveis:
●

●

Maximize – exibe apenas o portlet na janela

●

20

Minimize – exibe apenas o titulo da janela
Restore – exibe o portlet no modo padrão

© 2013 IBM Corporation
Checkpoint
Quais são os Portlets Modes suportados pelo WebSphere
Portal?
A – View, Edit, Configure
B – View, Edit, Help, Configure
C – View, Edit, Help, Personalize
D – View, Edit, Help, Configure, Edit Shared Settings

21

© 2013 IBM Corporation
Checkpoint
Qual das alternativas a seguir é FALSA?
A – Portlets podem modificar seu próprio modo de operação
B – O desenvolvedor deve informar os modos de operação
do portlet dentro do arquivo web.xml
C – O desenvolvedor pode implementar novos Portlet States
D – O desenvolvedor pode implementar novos
Portlet Modes

22

© 2013 IBM Corporation
public class HelloWorld extends GenericPortlet {

Criando um Portlet

public void init (PortletConfig portletConfig) throws UnavailableException,
PortletException
{
super.init(portletConfig);
}

Desenvolvendo
●

public void doView(RenderRequest request, RenderResponse response) throws
PortletException, IOException

Parte 1: Código do Portlet

{

response.setContentType("text/html");
response.getWriter().println("Hello Portal World!</p>");
}
}
<?xml version="1.0" encoding="UTF-8"?>

+

<portlet-app ...>
<portlet>
<portlet-name>HelloWorld portlet name</portlet-name>
<display-name>Hello World portlet (JSR)</display-name>
●

<display-name xml:lang="en">Hello World portlet (JSR)</display-name>

Part 2: Portlet descriptor

<portlet-class>HelloWorld</portlet-class>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>view</portlet-mode>
</supports>
<supported-locale>en</supported-locale>
</portlet>
</portlet-app>

Empacotando & Publicando

23

WAR

© 2013 IBM Corporation
Criando um Portlet
●

Estrutura de um Portlet (arquivo WAR)
●

●

Arquivos de classe Java

●

Arquivos JSP

●

O deployment descriptor, portlet.xml

●

Arquivos JAR contendo qualquer biblioteca usada pelo porltet

●

●

Arquivos WAR contém os seguintes artefatos:

Arquivos Web (HTML, XML, XHTML, JavaScript, CSS, …)

Um aplicativo de portlet pode conter um ou mais portlets

24

© 2013 IBM Corporation
Laboratório 1: Criando o primeito Portlet
●

Criar um projeto de Portlet

●

Implementar a lógica de negócios

●

Fazer Deploy do portlet

25

© 2013 IBM Corporation
Parte 3: Especificação JSR 286

1878A
26

© 2013 IBM Corporation
Introdução ao JSR 286
●

●

●

O IBM WebSphere Portal inclui um ambiente de execução que
suporta Portlets desenvolvidos seguindo as especificações JSR
168 e JSR 286
A API JSR 168 define a maior parte dos objetos, sendo a base do
JSR 286, que resolve limitações da especificação anterior
Principais recursos da JSR 286:
●

●

Portlet events
Portlet filters que permitem adicionar mais lógica de negócio
antes de processar as fases do ciclo de vida do portlet, como:
render(), processAction(), processEvent(), serveResource()

●

●

27

Public Render parameters
Resource Serving portlets
© 2013 IBM Corporation
Portlet

Diagrama do Java Portlet Specification, Version 2.0
28

© 2013 IBM Corporation
Ciclo de vida de um portlet
Portal Iniciado
Portlet init()
Usuário solicita página

ProcessAction(), render()
[doView(), doEdit(), ...]

Portal
Retorno da página

Portal Terminado

29

Portlet
Portlet marckup

Portlet destroy()

© 2013 IBM Corporation
Interface Portlet
Cada portlet deve implementar a interface de portlet, ou estender de
uma classe que implementa essa interface. A interface de portlet é
composta dos seguintes métodos:
●

●

init(PortletConfig config) - para inicializar o portlet.
- Este método é chamado apenas uma vez após instancia-lo.
- Pode ser usado para criar objetos / recursos utilizados por ele.
ProcessAction(ActionRequest request, ActionResponse response) para notificar o portlet que o usuário executou uma ação sobre este
portlet.
- Apenas uma ação por solicitação do cliente é disparada.
- Em uma ação, um portlet pode emitir um redirecionamento,
alterar seu modo de portlet ou estado da janela, alterar o seu
estado persistente, ou os parâmetros de render.

30

© 2013 IBM Corporation
Interface Portlet
●

●

render(RenderRequest request, RenderResponse response) para gerar a marcação. Para cada portlet na página atual, o
método de renderização é chamado, e o portlet pode produzir
marcação que pode depender do modo de portlet ou estado da
janela, os parâmetros de renderização, atributos pedido, estado
persistente, os dados da sessão, ou dados de back-end.
destroy() - para indicar o fim do ciclo de vida do portlet. Este
método permite liberar recursos e atualizar os dados persistentes
que pertencem a este portlet.

31

© 2013 IBM Corporation
Relacionamento entre classes JSR286

32

© 2013 IBM Corporation
Classe PortletConfig
●

A classe PortletConfig funciona de maneira similar a classe
ServletConfig que utiliza os seguintes metódos comuns para
conceder acesso a configuração do portlet:
- getInitParameter()
- getPortletName()
- getResourceBundle()
- getSupportedLocales()

●

Exemplo de uso PortletConfig que carrega o ResourceBundle para
a localidade atual do usuário:
ResourceBundle portletBundle = null;
portletBundle = 
getPortletConfig().getResourceBundle(request.getLocale());

33

© 2013 IBM Corporation
Classe PortletContext
●

●

●

A classe PortletContext também funciona de maneira similar a
classe ServletContext e fornece acesso a informações do portlet
container
Existe um contexto por aplicativo de portlet e instância do servidor
de portal
Atributos armazenados no contexto são globais para todos
usuários e componentes do aplicativo de portlet
setAttribute() e getAttribute()

●

Exemplo usando getRequestDispatcher() para iniciar um JSP
PortletRequestDispatcher rd =
getPortletContext().getRequestDispatcher("/jsp/UserForm.jsp");
rd.include(request, response);

34

© 2013 IBM Corporation
Classe PortletRequest
A classe PortletRequest usa as seguintes subinterfaces
●

●

●

●

ActionRequest – passada dentro do método processAction()
RenderRequest – passada dentro dos métodos doView() e
doEdit()
EventRequest – passada dentro do método processEvent() para
portlets que utilizam eventos
ResourceRequest – passada dentro do método serveResource()
para portelts que fornecem recursos

35

© 2013 IBM Corporation
Classe PortletRequest
Dicas sobre a utilização da classe ActionRequest:
●

Por padrão atributos na ActionRequest não são repassados para
para RenderRequest
●

Quando a opção ActionScopedRequestAttributes está
definida como true, atributos em ActionRequest são
repassados para RenderRequest
<container­runtime­option>
<name>javax.portlet.actionScopedRequestAttributes</name>
<value>true</value>
</container­runtime­option>

●

Coloque atributos que necessitam estar disponiveis em mais que
um simples request na Session

36

© 2013 IBM Corporation
Classe PortletResponse
●

Cada fase do cliclo de vida de um portlet possui uma implementação
da classe PortletResponse
ActionReponse, RenderResponse, EventResponse, Resource
Response

●

Métodos da classe ActionResponse
- setPortletMode() - para adicionar parametros no RenderRequest
- setPortletMode() - para alterar o modo de operação do portlet
- setWindowState() - para mudar o estado da janela

●

Métodos da classe RenderResponse
- setNamespace() - para retornar o namespace do portlet
- createActionUrl() e createRenderUrl() - para criar urls para o
portlet

37

© 2013 IBM Corporation
Classe PortletSession
●

●

A classe PortletSession fornece acesso rápido a objetos em nome
do usuário
Caracteristicas
- Dados da sessão são especificos para cada usuário. Objetos
em uma sessão estão disponiveis durante o ciclo de vida da
sessão, tanto para um usuário e portlet especifico qaunto para
um usuário e todos portlets dentro do aplicativo de portlet
- Objetos são removidos quando o objeto não é mais necessário
- Sessões são invalidas manualmente ou após certo tempo de
inatividade

38

© 2013 IBM Corporation
Classe PortletSession
A classe PortletSession define dois escopos para armazenamento
de objetos:
●

●

39

AAPLICATION_SCOPE – Objetos armazenados estão
disponiveis para todos portlets, servlets e jsp que pertencem ao
mesmo aplicativo de portlet
PORTLET_SCOPE – Objetos estão disponiveis para o portlet
durante requests na mesma janela de portlet

© 2013 IBM Corporation
Classe PortletSession
Usando portlet sessions de forma eficiente:
●

Armazene objetos na session quando:
- O objeto precisa estar disponivel para um request
subsequente
- O objeto é compartilhado com multiplos portlets dentro da
mesma aplicação

●

●

40

Remova objetos quando não são mais necessários
Certifique-se de que todos objetos armazenados na session são
serializable.

© 2013 IBM Corporation
Object Scoping
A expectativa de vida do objeto ou escopos
Request scope - tem vida durante requisição atual
● Session scope - abrange os pedidos para o usuário conectado
● Application scope - aplica-se quando o aplicativo é carregado
Dicas para lidar com objetos
● Coloque objetos no escopo apropriado para a aplicação
● Remova os objetos do escopo quando eles não são mais
necessários
● Limitar o tamanho do objeto quando se trabalhar em sessão
● Objeto de sessão em um portal de cluster pode ser mantido em
um banco de dados
● Se um objeto não é específico do usuário, armazenar no
portletContext
●

41

© 2013 IBM Corporation
Object Scoping
Lazy Instantition
●

●

É uma tecnica para criação de objetos
É vantajosa quando o uso do processador para recuperar os
dados é maior que aquele associado com a manutenção dos
objetos dentro de uma referência escopo local

Passos para implementa o Lazy Instantition:
●

Passo 1 - Crie o objeto no primeiro pedido

●

Passo 2 - Realizar acesso ao banco

●

Passo 3 – Faça Cache do objeto no escopo de portlet
- Session scope - se o mesmo usuário acessa-lo
- Application scope - para vários usuários

42

© 2013 IBM Corporation
Checkpoint
Como você compartilha dados entre portlets de um
aplicativo de portal?
A – Armazena objetos dentro do Portlet Scope
B – Armazena objetos dentro do Application Scope
C – Usa Inter-Portlet Communication
D – Alternativas B e C estão corretas

43

© 2013 IBM Corporation
Laboratório 2: Trabalhando com recursos do Portlet
●

Trabalhar com recursos do portal

●

Recuperar dados de um arquivo de propriedades

●

Implementar uma prática sugerida para cache

●

Implementar Lazy Instantiation

44

© 2013 IBM Corporation
Compartilhando dados entre Portlets
●

Requisitos comuns em portlets:
- Portlets precisam se comunicar uns com os outros para que
uma ação em um portlet desencadeie uma resposta em outro
portlet
- Portlets precisam compartilhar e enviar dados para outro

●

Vários métodos são utilizados para compartilhamento de dados
entre portlets:
- Alguns métodos são interativos, e alguns são passivos
- Alguns métodos requerem que portlets pertencam ao mesmo
aplicativo de portlet, e outros não exigem

45

© 2013 IBM Corporation
Compartilhando dados entre Portlets
Você pode compartilhar dados entre portlets das seguintes formas:
●

Compartilhar RenderParameters entre portlets:
- Eles estão disponíveis para subscribing pelos aplicativos
- Declare RenderParameters públicos no descritor de
implementação do portlet (portlet.xml).

●

Compartilhar dados sobre no PortletSession:
- Adicionando atributos no APPLICATION_SCOPE

46

© 2013 IBM Corporation
Compartilhando dados entre Portlets
●

Compartilhar dados usando eventos:
- Especificação JSR 286
- Um portlet publica o evento
- Um ou mais portlets processam o evento

●

Compartilhe dados através de portlets cooperativos:
- Somente aplicável à portlets JSR 168
- Um portlet atua como fonte
- Um ou mais portlets agem como alvos

47

© 2013 IBM Corporation
Novidades do JSR 286 – Render Parameters
●

Shared RenderParameters:
- Funcionam de forma semelhante a outros parâmetros que
entram no request
- Também pode ser chamados de Public RenderParameters

●

●

Na especificação JSR 286, RenderParameters podem ser
declarados públicos no portlet.xml para que possam ser
acessados em outro portlet
RenderParameters são strings:
- Recupera-se da mesma forma como os campos de um
formulário
- IBM WebSphere Portal re-entregam RenderParameters
através de uma atualização de janela ou a ação por outro portlet

48

© 2013 IBM Corporation
Novidades do JSR 286 – Portlet Events
●

●

●

●

Nova fase no Ciclo de Vida: Event Processing
Events podem ser gerados durante a Action Phase ou Event
Phase - não durante a Render Phase
Event model é um modelo mediado flexível
● Um portlet publica um evento
● Um ou mais portlets processam o evento
Ambos os Events publishes e os Events process devem ser
portlets JSR 286

●

Portlets não precisam estar no mesmo aplicativo de portlet

●

Forma versátil de compartilhar dados entre portlets

49

© 2013 IBM Corporation
Novidades do JSR 286 – Portlet Events
Interface EventPortlet
●

Contém um método:
void processEvent(EventRequest, eventResponse)

●

●

O objeto EventRequest fornece carga do evento e outras
informações típicas de portlet (modo, estado da janela, etc)
Os eventos podem ser publicados através de métodos em
ActionResponse ou EventResponse
- setEvent() ou setEvents()
- Várias chamadas para setEvent e setEvents são permitidas

●

50

A entrega e processamento de pedidos não é garantida
© 2013 IBM Corporation
Novidades do JSR 286 – Portlet Events
●

●

●

●

51

Eventos devem ser definidos no arquivo portlet.xml
Após a definição do evento, cada portlet deve declarar quais os
eventos que irá publicar ou receber
Eventos definidos no Portal não precisam ser declarados no
portlet.xml
Nomeando um evento:
- Deve-se usar o padrão W3C QName
- Receiving events podem terminar com um caracter curinga *
- Pode declarar default-event-namespace no portlet.xml e usar
apenas nomes locais

© 2013 IBM Corporation
Novidades do JSR 286 – Portlet Events
●

Suportando eventos no arquivo portlet.xml
<portlet­app xmlns:x="http://mycompany.com/portlet" 
             xmlns:std="http://somestandardsbody.org/interop­events">
    <portlet>
        <supported­processing­event>
            <qname>x:address.showForUpdate</qname>
        </supported­processing­event>
        <supported­publishing­event>
            <qname>x:address.updated</qname>
        </supported­processing­event>
    </portlet>
    <event­definition>
        <qname>x:address.showForUpdate</qname>
        <alias>std:address</alias>
        <value­type>com.mycompany.portlets.common.Address</value­type>
    </event­definition>  
    <event­definition>
        <qname>x:address.updated</qname>
        <alias>std:address</alias>
        <value­type>com.mycompany.portlets.common.Address</value­type>
    </event­definition>  
</portlet­app>

52

© 2013 IBM Corporation
Novidades do JSR 286 – Portlet Events
●

Suportando eventos na classe Java
public class MyPortlet extends GenericPortlet {
    public static String NAMESPACE = "http://mycompany.com/portlet";
    
    @ProcessAction(name="address.updated")
    public void addressUpdated(ActionRequest request, ActionResponse response) {
      ...
      Address myAddress = ...;
      response.setEvent(new QName(NAMESPACE, "address.updated"), myAddress);
    } 
    @ProcessEvent(name="address.showForUpdate")
    public void addressUpdated(EventRequest request, EventResponse response) {
      Address myAddress = (Address) request.getEvent();
      ...
    }
…
}

53

© 2013 IBM Corporation
Novidades do JSR 286 – Resource Serving
●

Nova operação no Ciclo de Vida: serveResource()

●

O método serveResource() é iniciado usando Resource URLs

●

●

O container forcece um ResourceRequest e um
ResourceResponse ao método serveResource()
A chamada para o método serveResource() não é seguida por
uma chamada a fase de renderização
public class UserInfoPortlet extends GenericPortlet implements 
ResourceServingPortlet {
...
public void serveResource
(ResourceRequest request,ResourceResponse response)
throws PortletException, IOException
{
...

54

© 2013 IBM Corporation
Novidades do JSR 286 – Resource Serving
●

Resource Serving é um recurso fundamental para o
desenvolvimento Ajax:
- Permite iniciar um Resource serving portlet diretamente,
ignorando IBM WebSphere Portal
- Ajuda a servir os recursos e manter o acesso ao contexto do
portlet e seus dados

●

Portlets podem produzir conteúdo com
- OutputStream
- ResourceResponseWriter
- Delegate com uma chamada RequestDispatcher

55

© 2013 IBM Corporation
Checkpoint
Na especificação JSR 286, portlets podem compartilhar
dados através de:
A – Render Parameters, Resource Serving, Cooperative
Portlets
B – Render Parameters, Resource Serving, Event Portlets
C – Render Parameters, Event Portlets, PortletSession
D – Render Parameters, Event Portlets, Cooperative
Portlets

56

© 2013 IBM Corporation
Laboratório 3: Trabalhando com comunicação
entre Portlets
●

Ativar um portlet para publicar eventos

●

Ativar um portlet para processar eventos

●

Definir uma relação publish-process

57

© 2013 IBM Corporation
Parte 4: Ambiente de
Desenvolvimento

1878A
58

© 2013 IBM Corporation
Ambiente de Desenvolvimento
Ferramentas a serem consideradas:
Eclipse
● IBM Rational Application Developer
● IBM Web Experience Factory
●

Frameworks a serem considerados:
JSF
● Spring
● Struts
● Dojo
● jQuery
●

59

© 2013 IBM Corporation
Ferramentas: Eclipse
●

IDE Open source mais utilizada do mercado

●

Vasto número de plugins

●

Curva de aprendizado pequena

●

Road map bem elaborado

●

Alguns processos de automação

●

Recursos de WYSIWYG limitados

●

●

Falta de ambiente de desenvolvimento dedicado ao Portal (plugin
para WP)
Deployment manual no WebSphere Portal

60

© 2013 IBM Corporation
Ferramentas: Rational Application Developer
●

Baseado em Open Source e padrões da indústria

●

Excelente automação e geração automática de codigo

●

Assistentes para criação de Portlets

●

Componentes de UI facilmente integrados em portlets

●

Fácil realizar testes locais com um Portal Test server

●

Completamente integrado ao WAS & WebSphere Portal

●

Integração com outros produtos IBM:
WebSphere Portlet Factory
● Lotus Forms Designer
● Rational Automation Framework
● Rational Team Concert e muito mais...
●

61

© 2013 IBM Corporation
Ferramentas: Web Experience Factory
●

●

●

●

●

Ferramenta de desenvolvimento baseada em modelos
para criação de Portlets e aplicações Web
Fácil de aprender, constroi aplicações complexas sem
necessidade de escrever código Java
Mais de 150 builders incluidos para acelerar o
desenvolvimento
Conhecimento de Java só é necessário para criação de
novos builders
Inclui builders para integração com backends (REST
and WebServices, SQL...), soluções proprietárias (SAP,
Oracle CRM, Peoplesoft), Camadas de Negócio e
Apresentação, etc...

62

© 2013 IBM Corporation
Ferramentas: RAD vs WEF
●

●

●

É comum ambas serem utilizadas dentro de uma organização para
criação de portlets
Rational Application Developer é voltada para desenvolvedores Java
mais experientes
Web Experience Factory é indicada para usuários com pouca ou
nenhuma experiência em Java

63

© 2013 IBM Corporation
Frameworks: Struts 2
●

Framework Web desenvolvido sobre o padrão MVC

●

Arquitetura Simples e fácil de estender

●

Não é padrão da industria, mas chegou a ser o framework web mais
utilizado no mercado

●

Struts 2 é uma grande mudança, junção do Struts 1.x e WebWork

●

O Struts 2 aceita plug-ins disponibilizados por terceiros

●

Struts 2 inclui suporte Ajax

●

Configurações baseadas em Anotações e XML

64

© 2013 IBM Corporation
Frameworks: Spring MVC
●

Spring MVC é parte do Spring, que é muito mais abrangente

●

Flexível e Leve

●

●

●

Apesar de não ser padrão da instustria, é um framework bastante
popular
Integração com a maioria dos frameworks de apresentação como
JSP & JSTL, XSLT, JSF, Velocity, FreeMarker, Tiles
Configurações baseadas em anotações e XML

65

© 2013 IBM Corporation
Frameworks: JavaServer Faces (JSF)
●

●

●

É mais do que um framework, é uma espeficifcação baseada em
MVC
Desenvolvimento WSYWIG
Padrão de mercado e muitas bibliotecas de terceiros disponiveis
(RichFaces, PrimeFaces, IceFaces, etc)

●

Inclui suporte Ajax

●

Facilidade para criação de componentes

●

JSF v2.0 é uma grande atualização

●

Suportado pelo IBM Rational Application Developer:
●

66

RAD v8.5 e WP v8.0 suportam JSF v2.0
© 2013 IBM Corporation
Frameworks: jQuery
●

Framework JavaScript rápido e fácil de usar

●

Baseado em plugins (centenas disponiveis)

●

Suporte Ajax incluso

●

Documentação ampla e de boa qualidade

●

Comunidade grande e participativa

67

© 2013 IBM Corporation
Frameworks: Dojo Toolkit
●

Poderoso framework JavaScript, Open Source, rápido e modular

●

Suporte Ajax incluso

●

Dojo fornece um grande conjunto de wigets (Dijit)

●

Documentação ampla e de boa qualidade

●

Comunidade grande e participativa

●

Suporte incluso no IBM Rational Application Developer:
RAD v8.5 e WP v8.0 suportam Dojo v1.7

68

© 2013 IBM Corporation
Avaliando Frameworks: Metricas de comparação
●

Facilidade de uso

●

Facilidade de manutenção

●

Performance

●

Escalabilidade

●

Segurança

●

Recursos embutidos

●

Integração com IDEs

●

Comunidade e documentação

●

Futuro da tecnologia e roadmap*

●

Suporte a longo prazo / Dependencia de Fornecedor

69

© 2013 IBM Corporation
Avaliando Frameworks: Como escolher?

70

© 2013 IBM Corporation
Avaliando Frameworks: Como escolher?
●

Evite utilizar estudos ou comparações prontas

●

Coloque sua aplicação em perspectiva

●

Selecione uma pequena lista de frameworks

●

Avalie cada um e conduza testes

●

Documente prós e contras de cada um

71

© 2013 IBM Corporation
Recursos disponíveis para desenvolvedores
●

Página de documentação do produto

●

Wiki do WebSphere Portal

●

Forum do WebSphere Portal no developerWorks

●

IBM RedBooks

●

IBM Lotus GreenHouse

72

© 2013 IBM Corporation
Para saber mais...
WebSphere Portal and IBM Web Content Manager Information Center
http://www.ibm.com/developerworks/websphere/zones/portal/proddoc.html
WebSphere Portal and Web Content Manager Business Solutions Catalog
https://greenhouse.lotus.com/catalog/
WebSphere Portal developerWorks forum
http://www.ibm.com/developerworks/forums/forum.jspa?forumID=168
The WebSphere Portal wiki
http://www-10.lotus.com/ldd/portalwiki.nsf/xpViewCategories.xsp?lookupNa
me=IBM%20WebSphere%20Portal%208%20Product%20Documentation
IBM Redbooks® publications
http://www.redbooks.ibm.com/portals/websphere

© 2013 IBM Corporation
Obrigado!!!

Rodrigo Reis
rodrigoareis@br.ibm.com
IT Specialist & Application Architect
IBM Software Services for Collaboration

© 2013 IBM Corporation
© IBM Corporation 2013. All Rights Reserved.
The information contained in this publication is provided for informational purposes only. While efforts were made to verify the completeness and
accuracy of the information contained in this publication, it is provided AS IS without warranty of any kind, express or implied. In addition, this
information is based on IBM’s current product plans and strategy, which are subject to change by IBM without notice. IBM shall not be responsible for
any damages arising out of the use of, or otherwise related to, this publication or any other materials. Nothing contained in this publication is intended
to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of
the applicable license agreement governing the use of IBM software
.
References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates.
Product release dates and/or capabilities referenced in this presentation may change at any time at IBM’s sole discretion based on market
opportunities or other factors, and are not intended to be a commitment to future product or feature availability in any way. Nothing contained in these
materials is intended to, nor shall have the effect of, stating or implying that any activities undertaken by you will result in any specific sales, revenue
growth or other results.
Performance is based on measurements and projections using standard IBM benchmarks in a controlled environment. The actual throughput or
performance that any user will experience will vary depending upon many factors, including considerations such as the amount of multiprogramming
in the user's job stream, the I/O configuration, the storage configuration, and the workload processed. Therefore, no assurance can be given that an
individual user will achieve results similar to those stated here.
Adobe, the Adobe logo, PostScript, and the PostScript logo are either registered trademarks or trademarks of Adobe Systems Incorporated in the
United States, and/or other countries.
Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.
Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both.
ries in the United States and other countries.
Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both. Other company, product, or service names may be
trademarks or service marks of others.
All references to OpenFinancial, Greenwell and Open Bier refer to a fictitious company and are used for illustration purposes only.

© 2013 IBM Corporation

Mais conteúdo relacionado

Semelhante a Construindo portlets para IBM WebSphere Portal – Parte 1

TDC 2010 Floripa-SC SharePoint 2010: Novidades para os desenvolvedores .net
TDC 2010 Floripa-SC SharePoint 2010: Novidades para os desenvolvedores .netTDC 2010 Floripa-SC SharePoint 2010: Novidades para os desenvolvedores .net
TDC 2010 Floripa-SC SharePoint 2010: Novidades para os desenvolvedores .netFabian Gehrke
 
Curso ASP.Net - Módulo 1
Curso ASP.Net - Módulo 1Curso ASP.Net - Módulo 1
Curso ASP.Net - Módulo 1michellobo
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosRodolfo Fadino Junior
 
ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010Norton Guimarães
 
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXFIntrodução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXFRafael T. C. Soares (tuelho)
 
Fundamentos do asp.net
Fundamentos do asp.netFundamentos do asp.net
Fundamentos do asp.netleojr_0
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterEric Silva
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openrukoÉverton Ribeiro
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIComunidade NetPonto
 

Semelhante a Construindo portlets para IBM WebSphere Portal – Parte 1 (20)

Mod06 licao01-apostila
Mod06 licao01-apostilaMod06 licao01-apostila
Mod06 licao01-apostila
 
IBM WebSphere Portal
IBM WebSphere PortalIBM WebSphere Portal
IBM WebSphere Portal
 
TDC 2010 Floripa-SC SharePoint 2010: Novidades para os desenvolvedores .net
TDC 2010 Floripa-SC SharePoint 2010: Novidades para os desenvolvedores .netTDC 2010 Floripa-SC SharePoint 2010: Novidades para os desenvolvedores .net
TDC 2010 Floripa-SC SharePoint 2010: Novidades para os desenvolvedores .net
 
Curso ASP.Net - Módulo 1
Curso ASP.Net - Módulo 1Curso ASP.Net - Módulo 1
Curso ASP.Net - Módulo 1
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
 
Web Services
Web ServicesWeb Services
Web Services
 
ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010
 
Aula 05 - Java Script Básico
Aula 05 -  Java Script BásicoAula 05 -  Java Script Básico
Aula 05 - Java Script Básico
 
Fundamentos de arquitetura Web
Fundamentos de arquitetura WebFundamentos de arquitetura Web
Fundamentos de arquitetura Web
 
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXFIntrodução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
 
ASP.NET - Conceitos Básicos
ASP.NET - Conceitos BásicosASP.NET - Conceitos Básicos
ASP.NET - Conceitos Básicos
 
Aplicativo aula03
Aplicativo aula03Aplicativo aula03
Aplicativo aula03
 
Web Sphere
Web SphereWeb Sphere
Web Sphere
 
Fundamentos do asp.net
Fundamentos do asp.netFundamentos do asp.net
Fundamentos do asp.net
 
Um pouco sobre APIs
Um pouco sobre APIsUm pouco sobre APIs
Um pouco sobre APIs
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
DotNet vs. Java
DotNet vs. JavaDotNet vs. Java
DotNet vs. Java
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openruko
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web API
 
Asp.net core
Asp.net coreAsp.net core
Asp.net core
 

Construindo portlets para IBM WebSphere Portal – Parte 1

  • 1. Construindo Portlets para IBM WebSphere Portal – Parte 1 Rodrigo Reis IT Specialist & Application Architect IBM Collaboration Solutions © 2013 IBM Corporation
  • 2. Agenda Introdução Parte 1: Portal & Portlets Parte 2: Construindo Portlets para IBM WebSphere Portal Parte 3: Especificação JSR 286 Parte 4: Ambiente de Desenvolvimento 2 © 2013 IBM Corporation
  • 3. Introdução ● ● ● 3 Este workshop não é de introdução a Java ou IBM WebSphere Portal Necessário conhecimento básico de Programação Java para Web (JSP, HTML, XML, JavaScript, Frameworks) O objetivo do workshop é introduzir ao desenvolvimento de portlets © 2013 IBM Corporation
  • 4. Parte 1: Portal & Portlets 1878A 4 © 2013 IBM Corporation
  • 5. Definições O que é um Portlet? "Um portlet é um aplicativo que fornece um conteúdo especifico (informação ou serviço) para ser incluido como parte de uma página de Portal." O que é Portal? "Um portal é um container que executa portlets e os disponibiliza com o ambiente de execução requerido." 5 © 2013 IBM Corporation
  • 6. Definições - Portal Para entender o que é um portlet, primeiro é necessário entender o que é um portal: Portal é uma aplicação web que oferece personalização e agregação de conteúdos de diferentes fontes, aglomerando e distribuindo estas informações de forma direcionada a um publico alvo Um portal possui 3 funcionalidades básicas: ● ● Agregador de Conteúdo ● 6 Portlet Container Serviços Comuns © 2013 IBM Corporation
  • 7. Definições Portlet Container: o portlet container é responsável por controlar o ciclo de vida de um portlet Agregador de Conteúdo: uma das principais tarefas de um portal é agregar conteúdo gerado por aplicações de diversos portlet Serviços Comuns: Um dos principais pontos fortes de um servidor de portal é o conjunto de serviços comuns que ela proporciona. Alguns serviços comuns que você pode encontrar na maioria das implementações de portais são: ● ● 7 Logon único: Permite ter acesso a todas as outras aplicações uma vez que você entrar no servidor do portal Personalização: Permitir ao usuário personalizar sua página, alterando cores, layout e decidindo quais portlets incluir na página © 2013 IBM Corporation
  • 8. Definições ● ● ● 8 No passado, com o surgimento de um número crescente de portais corporativos, vários fabricantes criaram diferentes APIs para componentes do portal Esta variedade de interfaces incompatíveis geraram problemas para os fornecedores de aplicações Para solucionar estes problemas, foi criada a JSR (Java Specification Request) 168, uma especificação de Portlets, que nasceu para oferecer interoperabilidade entre portlets e portais © 2013 IBM Corporation
  • 9. Definições O propósito da JSR 168 era: ● Definir o ambiente de execução, ou portlet container, para portlets ● Definir a API entre o portlet container e portlets ● ● Fornecer mecanismos para armazenar dados temporários e persistentes para portlets Fornecer um mecanismo que permite incluir servlets e JSP (JavaServer Pages) nos portlets ● Definir um pacote de portlets para permitir uma implantação fácil ● Permitir a portabilidade entre os portlets do portal ● 9 Executar portlets JSR 168 como portlets remotos usando o Web Services for Remote Portlets (WSRP) protocolo © 2013 IBM Corporation
  • 10. Definições ● Java Portlet 1.0 Specification (JSR 168) Liberada em: 27 de Outubro de 2003 ● Java Portlet 2.0 Specification (JSR 286) Liberada em: 03 de Março de 2008 ● Java Portlet Specification 3.0 (JSR 362) Em desenvolvimento Lider: Martin Scott Nicklous, IBM 10 © 2013 IBM Corporation
  • 11. Checkpoint NÃO é um dos propósitos da especificação JSR168: A – Definir um pacote de portlets para permitir uma implantação fácil B – Permitir a portabilidade entre os portlets do portal C – Definir o modelo de segurança do portlet container D – Definir a API entre o portlet container e portlets E – Definir o ambiente de execução, ou portlet container, para portlets 11 © 2013 IBM Corporation
  • 12. Parte 2: Contruindo Portlets para IBM WebSphere Portal 1878A 12 © 2013 IBM Corporation
  • 13. Arquitetura do WebSphere Portal A arquitetura do ambiente de execução do WebSphere Portal possui as seguintes caracteristicas: ● ● ● É executado dentro de um web container do WebSphere Application Server chamado de WebSphere_Portal Possui seu próprio componente de transporte HTTP Possui 6 banco de dados de apoio que por padrão é instalado em Derby 13 © 2013 IBM Corporation
  • 14. Arquitetura do WebSphere Portal Banco de dados do WebSphere Portal: ● ● ● ● ● ● 14 Release – Armazena configurações do WebSphere Portal Customization – Contém dados associados com cada usuário do portal, como por exemplo, preferências de portlet Community – Contém recursos que são modifcados em produção JCR – Armazena todo conteúdo do Web Content Management e Personalization Feedback – Armazena logs de utilização do site LikeMinds – Contém classificassões e dados sugestão para personalização © 2013 IBM Corporation
  • 15. Arquitetura do WebSphere Portal Principais serviços do WebSphere Portal: ● ● ● ● ● 15 Model SPI – Fornece acesso leitura para todos WebSphere Portal Data Model PUMA – Gerência associação e atributos de usuários Credential Vault – Prover acesso seguro as credencias de usuário Tagging e Ratting – Novidade no Portal 8, fornece serviços de classificação e marcação de conteúdos Personalization – Disponibiliza mecanismos para personalização de conteúdos para usuários © 2013 IBM Corporation
  • 16. Visão Geral Web Experience Suite Browser / Systems Out of the box features Theme / Portlets Custom Portlets Client Engine Markup (HTML) Custom Development REST SPI (Client Side) Model SPI WebDAV SPI Third Party IBM products Data (ATOM,binary…) Custom Development (Server Side – Theme, Extensions) 16 © 2013 IBM Corporation
  • 17. Portlets e Servlets ● Portlets e Servlets são parecidos em alguns aspectos, mas sem nenhuma conexão direta ● Portlets são executados em um Portlet Container ● Portlet Container é uma extensão de um Servlet Container ● Portlet Application é uma extensão de uma Web Application web.xml + portlet.xml são os Deployment Descriptors ● Podemos ter Portlets e Servlets dentro da mesma aplicação web 17 © 2013 IBM Corporation
  • 18. Portlet Modes ● O Portal monitora o modo do portlet ● Um portlet pode conter 3 modos padrões: ● ● Edit – Usuário personaliza o portlet ● ● View – Modo de exibição padrão Help – Exibe janela de ajuda Portais podem conter modos adicionais (muitos são sugeridos na especificação), o WebSphere Portal contem: ● ● 18 Edit Shared Settings – Configurações comuns a todos usuários Configure – Configurações administrativas © 2013 IBM Corporation
  • 19. Portlet Modes ● Portlets podem modificar seu próprio modo de operação ● O acesso a cada modo depente das permissões do usuário ● ● Por exemplo, um usuário do tipo Privileged User tem acesso ao modo Edit mas não ao Edit Shared Settings O desenvolvedor deve implementar os Portlet Modes. As configurações ficam armazenadas no arquivo portlet.xml <supports> <mime­type>text/html</mime­type> <portlet­mode>view</portlet­mode> <portlet­mode>edit</portlet­mode> <portlet­mode>help</portlet­mode> </supports> 19 © 2013 IBM Corporation
  • 20. Portlet States ● Diferente de aplicações web tradicionais, portlets utilizam apenas uma fração da página ● O estado da janela de cada portlet é controlado individualmente ● Os seguintes estados de janela estão disponiveis: ● ● Maximize – exibe apenas o portlet na janela ● 20 Minimize – exibe apenas o titulo da janela Restore – exibe o portlet no modo padrão © 2013 IBM Corporation
  • 21. Checkpoint Quais são os Portlets Modes suportados pelo WebSphere Portal? A – View, Edit, Configure B – View, Edit, Help, Configure C – View, Edit, Help, Personalize D – View, Edit, Help, Configure, Edit Shared Settings 21 © 2013 IBM Corporation
  • 22. Checkpoint Qual das alternativas a seguir é FALSA? A – Portlets podem modificar seu próprio modo de operação B – O desenvolvedor deve informar os modos de operação do portlet dentro do arquivo web.xml C – O desenvolvedor pode implementar novos Portlet States D – O desenvolvedor pode implementar novos Portlet Modes 22 © 2013 IBM Corporation
  • 23. public class HelloWorld extends GenericPortlet { Criando um Portlet public void init (PortletConfig portletConfig) throws UnavailableException, PortletException { super.init(portletConfig); } Desenvolvendo ● public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException Parte 1: Código do Portlet { response.setContentType("text/html"); response.getWriter().println("Hello Portal World!</p>"); } } <?xml version="1.0" encoding="UTF-8"?> + <portlet-app ...> <portlet> <portlet-name>HelloWorld portlet name</portlet-name> <display-name>Hello World portlet (JSR)</display-name> ● <display-name xml:lang="en">Hello World portlet (JSR)</display-name> Part 2: Portlet descriptor <portlet-class>HelloWorld</portlet-class> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> </supports> <supported-locale>en</supported-locale> </portlet> </portlet-app> Empacotando & Publicando 23 WAR © 2013 IBM Corporation
  • 24. Criando um Portlet ● Estrutura de um Portlet (arquivo WAR) ● ● Arquivos de classe Java ● Arquivos JSP ● O deployment descriptor, portlet.xml ● Arquivos JAR contendo qualquer biblioteca usada pelo porltet ● ● Arquivos WAR contém os seguintes artefatos: Arquivos Web (HTML, XML, XHTML, JavaScript, CSS, …) Um aplicativo de portlet pode conter um ou mais portlets 24 © 2013 IBM Corporation
  • 25. Laboratório 1: Criando o primeito Portlet ● Criar um projeto de Portlet ● Implementar a lógica de negócios ● Fazer Deploy do portlet 25 © 2013 IBM Corporation
  • 26. Parte 3: Especificação JSR 286 1878A 26 © 2013 IBM Corporation
  • 27. Introdução ao JSR 286 ● ● ● O IBM WebSphere Portal inclui um ambiente de execução que suporta Portlets desenvolvidos seguindo as especificações JSR 168 e JSR 286 A API JSR 168 define a maior parte dos objetos, sendo a base do JSR 286, que resolve limitações da especificação anterior Principais recursos da JSR 286: ● ● Portlet events Portlet filters que permitem adicionar mais lógica de negócio antes de processar as fases do ciclo de vida do portlet, como: render(), processAction(), processEvent(), serveResource() ● ● 27 Public Render parameters Resource Serving portlets © 2013 IBM Corporation
  • 28. Portlet Diagrama do Java Portlet Specification, Version 2.0 28 © 2013 IBM Corporation
  • 29. Ciclo de vida de um portlet Portal Iniciado Portlet init() Usuário solicita página ProcessAction(), render() [doView(), doEdit(), ...] Portal Retorno da página Portal Terminado 29 Portlet Portlet marckup Portlet destroy() © 2013 IBM Corporation
  • 30. Interface Portlet Cada portlet deve implementar a interface de portlet, ou estender de uma classe que implementa essa interface. A interface de portlet é composta dos seguintes métodos: ● ● init(PortletConfig config) - para inicializar o portlet. - Este método é chamado apenas uma vez após instancia-lo. - Pode ser usado para criar objetos / recursos utilizados por ele. ProcessAction(ActionRequest request, ActionResponse response) para notificar o portlet que o usuário executou uma ação sobre este portlet. - Apenas uma ação por solicitação do cliente é disparada. - Em uma ação, um portlet pode emitir um redirecionamento, alterar seu modo de portlet ou estado da janela, alterar o seu estado persistente, ou os parâmetros de render. 30 © 2013 IBM Corporation
  • 31. Interface Portlet ● ● render(RenderRequest request, RenderResponse response) para gerar a marcação. Para cada portlet na página atual, o método de renderização é chamado, e o portlet pode produzir marcação que pode depender do modo de portlet ou estado da janela, os parâmetros de renderização, atributos pedido, estado persistente, os dados da sessão, ou dados de back-end. destroy() - para indicar o fim do ciclo de vida do portlet. Este método permite liberar recursos e atualizar os dados persistentes que pertencem a este portlet. 31 © 2013 IBM Corporation
  • 32. Relacionamento entre classes JSR286 32 © 2013 IBM Corporation
  • 33. Classe PortletConfig ● A classe PortletConfig funciona de maneira similar a classe ServletConfig que utiliza os seguintes metódos comuns para conceder acesso a configuração do portlet: - getInitParameter() - getPortletName() - getResourceBundle() - getSupportedLocales() ● Exemplo de uso PortletConfig que carrega o ResourceBundle para a localidade atual do usuário: ResourceBundle portletBundle = null; portletBundle =  getPortletConfig().getResourceBundle(request.getLocale()); 33 © 2013 IBM Corporation
  • 34. Classe PortletContext ● ● ● A classe PortletContext também funciona de maneira similar a classe ServletContext e fornece acesso a informações do portlet container Existe um contexto por aplicativo de portlet e instância do servidor de portal Atributos armazenados no contexto são globais para todos usuários e componentes do aplicativo de portlet setAttribute() e getAttribute() ● Exemplo usando getRequestDispatcher() para iniciar um JSP PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/jsp/UserForm.jsp"); rd.include(request, response); 34 © 2013 IBM Corporation
  • 35. Classe PortletRequest A classe PortletRequest usa as seguintes subinterfaces ● ● ● ● ActionRequest – passada dentro do método processAction() RenderRequest – passada dentro dos métodos doView() e doEdit() EventRequest – passada dentro do método processEvent() para portlets que utilizam eventos ResourceRequest – passada dentro do método serveResource() para portelts que fornecem recursos 35 © 2013 IBM Corporation
  • 36. Classe PortletRequest Dicas sobre a utilização da classe ActionRequest: ● Por padrão atributos na ActionRequest não são repassados para para RenderRequest ● Quando a opção ActionScopedRequestAttributes está definida como true, atributos em ActionRequest são repassados para RenderRequest <container­runtime­option> <name>javax.portlet.actionScopedRequestAttributes</name> <value>true</value> </container­runtime­option> ● Coloque atributos que necessitam estar disponiveis em mais que um simples request na Session 36 © 2013 IBM Corporation
  • 37. Classe PortletResponse ● Cada fase do cliclo de vida de um portlet possui uma implementação da classe PortletResponse ActionReponse, RenderResponse, EventResponse, Resource Response ● Métodos da classe ActionResponse - setPortletMode() - para adicionar parametros no RenderRequest - setPortletMode() - para alterar o modo de operação do portlet - setWindowState() - para mudar o estado da janela ● Métodos da classe RenderResponse - setNamespace() - para retornar o namespace do portlet - createActionUrl() e createRenderUrl() - para criar urls para o portlet 37 © 2013 IBM Corporation
  • 38. Classe PortletSession ● ● A classe PortletSession fornece acesso rápido a objetos em nome do usuário Caracteristicas - Dados da sessão são especificos para cada usuário. Objetos em uma sessão estão disponiveis durante o ciclo de vida da sessão, tanto para um usuário e portlet especifico qaunto para um usuário e todos portlets dentro do aplicativo de portlet - Objetos são removidos quando o objeto não é mais necessário - Sessões são invalidas manualmente ou após certo tempo de inatividade 38 © 2013 IBM Corporation
  • 39. Classe PortletSession A classe PortletSession define dois escopos para armazenamento de objetos: ● ● 39 AAPLICATION_SCOPE – Objetos armazenados estão disponiveis para todos portlets, servlets e jsp que pertencem ao mesmo aplicativo de portlet PORTLET_SCOPE – Objetos estão disponiveis para o portlet durante requests na mesma janela de portlet © 2013 IBM Corporation
  • 40. Classe PortletSession Usando portlet sessions de forma eficiente: ● Armazene objetos na session quando: - O objeto precisa estar disponivel para um request subsequente - O objeto é compartilhado com multiplos portlets dentro da mesma aplicação ● ● 40 Remova objetos quando não são mais necessários Certifique-se de que todos objetos armazenados na session são serializable. © 2013 IBM Corporation
  • 41. Object Scoping A expectativa de vida do objeto ou escopos Request scope - tem vida durante requisição atual ● Session scope - abrange os pedidos para o usuário conectado ● Application scope - aplica-se quando o aplicativo é carregado Dicas para lidar com objetos ● Coloque objetos no escopo apropriado para a aplicação ● Remova os objetos do escopo quando eles não são mais necessários ● Limitar o tamanho do objeto quando se trabalhar em sessão ● Objeto de sessão em um portal de cluster pode ser mantido em um banco de dados ● Se um objeto não é específico do usuário, armazenar no portletContext ● 41 © 2013 IBM Corporation
  • 42. Object Scoping Lazy Instantition ● ● É uma tecnica para criação de objetos É vantajosa quando o uso do processador para recuperar os dados é maior que aquele associado com a manutenção dos objetos dentro de uma referência escopo local Passos para implementa o Lazy Instantition: ● Passo 1 - Crie o objeto no primeiro pedido ● Passo 2 - Realizar acesso ao banco ● Passo 3 – Faça Cache do objeto no escopo de portlet - Session scope - se o mesmo usuário acessa-lo - Application scope - para vários usuários 42 © 2013 IBM Corporation
  • 43. Checkpoint Como você compartilha dados entre portlets de um aplicativo de portal? A – Armazena objetos dentro do Portlet Scope B – Armazena objetos dentro do Application Scope C – Usa Inter-Portlet Communication D – Alternativas B e C estão corretas 43 © 2013 IBM Corporation
  • 44. Laboratório 2: Trabalhando com recursos do Portlet ● Trabalhar com recursos do portal ● Recuperar dados de um arquivo de propriedades ● Implementar uma prática sugerida para cache ● Implementar Lazy Instantiation 44 © 2013 IBM Corporation
  • 45. Compartilhando dados entre Portlets ● Requisitos comuns em portlets: - Portlets precisam se comunicar uns com os outros para que uma ação em um portlet desencadeie uma resposta em outro portlet - Portlets precisam compartilhar e enviar dados para outro ● Vários métodos são utilizados para compartilhamento de dados entre portlets: - Alguns métodos são interativos, e alguns são passivos - Alguns métodos requerem que portlets pertencam ao mesmo aplicativo de portlet, e outros não exigem 45 © 2013 IBM Corporation
  • 46. Compartilhando dados entre Portlets Você pode compartilhar dados entre portlets das seguintes formas: ● Compartilhar RenderParameters entre portlets: - Eles estão disponíveis para subscribing pelos aplicativos - Declare RenderParameters públicos no descritor de implementação do portlet (portlet.xml). ● Compartilhar dados sobre no PortletSession: - Adicionando atributos no APPLICATION_SCOPE 46 © 2013 IBM Corporation
  • 47. Compartilhando dados entre Portlets ● Compartilhar dados usando eventos: - Especificação JSR 286 - Um portlet publica o evento - Um ou mais portlets processam o evento ● Compartilhe dados através de portlets cooperativos: - Somente aplicável à portlets JSR 168 - Um portlet atua como fonte - Um ou mais portlets agem como alvos 47 © 2013 IBM Corporation
  • 48. Novidades do JSR 286 – Render Parameters ● Shared RenderParameters: - Funcionam de forma semelhante a outros parâmetros que entram no request - Também pode ser chamados de Public RenderParameters ● ● Na especificação JSR 286, RenderParameters podem ser declarados públicos no portlet.xml para que possam ser acessados em outro portlet RenderParameters são strings: - Recupera-se da mesma forma como os campos de um formulário - IBM WebSphere Portal re-entregam RenderParameters através de uma atualização de janela ou a ação por outro portlet 48 © 2013 IBM Corporation
  • 49. Novidades do JSR 286 – Portlet Events ● ● ● ● Nova fase no Ciclo de Vida: Event Processing Events podem ser gerados durante a Action Phase ou Event Phase - não durante a Render Phase Event model é um modelo mediado flexível ● Um portlet publica um evento ● Um ou mais portlets processam o evento Ambos os Events publishes e os Events process devem ser portlets JSR 286 ● Portlets não precisam estar no mesmo aplicativo de portlet ● Forma versátil de compartilhar dados entre portlets 49 © 2013 IBM Corporation
  • 50. Novidades do JSR 286 – Portlet Events Interface EventPortlet ● Contém um método: void processEvent(EventRequest, eventResponse) ● ● O objeto EventRequest fornece carga do evento e outras informações típicas de portlet (modo, estado da janela, etc) Os eventos podem ser publicados através de métodos em ActionResponse ou EventResponse - setEvent() ou setEvents() - Várias chamadas para setEvent e setEvents são permitidas ● 50 A entrega e processamento de pedidos não é garantida © 2013 IBM Corporation
  • 51. Novidades do JSR 286 – Portlet Events ● ● ● ● 51 Eventos devem ser definidos no arquivo portlet.xml Após a definição do evento, cada portlet deve declarar quais os eventos que irá publicar ou receber Eventos definidos no Portal não precisam ser declarados no portlet.xml Nomeando um evento: - Deve-se usar o padrão W3C QName - Receiving events podem terminar com um caracter curinga * - Pode declarar default-event-namespace no portlet.xml e usar apenas nomes locais © 2013 IBM Corporation
  • 52. Novidades do JSR 286 – Portlet Events ● Suportando eventos no arquivo portlet.xml <portlet­app xmlns:x="http://mycompany.com/portlet"               xmlns:std="http://somestandardsbody.org/interop­events">     <portlet>         <supported­processing­event>             <qname>x:address.showForUpdate</qname>         </supported­processing­event>         <supported­publishing­event>             <qname>x:address.updated</qname>         </supported­processing­event>     </portlet>     <event­definition>         <qname>x:address.showForUpdate</qname>         <alias>std:address</alias>         <value­type>com.mycompany.portlets.common.Address</value­type>     </event­definition>       <event­definition>         <qname>x:address.updated</qname>         <alias>std:address</alias>         <value­type>com.mycompany.portlets.common.Address</value­type>     </event­definition>   </portlet­app> 52 © 2013 IBM Corporation
  • 53. Novidades do JSR 286 – Portlet Events ● Suportando eventos na classe Java public class MyPortlet extends GenericPortlet {     public static String NAMESPACE = "http://mycompany.com/portlet";          @ProcessAction(name="address.updated")     public void addressUpdated(ActionRequest request, ActionResponse response) {       ...       Address myAddress = ...;       response.setEvent(new QName(NAMESPACE, "address.updated"), myAddress);     }      @ProcessEvent(name="address.showForUpdate")     public void addressUpdated(EventRequest request, EventResponse response) {       Address myAddress = (Address) request.getEvent();       ...     } … } 53 © 2013 IBM Corporation
  • 54. Novidades do JSR 286 – Resource Serving ● Nova operação no Ciclo de Vida: serveResource() ● O método serveResource() é iniciado usando Resource URLs ● ● O container forcece um ResourceRequest e um ResourceResponse ao método serveResource() A chamada para o método serveResource() não é seguida por uma chamada a fase de renderização public class UserInfoPortlet extends GenericPortlet implements  ResourceServingPortlet { ... public void serveResource (ResourceRequest request,ResourceResponse response) throws PortletException, IOException { ... 54 © 2013 IBM Corporation
  • 55. Novidades do JSR 286 – Resource Serving ● Resource Serving é um recurso fundamental para o desenvolvimento Ajax: - Permite iniciar um Resource serving portlet diretamente, ignorando IBM WebSphere Portal - Ajuda a servir os recursos e manter o acesso ao contexto do portlet e seus dados ● Portlets podem produzir conteúdo com - OutputStream - ResourceResponseWriter - Delegate com uma chamada RequestDispatcher 55 © 2013 IBM Corporation
  • 56. Checkpoint Na especificação JSR 286, portlets podem compartilhar dados através de: A – Render Parameters, Resource Serving, Cooperative Portlets B – Render Parameters, Resource Serving, Event Portlets C – Render Parameters, Event Portlets, PortletSession D – Render Parameters, Event Portlets, Cooperative Portlets 56 © 2013 IBM Corporation
  • 57. Laboratório 3: Trabalhando com comunicação entre Portlets ● Ativar um portlet para publicar eventos ● Ativar um portlet para processar eventos ● Definir uma relação publish-process 57 © 2013 IBM Corporation
  • 58. Parte 4: Ambiente de Desenvolvimento 1878A 58 © 2013 IBM Corporation
  • 59. Ambiente de Desenvolvimento Ferramentas a serem consideradas: Eclipse ● IBM Rational Application Developer ● IBM Web Experience Factory ● Frameworks a serem considerados: JSF ● Spring ● Struts ● Dojo ● jQuery ● 59 © 2013 IBM Corporation
  • 60. Ferramentas: Eclipse ● IDE Open source mais utilizada do mercado ● Vasto número de plugins ● Curva de aprendizado pequena ● Road map bem elaborado ● Alguns processos de automação ● Recursos de WYSIWYG limitados ● ● Falta de ambiente de desenvolvimento dedicado ao Portal (plugin para WP) Deployment manual no WebSphere Portal 60 © 2013 IBM Corporation
  • 61. Ferramentas: Rational Application Developer ● Baseado em Open Source e padrões da indústria ● Excelente automação e geração automática de codigo ● Assistentes para criação de Portlets ● Componentes de UI facilmente integrados em portlets ● Fácil realizar testes locais com um Portal Test server ● Completamente integrado ao WAS & WebSphere Portal ● Integração com outros produtos IBM: WebSphere Portlet Factory ● Lotus Forms Designer ● Rational Automation Framework ● Rational Team Concert e muito mais... ● 61 © 2013 IBM Corporation
  • 62. Ferramentas: Web Experience Factory ● ● ● ● ● Ferramenta de desenvolvimento baseada em modelos para criação de Portlets e aplicações Web Fácil de aprender, constroi aplicações complexas sem necessidade de escrever código Java Mais de 150 builders incluidos para acelerar o desenvolvimento Conhecimento de Java só é necessário para criação de novos builders Inclui builders para integração com backends (REST and WebServices, SQL...), soluções proprietárias (SAP, Oracle CRM, Peoplesoft), Camadas de Negócio e Apresentação, etc... 62 © 2013 IBM Corporation
  • 63. Ferramentas: RAD vs WEF ● ● ● É comum ambas serem utilizadas dentro de uma organização para criação de portlets Rational Application Developer é voltada para desenvolvedores Java mais experientes Web Experience Factory é indicada para usuários com pouca ou nenhuma experiência em Java 63 © 2013 IBM Corporation
  • 64. Frameworks: Struts 2 ● Framework Web desenvolvido sobre o padrão MVC ● Arquitetura Simples e fácil de estender ● Não é padrão da industria, mas chegou a ser o framework web mais utilizado no mercado ● Struts 2 é uma grande mudança, junção do Struts 1.x e WebWork ● O Struts 2 aceita plug-ins disponibilizados por terceiros ● Struts 2 inclui suporte Ajax ● Configurações baseadas em Anotações e XML 64 © 2013 IBM Corporation
  • 65. Frameworks: Spring MVC ● Spring MVC é parte do Spring, que é muito mais abrangente ● Flexível e Leve ● ● ● Apesar de não ser padrão da instustria, é um framework bastante popular Integração com a maioria dos frameworks de apresentação como JSP & JSTL, XSLT, JSF, Velocity, FreeMarker, Tiles Configurações baseadas em anotações e XML 65 © 2013 IBM Corporation
  • 66. Frameworks: JavaServer Faces (JSF) ● ● ● É mais do que um framework, é uma espeficifcação baseada em MVC Desenvolvimento WSYWIG Padrão de mercado e muitas bibliotecas de terceiros disponiveis (RichFaces, PrimeFaces, IceFaces, etc) ● Inclui suporte Ajax ● Facilidade para criação de componentes ● JSF v2.0 é uma grande atualização ● Suportado pelo IBM Rational Application Developer: ● 66 RAD v8.5 e WP v8.0 suportam JSF v2.0 © 2013 IBM Corporation
  • 67. Frameworks: jQuery ● Framework JavaScript rápido e fácil de usar ● Baseado em plugins (centenas disponiveis) ● Suporte Ajax incluso ● Documentação ampla e de boa qualidade ● Comunidade grande e participativa 67 © 2013 IBM Corporation
  • 68. Frameworks: Dojo Toolkit ● Poderoso framework JavaScript, Open Source, rápido e modular ● Suporte Ajax incluso ● Dojo fornece um grande conjunto de wigets (Dijit) ● Documentação ampla e de boa qualidade ● Comunidade grande e participativa ● Suporte incluso no IBM Rational Application Developer: RAD v8.5 e WP v8.0 suportam Dojo v1.7 68 © 2013 IBM Corporation
  • 69. Avaliando Frameworks: Metricas de comparação ● Facilidade de uso ● Facilidade de manutenção ● Performance ● Escalabilidade ● Segurança ● Recursos embutidos ● Integração com IDEs ● Comunidade e documentação ● Futuro da tecnologia e roadmap* ● Suporte a longo prazo / Dependencia de Fornecedor 69 © 2013 IBM Corporation
  • 70. Avaliando Frameworks: Como escolher? 70 © 2013 IBM Corporation
  • 71. Avaliando Frameworks: Como escolher? ● Evite utilizar estudos ou comparações prontas ● Coloque sua aplicação em perspectiva ● Selecione uma pequena lista de frameworks ● Avalie cada um e conduza testes ● Documente prós e contras de cada um 71 © 2013 IBM Corporation
  • 72. Recursos disponíveis para desenvolvedores ● Página de documentação do produto ● Wiki do WebSphere Portal ● Forum do WebSphere Portal no developerWorks ● IBM RedBooks ● IBM Lotus GreenHouse 72 © 2013 IBM Corporation
  • 73. Para saber mais... WebSphere Portal and IBM Web Content Manager Information Center http://www.ibm.com/developerworks/websphere/zones/portal/proddoc.html WebSphere Portal and Web Content Manager Business Solutions Catalog https://greenhouse.lotus.com/catalog/ WebSphere Portal developerWorks forum http://www.ibm.com/developerworks/forums/forum.jspa?forumID=168 The WebSphere Portal wiki http://www-10.lotus.com/ldd/portalwiki.nsf/xpViewCategories.xsp?lookupNa me=IBM%20WebSphere%20Portal%208%20Product%20Documentation IBM Redbooks® publications http://www.redbooks.ibm.com/portals/websphere © 2013 IBM Corporation
  • 74. Obrigado!!! Rodrigo Reis rodrigoareis@br.ibm.com IT Specialist & Application Architect IBM Software Services for Collaboration © 2013 IBM Corporation
  • 75. © IBM Corporation 2013. All Rights Reserved. The information contained in this publication is provided for informational purposes only. While efforts were made to verify the completeness and accuracy of the information contained in this publication, it is provided AS IS without warranty of any kind, express or implied. In addition, this information is based on IBM’s current product plans and strategy, which are subject to change by IBM without notice. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, this publication or any other materials. Nothing contained in this publication is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software . References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. Product release dates and/or capabilities referenced in this presentation may change at any time at IBM’s sole discretion based on market opportunities or other factors, and are not intended to be a commitment to future product or feature availability in any way. Nothing contained in these materials is intended to, nor shall have the effect of, stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results. Performance is based on measurements and projections using standard IBM benchmarks in a controlled environment. The actual throughput or performance that any user will experience will vary depending upon many factors, including considerations such as the amount of multiprogramming in the user's job stream, the I/O configuration, the storage configuration, and the workload processed. Therefore, no assurance can be given that an individual user will achieve results similar to those stated here. Adobe, the Adobe logo, PostScript, and the PostScript logo are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States, and/or other countries. Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both. Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both. ries in the United States and other countries. Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both. Other company, product, or service names may be trademarks or service marks of others. All references to OpenFinancial, Greenwell and Open Bier refer to a fictitious company and are used for illustration purposes only. © 2013 IBM Corporation