Meet-ups Brazil: Padrões de Gerenciamento de Conteúdo / Patterns in Content Management

Preview:

DESCRIPTION

An introduction to patterns for building content applications using the CMIS API. Uma introdução aos padrões pelo gerenciamento de conteúdo usando o API de CMIS.

Citation preview

Padrões de Gerenciamento de Conteúdo

Richard Esplin

Community Technology

O Banco de Dados Relacional Não Vai Ser Adequado

Richard Esplin

Community Technology

A dor dos documentos . . .

O banco de dados não faz tudo

● Faz bem o texto e os números, mas não faz bem os dados binários

● Faz bem as definições das tabelas estáticas, mas não das definições dinâmicas

● Limitação de tamanho● Acesso aleatório (faz streaming)● Busca: Algumas fazem indexação dos arquivos

binários, mas não todos

Vamos construir!

Pasukaru76 (cc attribution) http://www.flickr.com/photos/pasukaru76/4277763808/

Opções de armazenar os arquivos

● No disco● Amazon S3 ou uma CAS filer no local● Repositório de gerenciamento do código● Um banco de dados de XML● Armazenador dos documentos de NoSQL

Ao salvar os arquivos . . .

● Segurança● Iniciar um workflow● Versionamento● Replicação● Transformação de conteúdo● Programar um job● Acesso através do disco compartilhado● Acesso aos APIs● Integração com ferramentas

Muito código personalizado!

O cenário otimista:

gobucks2 (cc attribution non-commercial share-alike) http://www.flickr.com/photos/69331170@N00/2854583096

O cenário pessimista:

http://commons.wikimedia.org/wiki/File:Professor_Lucifer_Butts.gif

Guardanapo que funciona por si mesmo

Padrões Recomendados: A Plataforma

A plataforma

● Os problemas comuns já foram resolvidos● Plataforma de Conteúdo = Repositório + Serviços

● Busca a plataforma certa● Personaliza a plataforma com suas regras de empresa● Personaliza a interface usuária fornecida pela plataforma● Ou escreva sua própria interface usando qualquer

linguagem ou framework

● Garanta que atenda às suas necessidades agora e também no futuro

Partes dos sistemas de conteúdo● Interface usuário● Armazenamento /

Modelo dos Dados / Metadata

● Processo de Empresa / Workflow

● Serviços de Biblioteca (Upload / Download, Versionamento, Check-in / Check-out)

● Segurança● Search● Scheduler

● Transformação / Renderização / Miniaturas

● Marcação / Categorização● Integração com

Ferramentas dos Autoria● API Remoto● Transferência /

Publicação● Comentários● Notas● Activity Streams /

Notification● Quotas

Alfresco API

●O API fundamental de Alfresco é de Java●Também tem a opção de JavaScript no server●APIs remotos

● Webscripts de HTTP REST - Java ou JavaScript● CMIS - REST Atom ou SOAP● Alfresco Serviços de Web

Source: 96dpi

Arquitetura de Alfresco

Aplicações de Web Portais de Conhecimento Serviços de Web

Sistema Virtualdos Arquivos

Alta Avaliabilidade

Motor dosProcessos daEmpresa

CRM

Portal Server

Servidorde Apps

Desktop

Mobile

Social Media Channels

Web Services Public Alfresco Cloud

Corporate Systems

Open Web APIs

CMISJSR-168

Connectors

WebDAVCMISCIFS

SharePointProtocol

Open WebAPIsCMIS

CMIS-basedAlfresco Sync

CMISWebDAV

e

O que é o CMIS?

● Content Management Interoperability Services

● Um API especifico pelo gerenciamento do conteúdo, independente da linguagem, independente do fornecedor

● Denominador comum menor (alguns fornecedores têm extensões)● Funções de CRUD pelas nodas● Check-in / check-out● Associações● Permissões (Listas de controle de acesso)● Politica● Consultas● Atravessar o Repositório

O que é o CMIS? (continuação)

● Padrão do OASIS● 30+ fornecedores de ECM prometem implementar

● Duas partes● Ligações de SOAP e de AtomPub

– Ligações de JSON em breve● Linguagem baseada nas consultas do SQL

● As extensões especificas ao Alfresco ajudam muito

Casos de uso

● Criação colaborativa de conteúdo

● Portais

● Integração com os aplicativos do cliente

● Mashups

● Repositório de conteúdo incorporado

Cliente

Repositório de Conteúdo

