SlideShare uma empresa Scribd logo
1 de 67
Baixar para ler offline
IBM Web Content Management
Melhores Práticas
Rodrigo Reis
IT Specialist & Application Architect
IBM Collaboration Services
2
Agenda
●
Introdução
●
Melhores Práticas
●
WCM e Java Server Pages
●
WCM API (Application Program Interface)
3
Introdução
4
Introdução
● Este workshop não é de introdução ao IBM Web Content
Management
● Necessário conhecimento básico de Programação Web (JSP,
HTML), IBM WebSphere Portal e IBM Web Content Management
● O projeto de um site com IBM WCM é similar ao de qualquer
outro site ou sistema Web. Algumas práticas mencionadas aqui
não são exclusivas do IBM WCM
5
Melhores Práticas
6
Melhores Práticas
● Antes de Iniciar
● Criação de Conteúdo
● Projetos
● Busca
● Syndication
● Performance
● Administração
● Explorando Assets
7
Melhores Práticas: Antes de Iniciar
A importância do planejamento
● Planejar é perda de tempo?
● Planejar é uma conta que sempre teremos de pagar
● Planejar não é garantia de ter um produto de qualidade
● Em média apenas 30% dos projetos são entregues no prazo
8
Melhores Práticas: Antes de Iniciar
No desenvolvimento do projeto, as seguintes áreas devem estar bem
documentadas:
● Necessidade de negócio, modelo operacional, objetivo inicial e a longo
prazo
● Usuários e seus objetivos
● Site Framework e arquitetura da informação
● Taxonomia
● Modelos de Workflow
● Arquitetura de Bibliotecas
● Definição de modelos de Autoria e Apresentação
* Não são especificos do Web Content Management, mas devem ser conhecidos antes de iniciar a
implementação do projeto
9
Melhores Práticas: Antes de Iniciar
● Arquitetura de Deployment
● Modelo de Segurança
● Suporte a múltiplos idiomas e acessibilidade
● Requerimentos de Personalização
● Integração com outros produtos
● Busca
10
Melhores Práticas: Antes de Iniciar
Gestão do conhecimento
● Manter os assets de projeto atualizados
● Disseminação da informação
✔ Descrição do projeto
✔ Membros e responsabilidades
✔ Documentos (arquitetura, técnicos, manuais, etc)
✔ Links internos e externos
✔ Detalhamento dos processos (Build, Deploy, Defects, ...)
✔ Cronograma
● Utilizar ferramentas de apoio
11
Melhores Práticas: Antes de Iniciar
Por que ter um ambiente de autoria?
● Evitar inserir erros diretamente em produção
● Segurança, garantir que conteúdos críticos não serão acidentalmente
modificados
● Visualizar alterações antes de publicar
● Aprovar alterações antes de publicar
● Agendar quando alterações serão publicadas
12
Melhores Práticas: Criação de Conteúdo
● Planejar a criação de conteúdo
Garantir que o Site terá conteúdo suficiente para testes e publicação
● Criar Grupos de acesso
Evitar assim adicionar acesso à usuários diretamente em conteúdo e
componentes
● Criar Bibliotecas de Conteúdo
Não é recomendado utilizar a biblioteca padrão. Ao invés disso crie
suas próprias bibliotecas
● Evitar espaços e caracteres especiais no nome de bibliotecas
Não nomear biblioteca com mesmo nome de um portal virtual
13
Melhores Práticas: Criação de Conteúdo
● Use bibliotecas de forma eficiente
Por exemplo, divida seu site em uma biblioteca de conteúdo e outra
de componentes
● Ao criar bibliotecas, defina as permissões à biblioteca e tipos de
recurso
Para por exemplo, permitir criadores de conteúdo ver conteúdo e
ocultar deles todos recursos administrativos
● Quando mover conteúdo entre bibliotecas é recomendado usar a
função Mover
A função Mover irá atualizar qualquer referência ao item movido
14
Melhores Práticas: Criação de Conteúdo
● Defina um padrão de nomenclatura para todos tipos de elementos
Ajuda a manter a organização e localizar facilmente elementos
● Considere a utilização de um prefixo de biblioteca
Quando trabalhando com mais de uma biblioteca
● Crie componentes reutilizáveis
Exemplos: header e footer, layouts de menu e navigator, javascript, …
● Use o componente CSS
Exemplo: Um campo Rich Text pode ser configurado para usar um
CSS
15
Melhores Práticas: Criação de Conteúdo
● Use o Inline editing para editar e criar conteúdo diretamente na
página
É recomendado utiliza-lo apenas em ambiente de autoria para evitar
conflitos de syndication
● Defina conteúdo padrão para Site Areas
Considere bloquear o conteúdo padrão para prevenir ele de ser
excluído ou modificado
Se um conteúdo padrão não for definido, o primeiro conteúdo da Site
Area será exibido
● Evite um número excessivo de portlets Web Content View numa
mesma página
Matenha um número menor que 5, que está de acordo com as
melhores práticas do WebSphere Portal
16
Melhores Práticas: Criação de Conteúdo
● Não utilize nomes longos (>50 caracteres) para Site Areas e Content
São utilizados na construção de URLs
● Não utilize IDs de elementos e espere integridade
IDs são ponteiros internos e podem ser atualizados
● Não modifique arquivos Java e JSP do produto
Não irá obter suporte e perderá as modificações quando aplicar um fix
ou atualização
17
Melhores Práticas: Projetos
● Projetos agrupam alterações que
você e outros usuários estão
fazendo
● Itens de projeto são isolados do site
publicado e de outros projetos
● Itens individuais em um projeto não
são visíveis no site publicado até o
projeto inteiro ser publicado
● Todos itens de um projeto podem
ser pré-visualizados juntos antes da
publicação
18
Melhores Práticas: Projetos
Mudanças em um site são isoladas das operações diárias
● Mude a estrutura e layout do site
● Adicione novas Site Areas
● Marque elementos de design ou conteúdo para exclusão
● Teste a apresentação dos elementos de design no contexto do site real
19
Melhores Práticas: Projetos
Desenvolvedores podem coordenar grandes mudanças em um site
sem impactar nenhum visitante ou criador de conteúdo
20
Melhores Práticas: Busca de conteúdo
● Entender o que é requerido pela busca
✔ Qual conteúdo será buscado?
✔ Onde está armazenado?
✔ Quanto conteúdo existe e quais os formatos?
✔ Quais campos serão pesquisados?
✔ Qual formato da query?
✔ Como os resultados serão exibidos?
● Conhecer o perfil dos usuários
Não crie um sistema de busca avançado se seus usuários nunca irão
utilizar. A busca deve ser simples e fácil de usar
21
Melhores Práticas: Busca de conteúdo
● Buscar conteúdo seguro
A segurança estará garantida desde que o acesso esteja definido
para Apenas usuários autenticados
● Considerar a utilização de ferramentas de busca externas
Se seus requerimentos de busca são extensos, é recomendado
integrar uma ferramenta de busca externa
● Não escreva um mecanismo de busca usando API só porque você
pode
Se o Portal não atende os requerimentos, considere uma ferramenta
externa antes de tentar usar a API
22
Melhores Práticas: Syndication
● Configure servidores de Delivery como Subscribe Only
Interrompe tarefa de monitoramento que busca de itens para ser
sindicados
● Escolha o tipo Live Items quando sindicando para servidores de
produção
A menos que se tenha uma necessidade especifica, como conteúdo
podendo ser modificado diretamente em Delivery
● Permissões de acesso a bibliotecas não são
sindicados
Defina o acesso à biblioteca manualmente após a
primeira sindicância ou alterações subsequentes
23
Melhores Práticas: Syndication
● Sindicar todas bibliotecas necessárias
Se um conteúdo na biblioteca A faz referência a um componente na
biblioteca B, ambas devem estar incluídas no mesmo syndicator
● Aumente a frequência de sindicância
Em ambientes de testes, por exemplo, 20 minutos ou mais pode ser
um intervalo mais apropriado
24
Melhores Práticas: Performance
● Evite ter uma Homepage com tamanho superior a 80Kb
Verifique se todos componentes da página estão otimizados (imagens
com qualidade em 60%, css e javascript minificados, etc).
● Garanta que todos componentes de Menu e Navegação estão
otimizados
Evite vários critérios de busca
● Otimize Modelos de Autoria
Para um melhor desempenho, é recomendado limitar o número de
elementos (menor que 15)
● Garanta que os servidores LDAP estão otimizados
Uso de grande número de atributos e queries mal formadas degradam
a performance
25
Melhores Práticas: Performance
● Garanta que o Portal Server está otimizado
JVM, Aplicativos rodando, etc
● Garanta que o HTTP Server está otimizado
Cache, compressão, etc
● Monitore e resolva todos erros encontrados nos logs do Portal
Excessões de aplicativos, segurança, componentes ausentes, etc
● Defina uma política de cache
Use Pre-Rendering, Servlet-Caching (ex. Dynacache) ou Web
Content Management Caching
26
Melhores Práticas: Performance
● WCM Caching
A performance do WCM varia de acordo com o tipo de cache
selecionado
BASIC - É o tipo de cache mais simples, a primeira vez que a pagina
é renderizada pelo WCM é armazenada em cache e então todos
usuários irão acessar o mesmo conteúdo até que ele expire. Logo não
pode ser usado para site com conteúdos personalizados
SITE - Igual ao BASIC, exceto pelo fato que podemos usar connect
tags para sobrescrever o cache default. Não pode ser usado para site
com conteúdos personalizados
27
Melhores Práticas: Performance
SECURED - Neste tipo de cache usuários que têm configurações de
grupo idênticas acessam os mesmos itens em cache. Recomendado
para sites personalizados onde acesso a diferentes páginas da Web e
componentes WCM são baseados em grupos
PERSONALIZED - Aqui usuários que compartilham o mesmo perfil de
personalização acessam os mesmos itens em cache. Recomendado
para sites que utilizam regras de personalização baseadas em perfis
USER - Para este cache, uma cópia de cada página que o usuário
visita é armazenada no cache de usuário. Recomendado quando não
podemos usar regras de personalização baseadas em perfis ou via
grupos de acesso
SESSION - Uma cópia de cada página que o usuário visita é
armazenado no cache de sessão. Possui pior performance de todos
os tipos de cache, não recomendado o uso, são ser que realmente
necessário
28
Melhores Práticas: Performance
● Connect tag
Cache personalizado pode ser aplicado a componentes do WCM
dentro de modelos de apresentação para especializar o tipo de cache
<connect
SRV="cmpnt" PATH="/libraryname/Site/SiteArea/Content"
SOURCE="library" CMPNTNAME="TestNav" CONTENTCACHE="site"
EXPIRES="REL 9000s">
</connect>
29
Melhores Práticas: Administração
● Tenha uma estratégia de backup ativa
Sempre teste o backup e restore e
verifique se todos itens estão no backup
●
● Monitore o site “Recommended fixes and updates for WebSphere
Portal”
Verifique a lista de fixes recomendados e teste antes de distribuir em
todos ambientes
● Otimize o banco de dados JCR
Periodicamente otimize índices e tabelas do banco que armazena
todos dados do Web Content Management
30
Melhores Práticas: Administração
● Não habilite traces e deixe eles lá
Traces devem ser usados para monitorar pontualmente um
problema, sua ativação degrada a performance
● Monitore, Monitore, Monitore
Monitore uso de CPU, Memória, Rede e outros elementos dos
servidores LDAP, HTTP, Banco de Dados e WebSphere
31
Melhores Práticas: Explorando Assets
● Por que reinventar da roda?
Muitos Assets disponíveis no site IBM Collaboration Solutions Catalog
● Exemplos de Assets voltados para WCM
✔ Content Template Catalog (CTC)
É um conjunto de melhores práticas e modelos que aceleram a
construção de um website
✔ IBM Support Tool for WCM
Inclui uma variedade de ferramentas que são úteis na solução de
problemas relacionados com conteúdo
✔ Web Content Manager Social Media Publisher
Extensão para WCM que permite às empresas promover o seu
conteúdo web em redes sociais (bem como fornecer algumas
estatísticas básicas sobre o conteúdo promovido)
32
WCM e Java Server Pages
33
WCM e Java Server Pages: TagLib
● São utilizadas para ter acesso facilitado a componentes e conteúdos do
WCM
● Podem ser utilizadas no componente JSP ou em páginas JSP
Dentro de uma página JSP o suporte é incluído com o seguinte código:
<%@ taglib uri="/WEB-INF/tld/wcm.tld" prefix="wcm" %>
34
WCM e Java Server Pages: TagLib
● InitWorkspace - Utilizado para inicializar a workspace
<wcm:initworkspace username=" " password=" " >
[Error Message]
</wcm:initworkspace>
● Explicit Context - Define explicitamente o contexto atual
<wcm:setExplicitContext wcmWebAppPath=" "
wcmServletPath=" " path=" " >
[Error Message]
</wcm:setExplicitContext>
35
WCM e Java Server Pages: TagLib
● Context Retrieval - Define o contexto baseado numa localização na
forma de url
<wcm:setContext location=" " wcmWebAppPath=""
wcmServletPath="" param=" " >
[Error Message]
</wcm:setContext>
● libraryComponent - Renderiza o componente de uma biblioteca
<wcm:libraryComponent name=" " >
[Error Message]
</wcm:libraryComponent>
36
WCM e Java Server Pages: TagLib
● content - Renderiza o conteúdo baseado no contexto atual
<wcm:content pageDesign=" " >
[Error Message]
</wcm:content>
● contentComponent - Renderiza o elemento de uma Site Area ou
Conteúdo atual
<wcm:contentComponent type=" " key=" " >
[Error Message]
</wcm:contentComponent>
Melhor prática:
- Se for adicionar suporte a múltiplos idiomas no tratamento de erros, considere o
uso de Java Resource Bundles
37
WCM e Java Server Pages: Exemplo TagLib
<%@ taglib uri="/WEB-INF/tld/wcm.tld" prefix="wcm" %>
<html>
<head>
<title>Testando IBM Workplace Web Content Management JSP</title>
</head>
<body>
<wcm:initworkspace username=“wpsadmin" password="password" >
initworkspace falhou!<br>
</wcm:initworkspace>
<wcm:setExplicitContext path="Showcase/Showcase+Internal+Site/News/" >
Explicit Context falhou!<br>
</wcm:setExplicitContext>
38
WCM e Java Server Pages: Exemplo TagLib
<wcm:libraryComponent name=“SC Menu News">
Component falhou!<br>
</wcm:libraryComponent>
<wcm:content>
Content falhou!<br>
</wcm:content>
<wcm:contentComponent type="content" key=“SC Body" >
Content Component falhou!<br>
</wcm:contentComponent>
</body></html>
39
WCM e Java Server Pages: Remote Actions
● Usando Remote Actions
<a href="?wcmAuthoringAction=<action>">Text</a>
● Ações disponíveis
● Approve
● Decline
● Delete
● Edit
● Read
● Openmainview
● New
40
WCM e Java Server Pages: Remote Actions
● Approve, decline, delete, edit, read:
Exemplo, aprovar e rejeitar um item do workflow:
?wcmAuthoringAction=approve&docid=ID1
?wcmAuthoringAction=decline&docid=ID1&docid=ID2
● openmainview:
Usado para abrir uma janela com o portlet de autoria:
?wcmAuthoringAction=openmainview&view=contentbysitearea
Parametros:
contentbysitearea, contentbytitle, myrecentmydraft,
mypendingapproval, mypublished, myexpired, mydeleted,
alldraftitems, allexpireditems, allpublisheditems, alldeleteditems,
componentsbytype
41
WCM e Java Server Pages: Remote Actions
● new:
✔ Usado para abrir o formulário de novo item:
?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.*
Parametros: Nome das classes dentro do pacote
com.ibm.workplace.wcm.api.<Name>
✔ Para novo conteúdo é possível especificar o template de autoria:
wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_C
ontent?atid=ID
✔ Para novos Site Areas, Conteúdo e Categorias é possível especificar
o pai do novo item:
wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_S
iteArea?pid=ID
42
WCM e Java Server Pages: Remote Actions
<table>
<tr><td>
<a href="?
wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Content">
Criar novo Conteúdo</a>
</td></tr>
<tr><td>
<a href="?wcmAuthoringAction=openmainview&view=contentbytitle">
Abrir conteúdo por título</a>
</td></tr>
<tr><td>
<a href="?wcmAuthoringAction=openmainview&view=contentbysitearea">
Abrir conteúdo por site area</a>
</td></tr>
</table>
43
WCM e Java Server Pages: Componente JSP
● Utiliza uma página JSP existente no
servidor
Pode conter TagLibs do WCM ou
código WCM API
● Podem ser integradas a qualquer
Template de Apresentação como
componente
44
WCM e Java Server Pages: Componente JSP
Armazenando páginas JSP
✔ Para uso no Portlet de Autoria (como Pagina de Ativação, Editor de
Texto ou JSP para Template de Autoria)
<portal_server_root>/installedApps/PA_WCM_Authoring_UI/ilwwcm-
authoring.war/jsp/html
✔ Para uso genérico (em tema, portlets, etc), crie um WAR para
armazenar a página
Melhores práticas:
- A sindicância não irá mover as páginas JSP referenciadas em componentes
JSP
- Instalação de fixes pode remover arquivos JSP do portlet de Autoria
45
WCM e Java Server Pages: Página de Ativação
● Criar um interface de autoria simples e com
as ações mais comuns
● Restringir acesso a estrutura da biblioteca de
conteúdo
● Pode utilizar TagLib, Remote Actions e
código Java
46
WCM API
47
WCM API: Introdução
A API publica do WCM é focada no processamento de conteúdo
● Bibliotecas de Conteúdo
Criar, Excluir, Mover ou copiar items entre bibliotecas
● Busca
Localizar itens por: nome ou tipo, conteúdo modificados a partir de
uma data, por template de autoria, categoria, caminho ou status de
workflow
● Recuperar itens por ID
● Criar, excluir e salvar os seguintes itens:
Content, Site Areas, File Resource, HTML, Image, Date and Time,
Link, Number, Style Sheet or User Selection
● Aprovar ou Rejeitar contéudo em um estágio de workflow
48
WCM API: Obtendo Workspace
<%@ page import="com.ibm.workplace.wcm.api.*" %>
<%
// Declara Workspace e Inital Context
InitialContext ctx = null;
Workspace workspace = null;
// Recupera o servico WebContentService usando JNDI
WebContentService webContentService = (WebContentService)
ctx.lookup("portal:service/wcm/WebContentService");
//Obtem Workspace para o usuario autenticado
Workspace = webContentService.getRepository().getWorkspace();
//Trabalha com a workspace
…
%>
49
● Outros metódos para obter Workspace
 getSystemWorkspace()
Retorna a Workspace representando a visão do sistema
 getAnonymousWorkspace()
Retorna a Workspace para um usuário anônimo
 getWorkspace(java.security.Principal principal)
Retorna a Workspace para um usuário especifico
Melhor prática:
- Finalizar uma workspace apenas dentro de um JSP fora do WCM:
endWorkspace()
WCM API: Obtendo Workspace
50
Melhor prática:
- Obter uma workspace do WCM é uma operação extensa, considere salvar a
workspace do usuário atual para melhor performance
<%@ page import="com.ibm.workplace.wcm.api.*" %>
<% // Cria WCM Workspace (ira salvar na sessao automaticamente) %>
<wcm:initworkspace user="<%= request.getUserPrincipal() %>" >
<%
// Obtem workspace armazenada na sessao
Workspace usersWorkspace = (Workspace)
pageContext.getAttribute(Workspace.WCM_WORKSPACE_KEY);
//Trabalha com a workspace
…
%>
WCM API: Usando cache
51
Melhor prática:
- Também é possível armazenar a workspace usando um Sigleton
public static Workspace getSystemWorkspaceInstance(){
if(ws == null)
ws = getSystemWorkspace();
return ws;
}
Melhor prática:
- Coloque funcionalidades comuns dentro de um JSP ou classe utilitária. Assim
você poderá alterar funcionalidades comuns em apenas um lugar e refletir em
todos locais que o utilizam
WCM API: Usando cache
52
WCM API: Criando conteúdo
● workspace.createContent – cria um novo objeto Content baseado
numa template de autoria e site area
Exemplo: Criando e salvando um conteúdo
...
//Cria um conteudo vazio
Content newContent = workspace.createContent(authoringTemplate,
parentSiteArea, null, ChildPosition.END);
//Define o nome do conteudo
newContent.setName("Travel - Be the first tourist on the moon");
//Salva do conteudo
workspace.save(newContent);
...
53
WCM API: Localizando elementos
//Obtem biblioteca de documentos
DocumentLibrary documentLibrary = workspace.getDocumentLibrary("content");
//Define biblioteca de documento para trabalhar na sessao
workspace.setCurrentDocumentLibrary(documentLibrary);
//Recupera SiteArea pai
DocumentIdIterator parentIter = workspace.findByName(DocumentTypes.SiteArea, ”Travel");
DocumentId parentSiteArea = null;
if(parentIter.hasNext()) {
parentSiteArea = parentIter.nextId();
}
//Recupera o Template de Autoria
DocumentIdIterator authoringIter = workspace.findByName(DocumentTypes.AuthoringTemplate,
"Article");
DocumentId authoringTemplate = null;
if(authoringIter.hasNext()) {
authoringTemplate = authoringIter.nextId();
}
...
54
WCM API: Exemplo de workflow
...
//Localiza conteudo usando findByName
DocumentIdIterator contentIter = workspace.findByName(DocumentTypes.Content,
"Lista de Aplicativos");
DocumentId contentId = null;
if(contentIter.hasNext()) {
contentId = contentIter.nextId();
}
//Recupera conteudo usando getById
Content content = (Content)workspace.getById(contentId);
//Move conteudo para proximo estagio de workflow
content.nextWorkflowStage();
//Salva conteudo
workspace.save(content);
...
55
WCM API: Busca de conteúdo
● workspace.contentSearch – retorna todos documentos que satisfazem
os critérios de busca
public com.ibm.workplace.wcm.api.DocumentIdIterator contentSearch
(com.ibm.workplace.wcm.api.DocumentId templateId,
com.ibm.workplace.wcm.api.DocumentId[] siteAreaIds,
com.ibm.workplace.wcm.api.DocumentId[] categoryIds,
java.lang.String[] keywords,
boolean matchAllKeys *)
* Opcional
● O método contentSearch() se comporta de maneira similar ao
componente de Menu
● Se Site Area forem especificadas, todos ascendentes e descendentes
serão incluídos
● A ordem dos resultados não é garantida
Melhor prática:
- Apenas utilizar contentSearch se não for possível usar o componente Menu
56
WCM API – Outras opções de busca
Workspace.findContentByAuthoringTemplate
Workspace.findContentByCategory
Workspace.findContentByWorkflowStage
Workspace.findByType
Workspace.findContentByPath
Workspace.findContentModifiedBetween
Workspace.findContentModifiedSince
Workspace.findByPath
Workspace.findContentByWorkflowStage
57
WCM API – Estendendo o uso da API
● Estender e integrar o Web Content Management com aplicações
externas via JMS (Java Messaging Service)
● Query API
● Rendering Plugin Extension Point
● Text Provider Extension Point
58
WCM API – JMS & WCM
● Mensagens JMS podem ser publicadas para:
Autoria: Criar, Atualizar, Mover, Excluir
Sindication: Iniciar, Parar
Pre-Rendering: Iniciar, Parar
● Mensagens contem todas informações relevantes para eventos:
Atualizar Item:
ItemState Status do Item
DocId UUID do item que foi atualizado
DocName Nome do item que foi atualizado
DocType Tipo, nome da classe API do item
LibraryId Id da biblioteca que contem o item
LibraryName Nome da biblioteca que contem o item
59
WCM API – Query API
● Criar queries escaláveis para qualquer item armazenado no WCM
● Resultados podem ser ordenados e paginados
Os seguintes parametros podem ser combinados para compor as queries:
Tipo do Item Criador Data Expiração
Id do Item Autor Data Publicação
Nome do Item Proprietário Workflow
Titulo do Item Modificado por Estágio Workflow
Biblioteca Criado Desde Status Workflow
Status Projeto Modificado Desde Palavras chaves
Categorias
● Resultados de uma query pode ser ordenado por:
Autor Titulo do Item Data Criação
Nome do Item Data Modificação
60
WCM API: Exemplo de Query API
//Obtem QueryService a partir da Workspace e cria query
QueryService queryService = getWorkspaceInstance().getQueryService();
Query query = queryService.createQuery(Folder.class);
//Obtem biblioteca de documentos a ser pesquisada
DocumentLibrary library =
getWorkspaceInstance().getDocumentLibrary(“Biblioteca”);
//Define parametros de pesquisa
query.addSelector(Selectors.libraryEquals(library));
query.addSelector(HistorySelectors.modifiedSince(oneWeekAgo()));
query.addSort(Sorts.byDateModified(SortDirection.DESCENDING));
//Executa query e armazena resultados
ResultIterator results = null;
results = queryService.execute(query);
61
WCM API – RenderingPlugin Extension Point
● Permite criar novos componentes de renderização
Java Web App que implementa RenderingPlugin e contem um
descritor plugin.xml
● Pode declarar plugins dentro de HTML ou campos RichText
[Plugin:{Nome do Plugin}]
● Plugins podem ter tags de abertura e fechamento e opcionalmente
renderizar conteúdos dentro da tag
[Plugin:{Nome do Plugin}]
[Component name=”Algum componente"]
[/Plugin:{Nome do Plugin}]
62
WCM API – RenderingPlugin Extension Point
● Plugins podem ter múltiplos parametros. Parametros podem ter múltiplos
valores
[Plugin:{Nome do Plugin} param1=”val1” param2=”val2” param3=”val3”]
● O valor de um parametro pode ser o resultado de outra tag WCM
[Plugin:MyRenderingPlugin encode="false“ key="ARTICLE_1“
title="[Property context='current' type='content' field='title']"]
Exemplos de uso:
● Incluir vídeos
● Conteúdo dentro de conteúdo
● Integrar com uma ferramenta como Velocity
63
WCM API – Text Provider Extension Point
● Permite a localização de campos na interface de autoria
Java Web App que implementa TextProvider e contem um descritor
plugin.xml
● Campos localizados são exibidos em formulários e exibições
● Campos que podem ser localizados
Elementos no Template de Autoria
Titulo de Exibição
Descrição
Campos de Ajuda
64
WCM API – Quando usar JSP e API?
● Usar conteúdo dentro de outros portlets
● Acessar funcionalidades do Portal dentro do WCM
● Layouts não possíveis usando componentes padrões do WCM
● Importa conteúdo ou recurso Web de outras fontes
● Publicação automática de conteúdo do WCM
● Intregação de conteúdo com sistemas externos
● Enfim, quando quiser ir além do que o WCM oferece no portlet de autoria
65
Informações adicionais
IBM Web Content Management Home Page
http://www.ibm.com/software/lotus/products/webcontentmanagement/
IBM Web Content Management Information Center documentation
http://www-10.lotus.com/ldd/portalwiki.nsf/xpDocViewer.xsp?
lookupName=IBM+Web+Content+Manager+7+Product+Documentation#action=
openDocument&content=catcontent&ct=prodDoc
Java doc for IBM Web Content Management 7 API
http://public.dhe.ibm.com/software/dw/lotus/portal_javadoc/7/lwcm/api-
javadoc/index.html
IBM Collaboration Solutions Catalog
https://greenhouse.lotus.com/catalog/
66
Referências
● What’s NEW and HOT in Portal WCM 7 - Stuart Crump
● ICS TechTalk: Making Your Content More Social with IBM Web Content
Manager's Content Template Catalog v3 - Herbert Hilhorst, Chris Berry
● IBM Workplace Web Content Management: API Development Best
Practices - Herbert Hilhorst
● Best Practices for using IBM Workplace Web Content Management V6.0 -
David De Vos, Melissa Howarth
© 2013 IBM Corporation
Obrigado!!!
Rodrigo Reis
rodrigoareis@br.ibm.com
IT Specialist & Application Architect
IBM Software Services for Collaboration

Mais conteúdo relacionado

Destaque

Agile Brazil 2013 - Resumo
Agile Brazil 2013 - ResumoAgile Brazil 2013 - Resumo
Agile Brazil 2013 - ResumoBruno Nardini
 
Semanal fechada 6 ano
Semanal fechada 6 anoSemanal fechada 6 ano
Semanal fechada 6 anoRebeca Kaus
 
Introdução aos Servlets e JSPs
Introdução aos Servlets e JSPsIntrodução aos Servlets e JSPs
Introdução aos Servlets e JSPsLuiz Ricardo Silva
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseOziel Moreira Neto
 
Repaso semanal aberta 2 6 ano
Repaso semanal aberta 2 6 anoRepaso semanal aberta 2 6 ano
Repaso semanal aberta 2 6 anoRebeca Kaus
 
Padrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebPadrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebJonata Weber
 
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresPrincípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresTchelinux
 
Programação estruturada com Java-Aula01
Programação estruturada com Java-Aula01Programação estruturada com Java-Aula01
Programação estruturada com Java-Aula01Elvis Araújo
 
Programação "Estruturada" com Java
Programação "Estruturada" com JavaProgramação "Estruturada" com Java
Programação "Estruturada" com JavaLuiz Ricardo Silva
 
No dumb questions (Stack Overflow em Português)
No dumb questions (Stack Overflow em Português)No dumb questions (Stack Overflow em Português)
No dumb questions (Stack Overflow em Português)Luiz Ricardo Silva
 
Aula diagramas de implementacao 3º periodo uniao
Aula diagramas de implementacao 3º periodo uniaoAula diagramas de implementacao 3º periodo uniao
Aula diagramas de implementacao 3º periodo uniaoMaria Alice Jovinski
 
Reengenharia de Software
Reengenharia de SoftwareReengenharia de Software
Reengenharia de SoftwareRafael Berto
 
10 Boas Práticas de Programação
10 Boas Práticas de Programação10 Boas Práticas de Programação
10 Boas Práticas de ProgramaçãoCarlos Schults
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCLuiz Ricardo Silva
 
Padrões no Desenvolvimento de Software
Padrões no Desenvolvimento de SoftwarePadrões no Desenvolvimento de Software
Padrões no Desenvolvimento de SoftwareEmanuel Poletto
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Softwareelliando dias
 
A implantação da Computação em Nuvem na Administração Pública Federal - APF
A implantação da Computação em Nuvem na Administração Pública Federal - APFA implantação da Computação em Nuvem na Administração Pública Federal - APF
A implantação da Computação em Nuvem na Administração Pública Federal - APFEUBrasilCloudFORUM .
 

Destaque (20)

Agile Brazil 2013 - Resumo
Agile Brazil 2013 - ResumoAgile Brazil 2013 - Resumo
Agile Brazil 2013 - Resumo
 
Semanal fechada 6 ano
Semanal fechada 6 anoSemanal fechada 6 ano
Semanal fechada 6 ano
 
Introdução aos Servlets e JSPs
Introdução aos Servlets e JSPsIntrodução aos Servlets e JSPs
Introdução aos Servlets e JSPs
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java Enterprise
 
Repaso semanal aberta 2 6 ano
Repaso semanal aberta 2 6 anoRepaso semanal aberta 2 6 ano
Repaso semanal aberta 2 6 ano
 
Roteiro 6 ano
Roteiro 6 anoRoteiro 6 ano
Roteiro 6 ano
 
Certificações Java
Certificações JavaCertificações Java
Certificações Java
 
Padrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebPadrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações Web
 
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresPrincípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
 
Programação estruturada com Java-Aula01
Programação estruturada com Java-Aula01Programação estruturada com Java-Aula01
Programação estruturada com Java-Aula01
 
Programação "Estruturada" com Java
Programação "Estruturada" com JavaProgramação "Estruturada" com Java
Programação "Estruturada" com Java
 
No dumb questions (Stack Overflow em Português)
No dumb questions (Stack Overflow em Português)No dumb questions (Stack Overflow em Português)
No dumb questions (Stack Overflow em Português)
 
Aula diagramas de implementacao 3º periodo uniao
Aula diagramas de implementacao 3º periodo uniaoAula diagramas de implementacao 3º periodo uniao
Aula diagramas de implementacao 3º periodo uniao
 
Pensando TDD
Pensando TDDPensando TDD
Pensando TDD
 
Reengenharia de Software
Reengenharia de SoftwareReengenharia de Software
Reengenharia de Software
 
10 Boas Práticas de Programação
10 Boas Práticas de Programação10 Boas Práticas de Programação
10 Boas Práticas de Programação
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBC
 
Padrões no Desenvolvimento de Software
Padrões no Desenvolvimento de SoftwarePadrões no Desenvolvimento de Software
Padrões no Desenvolvimento de Software
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
A implantação da Computação em Nuvem na Administração Pública Federal - APF
A implantação da Computação em Nuvem na Administração Pública Federal - APFA implantação da Computação em Nuvem na Administração Pública Federal - APF
A implantação da Computação em Nuvem na Administração Pública Federal - APF
 

Semelhante a IBM Web Content Management - Melhores práticas

Roadshow Brasília Novas funcionalidades Liferay 6
Roadshow Brasília Novas funcionalidades Liferay 6Roadshow Brasília Novas funcionalidades Liferay 6
Roadshow Brasília Novas funcionalidades Liferay 6SEA Tecnologia
 
Faça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.cachingFaça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.cachingFabiano Weimar
 
Curso SEO Avancado - Digitalks
Curso SEO Avancado - DigitalksCurso SEO Avancado - Digitalks
Curso SEO Avancado - DigitalksRicardo T. Dias
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressJulian Fernandes
 
Html - capitulo 04
Html - capitulo 04Html - capitulo 04
Html - capitulo 04Alvaro Gomes
 
Apresentação Joomla! Day Brasília
Apresentação Joomla! Day BrasíliaApresentação Joomla! Day Brasília
Apresentação Joomla! Day Brasíliarafaelberlanda
 
LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3
LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3
LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3Fernando Fernández
 
PHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHPPHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHPFlávio Lisboa
 
Seo com Drupal - drupal camp lisboa 2011
Seo com Drupal -  drupal camp lisboa 2011Seo com Drupal -  drupal camp lisboa 2011
Seo com Drupal - drupal camp lisboa 2011introfini
 
Ai1415 ad-tp2-g4-a
Ai1415 ad-tp2-g4-aAi1415 ad-tp2-g4-a
Ai1415 ad-tp2-g4-amfsmsl
 
Criar um Site 2 Métodos 9 Passos Fáceis e Várias Dicas Incríveis GUIA COM...
Criar um Site 2 Métodos 9 Passos Fáceis e Várias Dicas Incríveis GUIA COM...Criar um Site 2 Métodos 9 Passos Fáceis e Várias Dicas Incríveis GUIA COM...
Criar um Site 2 Métodos 9 Passos Fáceis e Várias Dicas Incríveis GUIA COM...Anderson Ferro
 
Comade 2015 - SEO para migração de e-commerce
Comade 2015 - SEO para migração de e-commerceComade 2015 - SEO para migração de e-commerce
Comade 2015 - SEO para migração de e-commerceErick Formaggio
 
Microservices - Arquitetura, Ecossistema e Desafios
Microservices - Arquitetura, Ecossistema e DesafiosMicroservices - Arquitetura, Ecossistema e Desafios
Microservices - Arquitetura, Ecossistema e DesafiosRyan Padilha
 
Performance e otimização no wordpress
Performance e otimização no wordpressPerformance e otimização no wordpress
Performance e otimização no wordpressDaniel Paz
 
SEO x Migração de E-Commerce - Palestra F5 Abradirs
SEO x Migração de E-Commerce - Palestra F5 AbradirsSEO x Migração de E-Commerce - Palestra F5 Abradirs
SEO x Migração de E-Commerce - Palestra F5 AbradirsErick Formaggio
 
ficha de trabalho Tatiana.pptx
ficha de trabalho Tatiana.pptxficha de trabalho Tatiana.pptx
ficha de trabalho Tatiana.pptxFilipe Mendonça
 

Semelhante a IBM Web Content Management - Melhores práticas (20)

Roadshow Brasília Novas funcionalidades Liferay 6
Roadshow Brasília Novas funcionalidades Liferay 6Roadshow Brasília Novas funcionalidades Liferay 6
Roadshow Brasília Novas funcionalidades Liferay 6
 
Faça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.cachingFaça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.caching
 
Curso SEO Avancado - Digitalks
Curso SEO Avancado - DigitalksCurso SEO Avancado - Digitalks
Curso SEO Avancado - Digitalks
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPress
 
Html - capitulo 04
Html - capitulo 04Html - capitulo 04
Html - capitulo 04
 
Apresentação Joomla! Day Brasília
Apresentação Joomla! Day BrasíliaApresentação Joomla! Day Brasília
Apresentação Joomla! Day Brasília
 
LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3
LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3
LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3
 
Engenharia Web
Engenharia WebEngenharia Web
Engenharia Web
 
PHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHPPHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHP
 
Seo com Drupal - drupal camp lisboa 2011
Seo com Drupal -  drupal camp lisboa 2011Seo com Drupal -  drupal camp lisboa 2011
Seo com Drupal - drupal camp lisboa 2011
 
Ai1415 ad-tp2-g4-a
Ai1415 ad-tp2-g4-aAi1415 ad-tp2-g4-a
Ai1415 ad-tp2-g4-a
 
Novas Funcionalidades Liferay 6
Novas Funcionalidades Liferay 6Novas Funcionalidades Liferay 6
Novas Funcionalidades Liferay 6
 
Criar um Site 2 Métodos 9 Passos Fáceis e Várias Dicas Incríveis GUIA COM...
Criar um Site 2 Métodos 9 Passos Fáceis e Várias Dicas Incríveis GUIA COM...Criar um Site 2 Métodos 9 Passos Fáceis e Várias Dicas Incríveis GUIA COM...
Criar um Site 2 Métodos 9 Passos Fáceis e Várias Dicas Incríveis GUIA COM...
 
Comade 2015 - SEO para migração de e-commerce
Comade 2015 - SEO para migração de e-commerceComade 2015 - SEO para migração de e-commerce
Comade 2015 - SEO para migração de e-commerce
 
Microservices - Arquitetura, Ecossistema e Desafios
Microservices - Arquitetura, Ecossistema e DesafiosMicroservices - Arquitetura, Ecossistema e Desafios
Microservices - Arquitetura, Ecossistema e Desafios
 
Performance e otimização no wordpress
Performance e otimização no wordpressPerformance e otimização no wordpress
Performance e otimização no wordpress
 
Aula 05 - Java Script Básico
Aula 05 -  Java Script BásicoAula 05 -  Java Script Básico
Aula 05 - Java Script Básico
 
SEO x Migração de E-Commerce - Palestra F5 Abradirs
SEO x Migração de E-Commerce - Palestra F5 AbradirsSEO x Migração de E-Commerce - Palestra F5 Abradirs
SEO x Migração de E-Commerce - Palestra F5 Abradirs
 
ficha de trabalho Tatiana.pptx
ficha de trabalho Tatiana.pptxficha de trabalho Tatiana.pptx
ficha de trabalho Tatiana.pptx
 
Projeto website
Projeto websiteProjeto website
Projeto website
 

IBM Web Content Management - Melhores práticas

  • 1. IBM Web Content Management Melhores Práticas Rodrigo Reis IT Specialist & Application Architect IBM Collaboration Services
  • 2. 2 Agenda ● Introdução ● Melhores Práticas ● WCM e Java Server Pages ● WCM API (Application Program Interface)
  • 4. 4 Introdução ● Este workshop não é de introdução ao IBM Web Content Management ● Necessário conhecimento básico de Programação Web (JSP, HTML), IBM WebSphere Portal e IBM Web Content Management ● O projeto de um site com IBM WCM é similar ao de qualquer outro site ou sistema Web. Algumas práticas mencionadas aqui não são exclusivas do IBM WCM
  • 6. 6 Melhores Práticas ● Antes de Iniciar ● Criação de Conteúdo ● Projetos ● Busca ● Syndication ● Performance ● Administração ● Explorando Assets
  • 7. 7 Melhores Práticas: Antes de Iniciar A importância do planejamento ● Planejar é perda de tempo? ● Planejar é uma conta que sempre teremos de pagar ● Planejar não é garantia de ter um produto de qualidade ● Em média apenas 30% dos projetos são entregues no prazo
  • 8. 8 Melhores Práticas: Antes de Iniciar No desenvolvimento do projeto, as seguintes áreas devem estar bem documentadas: ● Necessidade de negócio, modelo operacional, objetivo inicial e a longo prazo ● Usuários e seus objetivos ● Site Framework e arquitetura da informação ● Taxonomia ● Modelos de Workflow ● Arquitetura de Bibliotecas ● Definição de modelos de Autoria e Apresentação * Não são especificos do Web Content Management, mas devem ser conhecidos antes de iniciar a implementação do projeto
  • 9. 9 Melhores Práticas: Antes de Iniciar ● Arquitetura de Deployment ● Modelo de Segurança ● Suporte a múltiplos idiomas e acessibilidade ● Requerimentos de Personalização ● Integração com outros produtos ● Busca
  • 10. 10 Melhores Práticas: Antes de Iniciar Gestão do conhecimento ● Manter os assets de projeto atualizados ● Disseminação da informação ✔ Descrição do projeto ✔ Membros e responsabilidades ✔ Documentos (arquitetura, técnicos, manuais, etc) ✔ Links internos e externos ✔ Detalhamento dos processos (Build, Deploy, Defects, ...) ✔ Cronograma ● Utilizar ferramentas de apoio
  • 11. 11 Melhores Práticas: Antes de Iniciar Por que ter um ambiente de autoria? ● Evitar inserir erros diretamente em produção ● Segurança, garantir que conteúdos críticos não serão acidentalmente modificados ● Visualizar alterações antes de publicar ● Aprovar alterações antes de publicar ● Agendar quando alterações serão publicadas
  • 12. 12 Melhores Práticas: Criação de Conteúdo ● Planejar a criação de conteúdo Garantir que o Site terá conteúdo suficiente para testes e publicação ● Criar Grupos de acesso Evitar assim adicionar acesso à usuários diretamente em conteúdo e componentes ● Criar Bibliotecas de Conteúdo Não é recomendado utilizar a biblioteca padrão. Ao invés disso crie suas próprias bibliotecas ● Evitar espaços e caracteres especiais no nome de bibliotecas Não nomear biblioteca com mesmo nome de um portal virtual
  • 13. 13 Melhores Práticas: Criação de Conteúdo ● Use bibliotecas de forma eficiente Por exemplo, divida seu site em uma biblioteca de conteúdo e outra de componentes ● Ao criar bibliotecas, defina as permissões à biblioteca e tipos de recurso Para por exemplo, permitir criadores de conteúdo ver conteúdo e ocultar deles todos recursos administrativos ● Quando mover conteúdo entre bibliotecas é recomendado usar a função Mover A função Mover irá atualizar qualquer referência ao item movido
  • 14. 14 Melhores Práticas: Criação de Conteúdo ● Defina um padrão de nomenclatura para todos tipos de elementos Ajuda a manter a organização e localizar facilmente elementos ● Considere a utilização de um prefixo de biblioteca Quando trabalhando com mais de uma biblioteca ● Crie componentes reutilizáveis Exemplos: header e footer, layouts de menu e navigator, javascript, … ● Use o componente CSS Exemplo: Um campo Rich Text pode ser configurado para usar um CSS
  • 15. 15 Melhores Práticas: Criação de Conteúdo ● Use o Inline editing para editar e criar conteúdo diretamente na página É recomendado utiliza-lo apenas em ambiente de autoria para evitar conflitos de syndication ● Defina conteúdo padrão para Site Areas Considere bloquear o conteúdo padrão para prevenir ele de ser excluído ou modificado Se um conteúdo padrão não for definido, o primeiro conteúdo da Site Area será exibido ● Evite um número excessivo de portlets Web Content View numa mesma página Matenha um número menor que 5, que está de acordo com as melhores práticas do WebSphere Portal
  • 16. 16 Melhores Práticas: Criação de Conteúdo ● Não utilize nomes longos (>50 caracteres) para Site Areas e Content São utilizados na construção de URLs ● Não utilize IDs de elementos e espere integridade IDs são ponteiros internos e podem ser atualizados ● Não modifique arquivos Java e JSP do produto Não irá obter suporte e perderá as modificações quando aplicar um fix ou atualização
  • 17. 17 Melhores Práticas: Projetos ● Projetos agrupam alterações que você e outros usuários estão fazendo ● Itens de projeto são isolados do site publicado e de outros projetos ● Itens individuais em um projeto não são visíveis no site publicado até o projeto inteiro ser publicado ● Todos itens de um projeto podem ser pré-visualizados juntos antes da publicação
  • 18. 18 Melhores Práticas: Projetos Mudanças em um site são isoladas das operações diárias ● Mude a estrutura e layout do site ● Adicione novas Site Areas ● Marque elementos de design ou conteúdo para exclusão ● Teste a apresentação dos elementos de design no contexto do site real
  • 19. 19 Melhores Práticas: Projetos Desenvolvedores podem coordenar grandes mudanças em um site sem impactar nenhum visitante ou criador de conteúdo
  • 20. 20 Melhores Práticas: Busca de conteúdo ● Entender o que é requerido pela busca ✔ Qual conteúdo será buscado? ✔ Onde está armazenado? ✔ Quanto conteúdo existe e quais os formatos? ✔ Quais campos serão pesquisados? ✔ Qual formato da query? ✔ Como os resultados serão exibidos? ● Conhecer o perfil dos usuários Não crie um sistema de busca avançado se seus usuários nunca irão utilizar. A busca deve ser simples e fácil de usar
  • 21. 21 Melhores Práticas: Busca de conteúdo ● Buscar conteúdo seguro A segurança estará garantida desde que o acesso esteja definido para Apenas usuários autenticados ● Considerar a utilização de ferramentas de busca externas Se seus requerimentos de busca são extensos, é recomendado integrar uma ferramenta de busca externa ● Não escreva um mecanismo de busca usando API só porque você pode Se o Portal não atende os requerimentos, considere uma ferramenta externa antes de tentar usar a API
  • 22. 22 Melhores Práticas: Syndication ● Configure servidores de Delivery como Subscribe Only Interrompe tarefa de monitoramento que busca de itens para ser sindicados ● Escolha o tipo Live Items quando sindicando para servidores de produção A menos que se tenha uma necessidade especifica, como conteúdo podendo ser modificado diretamente em Delivery ● Permissões de acesso a bibliotecas não são sindicados Defina o acesso à biblioteca manualmente após a primeira sindicância ou alterações subsequentes
  • 23. 23 Melhores Práticas: Syndication ● Sindicar todas bibliotecas necessárias Se um conteúdo na biblioteca A faz referência a um componente na biblioteca B, ambas devem estar incluídas no mesmo syndicator ● Aumente a frequência de sindicância Em ambientes de testes, por exemplo, 20 minutos ou mais pode ser um intervalo mais apropriado
  • 24. 24 Melhores Práticas: Performance ● Evite ter uma Homepage com tamanho superior a 80Kb Verifique se todos componentes da página estão otimizados (imagens com qualidade em 60%, css e javascript minificados, etc). ● Garanta que todos componentes de Menu e Navegação estão otimizados Evite vários critérios de busca ● Otimize Modelos de Autoria Para um melhor desempenho, é recomendado limitar o número de elementos (menor que 15) ● Garanta que os servidores LDAP estão otimizados Uso de grande número de atributos e queries mal formadas degradam a performance
  • 25. 25 Melhores Práticas: Performance ● Garanta que o Portal Server está otimizado JVM, Aplicativos rodando, etc ● Garanta que o HTTP Server está otimizado Cache, compressão, etc ● Monitore e resolva todos erros encontrados nos logs do Portal Excessões de aplicativos, segurança, componentes ausentes, etc ● Defina uma política de cache Use Pre-Rendering, Servlet-Caching (ex. Dynacache) ou Web Content Management Caching
  • 26. 26 Melhores Práticas: Performance ● WCM Caching A performance do WCM varia de acordo com o tipo de cache selecionado BASIC - É o tipo de cache mais simples, a primeira vez que a pagina é renderizada pelo WCM é armazenada em cache e então todos usuários irão acessar o mesmo conteúdo até que ele expire. Logo não pode ser usado para site com conteúdos personalizados SITE - Igual ao BASIC, exceto pelo fato que podemos usar connect tags para sobrescrever o cache default. Não pode ser usado para site com conteúdos personalizados
  • 27. 27 Melhores Práticas: Performance SECURED - Neste tipo de cache usuários que têm configurações de grupo idênticas acessam os mesmos itens em cache. Recomendado para sites personalizados onde acesso a diferentes páginas da Web e componentes WCM são baseados em grupos PERSONALIZED - Aqui usuários que compartilham o mesmo perfil de personalização acessam os mesmos itens em cache. Recomendado para sites que utilizam regras de personalização baseadas em perfis USER - Para este cache, uma cópia de cada página que o usuário visita é armazenada no cache de usuário. Recomendado quando não podemos usar regras de personalização baseadas em perfis ou via grupos de acesso SESSION - Uma cópia de cada página que o usuário visita é armazenado no cache de sessão. Possui pior performance de todos os tipos de cache, não recomendado o uso, são ser que realmente necessário
  • 28. 28 Melhores Práticas: Performance ● Connect tag Cache personalizado pode ser aplicado a componentes do WCM dentro de modelos de apresentação para especializar o tipo de cache <connect SRV="cmpnt" PATH="/libraryname/Site/SiteArea/Content" SOURCE="library" CMPNTNAME="TestNav" CONTENTCACHE="site" EXPIRES="REL 9000s"> </connect>
  • 29. 29 Melhores Práticas: Administração ● Tenha uma estratégia de backup ativa Sempre teste o backup e restore e verifique se todos itens estão no backup ● ● Monitore o site “Recommended fixes and updates for WebSphere Portal” Verifique a lista de fixes recomendados e teste antes de distribuir em todos ambientes ● Otimize o banco de dados JCR Periodicamente otimize índices e tabelas do banco que armazena todos dados do Web Content Management
  • 30. 30 Melhores Práticas: Administração ● Não habilite traces e deixe eles lá Traces devem ser usados para monitorar pontualmente um problema, sua ativação degrada a performance ● Monitore, Monitore, Monitore Monitore uso de CPU, Memória, Rede e outros elementos dos servidores LDAP, HTTP, Banco de Dados e WebSphere
  • 31. 31 Melhores Práticas: Explorando Assets ● Por que reinventar da roda? Muitos Assets disponíveis no site IBM Collaboration Solutions Catalog ● Exemplos de Assets voltados para WCM ✔ Content Template Catalog (CTC) É um conjunto de melhores práticas e modelos que aceleram a construção de um website ✔ IBM Support Tool for WCM Inclui uma variedade de ferramentas que são úteis na solução de problemas relacionados com conteúdo ✔ Web Content Manager Social Media Publisher Extensão para WCM que permite às empresas promover o seu conteúdo web em redes sociais (bem como fornecer algumas estatísticas básicas sobre o conteúdo promovido)
  • 32. 32 WCM e Java Server Pages
  • 33. 33 WCM e Java Server Pages: TagLib ● São utilizadas para ter acesso facilitado a componentes e conteúdos do WCM ● Podem ser utilizadas no componente JSP ou em páginas JSP Dentro de uma página JSP o suporte é incluído com o seguinte código: <%@ taglib uri="/WEB-INF/tld/wcm.tld" prefix="wcm" %>
  • 34. 34 WCM e Java Server Pages: TagLib ● InitWorkspace - Utilizado para inicializar a workspace <wcm:initworkspace username=" " password=" " > [Error Message] </wcm:initworkspace> ● Explicit Context - Define explicitamente o contexto atual <wcm:setExplicitContext wcmWebAppPath=" " wcmServletPath=" " path=" " > [Error Message] </wcm:setExplicitContext>
  • 35. 35 WCM e Java Server Pages: TagLib ● Context Retrieval - Define o contexto baseado numa localização na forma de url <wcm:setContext location=" " wcmWebAppPath="" wcmServletPath="" param=" " > [Error Message] </wcm:setContext> ● libraryComponent - Renderiza o componente de uma biblioteca <wcm:libraryComponent name=" " > [Error Message] </wcm:libraryComponent>
  • 36. 36 WCM e Java Server Pages: TagLib ● content - Renderiza o conteúdo baseado no contexto atual <wcm:content pageDesign=" " > [Error Message] </wcm:content> ● contentComponent - Renderiza o elemento de uma Site Area ou Conteúdo atual <wcm:contentComponent type=" " key=" " > [Error Message] </wcm:contentComponent> Melhor prática: - Se for adicionar suporte a múltiplos idiomas no tratamento de erros, considere o uso de Java Resource Bundles
  • 37. 37 WCM e Java Server Pages: Exemplo TagLib <%@ taglib uri="/WEB-INF/tld/wcm.tld" prefix="wcm" %> <html> <head> <title>Testando IBM Workplace Web Content Management JSP</title> </head> <body> <wcm:initworkspace username=“wpsadmin" password="password" > initworkspace falhou!<br> </wcm:initworkspace> <wcm:setExplicitContext path="Showcase/Showcase+Internal+Site/News/" > Explicit Context falhou!<br> </wcm:setExplicitContext>
  • 38. 38 WCM e Java Server Pages: Exemplo TagLib <wcm:libraryComponent name=“SC Menu News"> Component falhou!<br> </wcm:libraryComponent> <wcm:content> Content falhou!<br> </wcm:content> <wcm:contentComponent type="content" key=“SC Body" > Content Component falhou!<br> </wcm:contentComponent> </body></html>
  • 39. 39 WCM e Java Server Pages: Remote Actions ● Usando Remote Actions <a href="?wcmAuthoringAction=<action>">Text</a> ● Ações disponíveis ● Approve ● Decline ● Delete ● Edit ● Read ● Openmainview ● New
  • 40. 40 WCM e Java Server Pages: Remote Actions ● Approve, decline, delete, edit, read: Exemplo, aprovar e rejeitar um item do workflow: ?wcmAuthoringAction=approve&docid=ID1 ?wcmAuthoringAction=decline&docid=ID1&docid=ID2 ● openmainview: Usado para abrir uma janela com o portlet de autoria: ?wcmAuthoringAction=openmainview&view=contentbysitearea Parametros: contentbysitearea, contentbytitle, myrecentmydraft, mypendingapproval, mypublished, myexpired, mydeleted, alldraftitems, allexpireditems, allpublisheditems, alldeleteditems, componentsbytype
  • 41. 41 WCM e Java Server Pages: Remote Actions ● new: ✔ Usado para abrir o formulário de novo item: ?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.* Parametros: Nome das classes dentro do pacote com.ibm.workplace.wcm.api.<Name> ✔ Para novo conteúdo é possível especificar o template de autoria: wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_C ontent?atid=ID ✔ Para novos Site Areas, Conteúdo e Categorias é possível especificar o pai do novo item: wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_S iteArea?pid=ID
  • 42. 42 WCM e Java Server Pages: Remote Actions <table> <tr><td> <a href="? wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Content"> Criar novo Conteúdo</a> </td></tr> <tr><td> <a href="?wcmAuthoringAction=openmainview&view=contentbytitle"> Abrir conteúdo por título</a> </td></tr> <tr><td> <a href="?wcmAuthoringAction=openmainview&view=contentbysitearea"> Abrir conteúdo por site area</a> </td></tr> </table>
  • 43. 43 WCM e Java Server Pages: Componente JSP ● Utiliza uma página JSP existente no servidor Pode conter TagLibs do WCM ou código WCM API ● Podem ser integradas a qualquer Template de Apresentação como componente
  • 44. 44 WCM e Java Server Pages: Componente JSP Armazenando páginas JSP ✔ Para uso no Portlet de Autoria (como Pagina de Ativação, Editor de Texto ou JSP para Template de Autoria) <portal_server_root>/installedApps/PA_WCM_Authoring_UI/ilwwcm- authoring.war/jsp/html ✔ Para uso genérico (em tema, portlets, etc), crie um WAR para armazenar a página Melhores práticas: - A sindicância não irá mover as páginas JSP referenciadas em componentes JSP - Instalação de fixes pode remover arquivos JSP do portlet de Autoria
  • 45. 45 WCM e Java Server Pages: Página de Ativação ● Criar um interface de autoria simples e com as ações mais comuns ● Restringir acesso a estrutura da biblioteca de conteúdo ● Pode utilizar TagLib, Remote Actions e código Java
  • 47. 47 WCM API: Introdução A API publica do WCM é focada no processamento de conteúdo ● Bibliotecas de Conteúdo Criar, Excluir, Mover ou copiar items entre bibliotecas ● Busca Localizar itens por: nome ou tipo, conteúdo modificados a partir de uma data, por template de autoria, categoria, caminho ou status de workflow ● Recuperar itens por ID ● Criar, excluir e salvar os seguintes itens: Content, Site Areas, File Resource, HTML, Image, Date and Time, Link, Number, Style Sheet or User Selection ● Aprovar ou Rejeitar contéudo em um estágio de workflow
  • 48. 48 WCM API: Obtendo Workspace <%@ page import="com.ibm.workplace.wcm.api.*" %> <% // Declara Workspace e Inital Context InitialContext ctx = null; Workspace workspace = null; // Recupera o servico WebContentService usando JNDI WebContentService webContentService = (WebContentService) ctx.lookup("portal:service/wcm/WebContentService"); //Obtem Workspace para o usuario autenticado Workspace = webContentService.getRepository().getWorkspace(); //Trabalha com a workspace … %>
  • 49. 49 ● Outros metódos para obter Workspace  getSystemWorkspace() Retorna a Workspace representando a visão do sistema  getAnonymousWorkspace() Retorna a Workspace para um usuário anônimo  getWorkspace(java.security.Principal principal) Retorna a Workspace para um usuário especifico Melhor prática: - Finalizar uma workspace apenas dentro de um JSP fora do WCM: endWorkspace() WCM API: Obtendo Workspace
  • 50. 50 Melhor prática: - Obter uma workspace do WCM é uma operação extensa, considere salvar a workspace do usuário atual para melhor performance <%@ page import="com.ibm.workplace.wcm.api.*" %> <% // Cria WCM Workspace (ira salvar na sessao automaticamente) %> <wcm:initworkspace user="<%= request.getUserPrincipal() %>" > <% // Obtem workspace armazenada na sessao Workspace usersWorkspace = (Workspace) pageContext.getAttribute(Workspace.WCM_WORKSPACE_KEY); //Trabalha com a workspace … %> WCM API: Usando cache
  • 51. 51 Melhor prática: - Também é possível armazenar a workspace usando um Sigleton public static Workspace getSystemWorkspaceInstance(){ if(ws == null) ws = getSystemWorkspace(); return ws; } Melhor prática: - Coloque funcionalidades comuns dentro de um JSP ou classe utilitária. Assim você poderá alterar funcionalidades comuns em apenas um lugar e refletir em todos locais que o utilizam WCM API: Usando cache
  • 52. 52 WCM API: Criando conteúdo ● workspace.createContent – cria um novo objeto Content baseado numa template de autoria e site area Exemplo: Criando e salvando um conteúdo ... //Cria um conteudo vazio Content newContent = workspace.createContent(authoringTemplate, parentSiteArea, null, ChildPosition.END); //Define o nome do conteudo newContent.setName("Travel - Be the first tourist on the moon"); //Salva do conteudo workspace.save(newContent); ...
  • 53. 53 WCM API: Localizando elementos //Obtem biblioteca de documentos DocumentLibrary documentLibrary = workspace.getDocumentLibrary("content"); //Define biblioteca de documento para trabalhar na sessao workspace.setCurrentDocumentLibrary(documentLibrary); //Recupera SiteArea pai DocumentIdIterator parentIter = workspace.findByName(DocumentTypes.SiteArea, ”Travel"); DocumentId parentSiteArea = null; if(parentIter.hasNext()) { parentSiteArea = parentIter.nextId(); } //Recupera o Template de Autoria DocumentIdIterator authoringIter = workspace.findByName(DocumentTypes.AuthoringTemplate, "Article"); DocumentId authoringTemplate = null; if(authoringIter.hasNext()) { authoringTemplate = authoringIter.nextId(); } ...
  • 54. 54 WCM API: Exemplo de workflow ... //Localiza conteudo usando findByName DocumentIdIterator contentIter = workspace.findByName(DocumentTypes.Content, "Lista de Aplicativos"); DocumentId contentId = null; if(contentIter.hasNext()) { contentId = contentIter.nextId(); } //Recupera conteudo usando getById Content content = (Content)workspace.getById(contentId); //Move conteudo para proximo estagio de workflow content.nextWorkflowStage(); //Salva conteudo workspace.save(content); ...
  • 55. 55 WCM API: Busca de conteúdo ● workspace.contentSearch – retorna todos documentos que satisfazem os critérios de busca public com.ibm.workplace.wcm.api.DocumentIdIterator contentSearch (com.ibm.workplace.wcm.api.DocumentId templateId, com.ibm.workplace.wcm.api.DocumentId[] siteAreaIds, com.ibm.workplace.wcm.api.DocumentId[] categoryIds, java.lang.String[] keywords, boolean matchAllKeys *) * Opcional ● O método contentSearch() se comporta de maneira similar ao componente de Menu ● Se Site Area forem especificadas, todos ascendentes e descendentes serão incluídos ● A ordem dos resultados não é garantida Melhor prática: - Apenas utilizar contentSearch se não for possível usar o componente Menu
  • 56. 56 WCM API – Outras opções de busca Workspace.findContentByAuthoringTemplate Workspace.findContentByCategory Workspace.findContentByWorkflowStage Workspace.findByType Workspace.findContentByPath Workspace.findContentModifiedBetween Workspace.findContentModifiedSince Workspace.findByPath Workspace.findContentByWorkflowStage
  • 57. 57 WCM API – Estendendo o uso da API ● Estender e integrar o Web Content Management com aplicações externas via JMS (Java Messaging Service) ● Query API ● Rendering Plugin Extension Point ● Text Provider Extension Point
  • 58. 58 WCM API – JMS & WCM ● Mensagens JMS podem ser publicadas para: Autoria: Criar, Atualizar, Mover, Excluir Sindication: Iniciar, Parar Pre-Rendering: Iniciar, Parar ● Mensagens contem todas informações relevantes para eventos: Atualizar Item: ItemState Status do Item DocId UUID do item que foi atualizado DocName Nome do item que foi atualizado DocType Tipo, nome da classe API do item LibraryId Id da biblioteca que contem o item LibraryName Nome da biblioteca que contem o item
  • 59. 59 WCM API – Query API ● Criar queries escaláveis para qualquer item armazenado no WCM ● Resultados podem ser ordenados e paginados Os seguintes parametros podem ser combinados para compor as queries: Tipo do Item Criador Data Expiração Id do Item Autor Data Publicação Nome do Item Proprietário Workflow Titulo do Item Modificado por Estágio Workflow Biblioteca Criado Desde Status Workflow Status Projeto Modificado Desde Palavras chaves Categorias ● Resultados de uma query pode ser ordenado por: Autor Titulo do Item Data Criação Nome do Item Data Modificação
  • 60. 60 WCM API: Exemplo de Query API //Obtem QueryService a partir da Workspace e cria query QueryService queryService = getWorkspaceInstance().getQueryService(); Query query = queryService.createQuery(Folder.class); //Obtem biblioteca de documentos a ser pesquisada DocumentLibrary library = getWorkspaceInstance().getDocumentLibrary(“Biblioteca”); //Define parametros de pesquisa query.addSelector(Selectors.libraryEquals(library)); query.addSelector(HistorySelectors.modifiedSince(oneWeekAgo())); query.addSort(Sorts.byDateModified(SortDirection.DESCENDING)); //Executa query e armazena resultados ResultIterator results = null; results = queryService.execute(query);
  • 61. 61 WCM API – RenderingPlugin Extension Point ● Permite criar novos componentes de renderização Java Web App que implementa RenderingPlugin e contem um descritor plugin.xml ● Pode declarar plugins dentro de HTML ou campos RichText [Plugin:{Nome do Plugin}] ● Plugins podem ter tags de abertura e fechamento e opcionalmente renderizar conteúdos dentro da tag [Plugin:{Nome do Plugin}] [Component name=”Algum componente"] [/Plugin:{Nome do Plugin}]
  • 62. 62 WCM API – RenderingPlugin Extension Point ● Plugins podem ter múltiplos parametros. Parametros podem ter múltiplos valores [Plugin:{Nome do Plugin} param1=”val1” param2=”val2” param3=”val3”] ● O valor de um parametro pode ser o resultado de outra tag WCM [Plugin:MyRenderingPlugin encode="false“ key="ARTICLE_1“ title="[Property context='current' type='content' field='title']"] Exemplos de uso: ● Incluir vídeos ● Conteúdo dentro de conteúdo ● Integrar com uma ferramenta como Velocity
  • 63. 63 WCM API – Text Provider Extension Point ● Permite a localização de campos na interface de autoria Java Web App que implementa TextProvider e contem um descritor plugin.xml ● Campos localizados são exibidos em formulários e exibições ● Campos que podem ser localizados Elementos no Template de Autoria Titulo de Exibição Descrição Campos de Ajuda
  • 64. 64 WCM API – Quando usar JSP e API? ● Usar conteúdo dentro de outros portlets ● Acessar funcionalidades do Portal dentro do WCM ● Layouts não possíveis usando componentes padrões do WCM ● Importa conteúdo ou recurso Web de outras fontes ● Publicação automática de conteúdo do WCM ● Intregação de conteúdo com sistemas externos ● Enfim, quando quiser ir além do que o WCM oferece no portlet de autoria
  • 65. 65 Informações adicionais IBM Web Content Management Home Page http://www.ibm.com/software/lotus/products/webcontentmanagement/ IBM Web Content Management Information Center documentation http://www-10.lotus.com/ldd/portalwiki.nsf/xpDocViewer.xsp? lookupName=IBM+Web+Content+Manager+7+Product+Documentation#action= openDocument&content=catcontent&ct=prodDoc Java doc for IBM Web Content Management 7 API http://public.dhe.ibm.com/software/dw/lotus/portal_javadoc/7/lwcm/api- javadoc/index.html IBM Collaboration Solutions Catalog https://greenhouse.lotus.com/catalog/
  • 66. 66 Referências ● What’s NEW and HOT in Portal WCM 7 - Stuart Crump ● ICS TechTalk: Making Your Content More Social with IBM Web Content Manager's Content Template Catalog v3 - Herbert Hilhorst, Chris Berry ● IBM Workplace Web Content Management: API Development Best Practices - Herbert Hilhorst ● Best Practices for using IBM Workplace Web Content Management V6.0 - David De Vos, Melissa Howarth
  • 67. © 2013 IBM Corporation Obrigado!!! Rodrigo Reis rodrigoareis@br.ibm.com IT Specialist & Application Architect IBM Software Services for Collaboration