Repositório de Conteúdo

Repositório de Conteúdo

Cliente

Content RepositoryContent

RepositoryRepositório de Conteúdo

● Workflow & BPM● Arquivamento● Geração dos documentos● Digital Asset Management (DAM)● Web Content Mangaement (WCM)

A beleza do CMIS

?

Nível de Apresentação

Nível dos Serviços de Conteúdo

?Nível das Aplicações de

Empresa

REST SOAP

Conheça o CMIS

Cliente

Repositóriode Conteúdo

Serviços

Modelo dedomínio

ler escrever

Con

sum

ad

or

Forn

ec e

dor

Mapiagem do Fornecedor

ContentManagementInteroperabilityServices

Com o CMIS pode ler, buscar, escrever, actualizar, excluir, dar versão, e gerenciar o conteúdo e a metadata!

Tipos

Documentos● Conteúdo● Rendições● História das versões

Pasta● Recipiente● Hierarquia● Arquivamento / Limadura

Relação● Objeto de Origem● Objeto de Destino

ACL● Objeto de Destino

Descrito pelas Definições dos Tipos

Política● Objeto de Destino

Definições dos Tipos

*

Custom Type

Object● Type Id● Parent● Display Name● Queryable● Controllable

Document● Versionable● Allow Content

Folder Relationship● Source Types● Target Types

Policy

Property● Property Id● Display Name● Type● Required● Default Value● …

Apache Chemistry● Uma implementação de CMIS de código aberto

● O projeto que agrupo todos os projetos relacionados ao CMIS dentro de ASF● OpenCMIS (Java, client, e servidor)● cmislib (Python, client)● phpclient (PHP, client)● DotCMIS (.NET, client)

● Implementação de referencia pelo CMIS que é usado pelo comité técnico de CMIS para provar as partes novas de versão 1.1.

Exemplos

Meu ambiente

● Debian Mint Wheezy● OpenJDK 1.6.0_24● Python 2.7.2● Alfresco Community Edition 4.0.d● Open CMIS Workbench 0.7.0

CMIS Workbench

● Baixar● http://chemistry.apache.org/java/developing/tools

/dev-tools-workbench.html● Ligar ao Alfresco

● http://localhost:8080/alfresco/cmisatom● Uma ferramente boa para aprender sobre o

CMIS● Confira o Groovy Console!

Python● No shell:

virtualenv . ./bin/easy_install cmislib ./bin/python

from cmislib.model import CmisClient client = CmisClient( "http://192.168.56.1:8080/alfresco/cmisatom","admin", "admin") repo = client.defaultRepository repo.id repo.name for (k,v) in repo.getCapabilities().iteritems(): print "%s: %s" %(k,v)

for (k,v) in repo.getRepositoryInfo().iteritems(): print "%s: %s" %(k,v)

root = repo.getRootFolder() root.name folder = root.createFolder('cmis-demo') folder.id folder.name for (k,v) in folder.properties.iteritems(): print "%s: %s" %(k,v)

● Continuação:

props = {}props["cmis:objectTypeId"]="cmis:document"doc = folder.createDocumentFromString('testdoc.txt', props, contentString="This is a test showing how to create a text document", contentType='text/plain')doc.isCheckedOut()props = {}props['cmis:name'] = "test-updated.txt"doc = doc.updateProperties(props)doc.namedoc.delete()len(folder.getChildren())result = repo.query("select * from cmis:folder where cmis:name like '%alf%'")len(result)for i in result: print i.name

result = repo.query("select * from cmis:document where contains('name')")for i in result: print i.name

Aonde pode aprender mais

● cmis.alfresco.com é um servido público de CMIS e contém links aos recursos CMIS (o cheat sheet é ótimo!)

● Pode ler o especificação de CMIS● O site de Apache Chemistry tem clientes, um servidor

pequeno, e documentação● O tutório “Getting Started with CMIS” demonstra como

usar "cURL para acessar diretamente as ligações de AtomPub"

● Há presentações do Alfresco DevCon 2011 sobre o CMIS no Slideshare aqui e aqui

Perguntas?

Atribuição e licenciamento

● Copyright 2012, Alfresco Software● Imagens usado nesta presentação sob a licença

de Creative Commons by-attribution non-commercial share-alike.

● O trabalho original nesta presentação é sob a licença de Creative Commons by-attribution.

● Agradeço o Jeff Potts que me deixou usar a sua presentação como o fundição deste trabalho.