39
SCA (Service Component Architecture) SDO (Service Data Objects) & Uma Introdução (Service Component Architecture) (Service Data Objects) Silvano Girardi Jr. [email protected] http://www.silvano.pro.br

SCA & SDO - Uma Introdução

Embed Size (px)

Citation preview

Page 1: SCA & SDO - Uma Introdução

SCA(Service Component Architecture)

SDO(Service Data Objects)

&

Uma Introdução

(Service Component Architecture) (Service Data Objects)

Silvano Girardi [email protected]://www.silvano.pro.br

Page 2: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Apresentação

N l d Ri A l P á• Natural de Rio Azul, Paraná• Morando em Florianópolis há 8 anos• Gerente de Desenvolvimento de Aplicações

da InPhonex.com, empresa americana , pprovedora de serviço VoIP

• Membro do PHPSCMembro do PHPSC• Contribuições para PEAR e SCA_SDO

Silvano Girardi Jr. – PHPSC Conf - 2008 2

Page 3: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Agenda

Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos

Silvano Girardi Jr. – PHPSC Conf - 2008

Agradecimentos

3

Page 4: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

O que é isso?! • SCA

S i C t A hit t– Service Component Architecture– Arquitetura de Componentes de Serviço“SCA possibilita ao desenvolvedor PHP criar componentes SCA possibilita ao desenvolvedor PHP criar componentes reutilizáveis que podem ser chamados de diversas maneiras, com mínimo esforço.”

• SDO– Service Data Object– Objeto de Dados de Serviço“SDO possibilita que uma aplicação trabalhe com dados de diferentes fontes (como exemplos: um arquivo XML um banco de

Silvano Girardi Jr. – PHPSC Conf - 2008 4

diferentes fontes (como exemplos: um arquivo XML, um banco de dados, uma planilha) utilizando uma única interface.”

Page 5: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Agenda

Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos

Silvano Girardi Jr. – PHPSC Conf - 2008 5

Agradecimentos

Page 6: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

História – SCA & SDO

• SOA – Service Oriented Architecture

• Versão 0.9 – Novembro de 2005• OSOA – Open Service Oriented Architecturep• Zend, IBM, Sybase, Oracle, BEA, entre outros.

• Versão 1.0 – Março de 2007• OASIS - Organization for the Advancement of Structured Information

Standards

Silvano Girardi Jr. – PHPSC Conf - 2008

Standards

6

Page 7: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

História – SCA & SDO Para PHP

Julho 2005 Implementação de SDO em PHP enviada para o PHP PECL pela IBM• Julho 2005 – Implementação de SDO em PHP enviada para o PHP PECL pela IBM

• Novembro 2005 – Um grupo de empresas, incluindo IBM, anunciam união para desenvolvimento das especificações para SCA e SDO

• Março 2006 – PHP SDO v1.0.0 (primeira versão estável)

• Agosto 2006 – PHP SDO v1.0.3 (agora depende da implementação SDO Tuscany C++ do Apache

• Setembro 2006 – PHP SCA v0.1.0 (primeira versão lançada)

• Novembro 2006 – PHP SCA_SDO v1.1.0 (combinados SDO e SCA)

• Maio 2007 – PHP SCA_SDO v1.2.0 (com bindings plugáveis)

• Junho 2007 – PHP SCA_SDO v1.2.2 (binding para eBay SOAP)

Silvano Girardi Jr. – PHPSC Conf - 2008

• Março 2008 – PHP SCA_SDO v1.2.4 (versão atual)

7

Page 8: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Agenda

Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos

Silvano Girardi Jr. – PHPSC Conf - 2008 8

Agradecimentos

Page 9: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

SCA

E i á i i d i b i SOAP REST JSON RPC • Existem várias maneiras de criar webservices: SOAP, REST, JSON-RPC, ATOM, XMLRPC, e muitas outras. (Cada uma com seus pontos fortes e fracos)

• Disponibiliza uma maneira consistente de trabalhar com diferentes “estilos” de webservices

• Uma linha de código pode significar a diferença entre disponibilizar um serviço via SOAP, JSON-RPC ou REST, por exemplo

• Uma linha de código também pode significar a diferença de como uma dependência (serviço) será chamada

Silvano Girardi Jr. – PHPSC Conf - 2008

p ( ç )

9

Page 10: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Separe as preocupaçõesSepare as preocupações(Reusabilidade!)

M h d ó i d d “ ”Mantenha a regra de negócio separada das “amarras”

1. Mantenha a regra de negócio independente de como ela será encontrada e i i drequisitada

◦ Disponibilize quantos “bindings” forem necessários – certifique-se de quesua regra de negócio não precisa saber como ela foi chamada.

2. Mantenha a regra de negócio independente de como chamar os serviços dos quais que ela depende

Declare as dependências mas certifiq e se de q e s a regra de negócio◦ Declare as dependências – mas certifique-se de que sua regra de negócionão precisa saber como resolvê-las

◦ De preferência, use alguma outra maneira para “amarrar” os componentes. (Padrões como Inversão de Controle Injeção de Dependências)

Silvano Girardi Jr. – PHPSC Conf - 2008

(Padrões como Inversão de Controle, Injeção de Dependências)

10

Page 11: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Entendendo os diagramas

Serviço Componente

Referência Amarras (wires)

Pode ser Composite

Um componentelocal

local, soap, json, rest,

etc.

Pode ser local, soap, json, rest,

etcUm componente

com a regra de negócio

Um Webservice

etc.

Silvano Girardi Jr. – PHPSC Conf - 2008 11

Page 12: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Um Componente PHP Simples

<?php <?php<?php

/*** Componente Saudação*/

<?php

require_once 'Saudacao.php';

$saudacao = new Saudacao();*/class Saudacao{

/**@ $

$saudacao new Saudacao();echo $saudacao->digaOla('Santa Catarina');

?>

* @param string $nome* @return string*/

public function digaOla($nome) {return 'Ola ' . $nome;

}}

Silvano Girardi Jr. – PHPSC Conf - 2008

?>

12

Page 13: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Um Componente PHP Simples com SCA

<?php <?phpp p

include ‘SCA/SCA.php’;

/*** Componente Saudação

<?php

include ‘SCA/SCA.php';

$ d SCA g tS i ('S d h ') Componente Saudação* * @service*/

class Saudacao{

$saudacao = SCA::getService('Saudacao.php');echo $saudacao->digaOla(‘Santa Catarina');

?>{

/*** @param string $nome* @return string*/public function digaOla($nome) {public function digaOla($nome) {

return 'Ola ' . $nome;}

}

?>

Silvano Girardi Jr. – PHPSC Conf - 2008 13

Page 14: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Um Serviço SOAP com SCA

<?php <?phpp p

include ‘SCA/SCA.php’;

/*** Componente Saudação

<?php// consumindo com SCAinclude ‘SCA/SCA.php';

$ d Componente Saudação* * @service* @binding.soap*/

class Saudacao

$saudacao = SCA::getService('http://www.exemplo.org/Saudacao.php?wsdl');echo $saudacao->digaOla(‘Santa Catarina');

class Saudacao{

/*** @param string $nome* @return string*/

// consumindo com a extensão PHP SOAP$saudacao = newSoapClient('http://www.exemplo.org/Saudacao.php?wsdl');

h $ d >dig Ol ( (' ' > ‘S t C t i '))/public function digaOla($nome) {

return 'Ola ' . $nome;}

}

echo $saudacao->digaOla(array('nome' => ‘Santa Catarina'))->digaOlaReturn;

?>

Silvano Girardi Jr. – PHPSC Conf - 2008

?>

14

Page 15: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Bindings – Os Diversos Estilos

Como provedor de serviços, clientes diferentes preferem ou precisam de “estilos” diferentes.p ç , p p

Como consumidor de serviços, não existe um único “estilo” suportado por todos os provedores de serviços.

• Service-oriented

– soap

– jsonrpc

– xmlrpc

– restrpc (GET+/methodname?param)

– local

• Resource-oriented

– restresource (GET/PUT/POST/DELETE)

t– atom

– rss

• Other

– message

Silvano Girardi Jr. – PHPSC Conf - 2008

– ebaysoap

– simpledb

15

Page 16: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Serviços SOAP + JSON-RPC com SCA

<?php <?phpp p

include ‘SCA/SCA.php’;

/*** Componente Saudação

<?php

include ‘SCA/SCA.php';

// i i SOAP Componente Saudação* * @service* @binding.soap* @binding.jsonrpc*/

// consumir serviço SOAP$saudacao = SCA::getService('http://www.exemplo.com/Saudacao.php?wsdl');echo $saudacao->digaOla(‘Santa Catarina');

/class Saudacao{

/*** @param string $nome* @return string

// consumir serviço JSON-RPC$saudacao = SCA::getService('http://www.exemplo.com/Saudacao.php?smd');

h $ d >dig Ol (‘S t C t i ') @return string*/public function digaOla($nome) {

return 'Ola ' . $nome;}

}

echo $saudacao->digaOla(‘Santa Catarina');

?>

Silvano Girardi Jr. – PHPSC Conf - 2008

}

?>

16

Page 17: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Referenciando outros Serviços

<?php <?phpp p

include 'SCA/SCA.php';

/*** Greeting Component

<?php

include 'SCA/SCA.php';

/*** Saluto Componente Greeting Component

* * @service* @binding.xmlrpc*/class Greeting

* Saluto Componente* * @service* @binding.restrpc*/class Salutoclass Greeting

{/*** @param string $name* @return string*/

class Saluto{

/*** @param string $nome* @return string*//

public function sayHello($name) {return 'Hello' . $name;

}

?>

*/public function direCiao($nome) {

return 'Ciao ' . $nome;}

}

Silvano Girardi Jr. – PHPSC Conf - 2008 17

?>?>

Page 18: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Referenciando outros Serviços

Serviço

ServiçoSaudação

Saluto

saudar.php

‘Santa Catarina’, ‘en’

ServiçoGreeting

‘Hello Santa Catarina’

Greeting

Silvano Girardi Jr. – PHPSC Conf - 2008 18

Page 19: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

<?php

Referenciando outros Serviçosp p

include 'SCA/SCA.php';

/*** Componente Saudação* * @service* @binding.soap /**g p* @binding.jsonrpc*/

class Saudacao{

/*** @reference* @binding.xmlrpc http://www.example.org/Greeting.php*/

/* @reference* @binding.xmlrpc http://www.example.org/Greeting.php*/public $saudacao_en;

/public $saudacao_en;

/*** @reference* @binding.restrpc http://www.esempio.org/Saluto.php*/

public $saudacao_it;

/*** @reference* @binding.restrpc http://www.esempio.org/Saluto.php*/

/*** @param string $nome* @param string $idioma* @return string*/

public function digaOla($nome, $idioma) {

switch ( $idioma ) {

/public $saudacao_it;

case ‘en’:return $this->saudacao en->sayHello($nome);

case ‘en’:return $this->saudacao_en->sayHello($nome);break;

case ‘it’:return $this->saudacao_it->direCiao($nome);break;

default:return 'Ola ' . $nome;

return $this >saudacao_en >sayHello($nome);break;

case ‘it’:return $this->saudacao_it->direCiao($nome);break;

Silvano Girardi Jr. – PHPSC Conf - 2008

}}

}?>

19

Page 20: SCA & SDO - Uma Introdução

Serviço deCatálogo

Serviço CallbackDe Pagamento

SOAP

PHP

Serviço deCarrinho de Compras

Serviço dePagamentoSOAP

eServiceWallet(Java Impl)

SOAPPHP

Serviço de

Serviço deLogin

PedidosApp

Dashboardde Negócios

PHP Atom feedPHP

Processamento dePedidos

çLog de Eventos App

JMS

eServiceStoreServiço de

Status de Pedido

CallbackProcessamento de

Pedidos

JMS

PHP SOAP

JSON

eServiceStore

Warehouse Local

Warehouse Warehouse

PHP

Warehouse broker

App

JMS Warehouse RemotaSOAP

Page 21: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Agenda

Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos

Silvano Girardi Jr. – PHPSC Conf - 2008 21

Agradecimentos

Page 22: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Mas só posso usar escalares com SCA?

(escalar é uma variável que aceita um único valor por vez exemplo: inteiro string float)(escalar é uma variável que aceita um único valor por vez, exemplo: inteiro, string, float)

Respondendo à pergunta:

NÃO!NÃO!

Solução: SDO

Silvano Girardi Jr. – PHPSC Conf - 2008 22

Page 23: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

SDO

“SDO possibilita que uma aplicação trabalhe com dados de diferentes fontesSDO possibilita que uma aplicação trabalhe com dados de diferentes fontes(como exemplos: um arquivo XML, um banco de dados, uma planilha)

utilizando uma única interface.”

Formado por 4 partes:• Service Data Objects (SDO)

– O objeto de dados manipulado dentro de um script PHP• Data Access Service (DAS)

– Disponibiliza meios de ler e escrever dados de/em uma fonte de dados• Type Model

– Descreve tipos de SDOs e tipos primitivos que podem aparecer (válidos) na estrutura do SDO. Pode ser criado através de uma API ou pela leitura de um XSD (no caso de um XML DAS)

• Change Summary– Registra as alterações de dados que ocorrem durante a execução do script. É utilizado pelo DAS

para escrever dados de volta à fonte de dados.

Silvano Girardi Jr. – PHPSC Conf - 2008 23

Page 24: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

SDO

Dados Type Model

SDO_DataObject SDO_DAS_Relational BDBD

ChangeSummary

Silvano Girardi Jr. – PHPSC Conf - 2008 24

Page 25: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

SDO

Dados Type Model

SDO_DataObject SDO_DAS_XML XML

ChangeSummary

Silvano Girardi Jr. – PHPSC Conf - 2008 25

Page 26: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

SDO no SCA

• Utilizado para trabalhar com tipos complexos• Utilizado para trabalhar com tipos complexos– Ex: um pedido de compra, um endereço, etc.

• Suporte nativoSuporte nativo– Criação de SDO_DataObjects utilizando o método

createDataObject() diretamente em um serviço criado via SCA::getService()

• Não fica restrito apenas à utilização do SDO pelo método nativo do SCA. É possível utilizar o SDO de forma independente

• Utiliza SDO_DAS_XML como interface e XSD (XML SchemaDefinition) para descrever os tipos complexos

Silvano Girardi Jr. – PHPSC Conf - 2008 26

Page 27: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Vejamos na prática

O serviço de Saudação recebeu uma atualização e agora O serviço de Saudação recebeu uma atualização e agora não trabalha mais com um parâmetro string “nome”.

Agora é necessário enviar como parâmetro um tipo complexo “Pessoa” cuja estrutura é a seguinte:complexo Pessoa , cuja estrutura é a seguinte:

Tipo: Pessoa

Propriedades:nomenomesobrenomeemail

Silvano Girardi Jr. – PHPSC Conf - 2008

lista de telefones

27

Page 28: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

O XSD

<?xml version="1.0" encoding="UTF-8"?>g<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn://Pessoa" xmlns:tns="urn://Pessoa">

<xs:element name="Pessoa"><xs:complexType>

<xs:sequence>xs:sequence<xs:element name="nome" type="xs:string" /><xs:element name="sobrenome" type="xs:string" /><xs:element name="email" type="xs:string" /><xs:element name="telefone" type="tns:telefone" maxOccurs="unbounded" />

</xs:sequence></xs:sequence></xs:complexType>

</xs:element>

<xs:complexType name="telefone"><xs:sequence><xs:sequence>

<xs:element name="ddd" type="xs:string" /><xs:element name="numero" type="xs:string" />

</xs:sequence></xs:complexType>

Silvano Girardi Jr. – PHPSC Conf - 2008

</xs:schema>

28

Page 29: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

O Serviço Saudação Atualizado<?php

include ‘SCA/SCA.php’;

/*** Componente Saudação* * @service @service* @binding.soap* @types urn://Pessoa Pessoa.xsd*/

class Saudacao{

/*** @param Pessoa $Pessoa urn://Pessoa* @return string*/public function digaOla($Pessoa) {

return 'Ola ' . $Pessoa->nome . ‘ ‘ . $Pessoa->sobrenome;}

Silvano Girardi Jr. – PHPSC Conf - 2008 29

}

?>

Page 30: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Script saudar.php Atualizado<?phpinclude ‘SCA/SCA.php';

$saudacao = SCA::getService('http://www exemplo com/Saudacao php?wsdl');$saudacao = SCA::getService( http://www.exemplo.com/Saudacao.php?wsdl );

// criar SDO pessoa$pessoa = $saudacao->createDataObject('urn://Pessoa', 'Pessoa');$pessoa->nome = ‘Silvano’;$pessoa->sobrenome = ‘Girardi Jr.’;$pessoa->email = ‘[email protected]’;

// criar SDO telefone, dentro do SDO pessoa$telefone $pessoa >createDataObject('telefone');$telefone = $pessoa->createDataObject('telefone');$telefone->ddd = ‘48’;$telefone->numero = ‘5555 5555’;

// adicionando outro SDO telefone dentro da lista de telefones do SDO pessoa$telefone = $pessoa->createDataObject('telefone');$telefone->ddd = ‘48’;$telefone->numero = ‘9999 9999’;

h $ d dig Ol ($ )

Silvano Girardi Jr. – PHPSC Conf - 2008 30

echo $saudacao->digaOla($pessoa);

?>

Page 31: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Agenda

Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos

Silvano Girardi Jr. – PHPSC Conf - 2008 31

Agradecimentos

Page 32: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Avaliação• Custo– Gratuitos e open source

• Instalação licença e contribuições• Instalação, licença e contribuições– Disponível no PECL– Licença Apache 2.0– É fácil contribuir

• Através da lista de discussãoAtravés de produção de código• Através de produção de código

– Para contribuir com código é preciso assinar um termo: CLA – Contributor’s License Agreement

• Nem tudo são flores– Documentação escassa e desatualizada, além de estar parte no manual do PHP, parte no site OSOA

á ã f– Algumas áreas não finalizadas– Desenvolvimento atual está lento

• Prós– O ganho em produtividade é indiscutível– Cumprem muito bem o papel ao qual se propõem– Possibilidade de criar outros bindings

• Futuro– SCA: http://www.osoa.org/display/PHP/SCA+Wish+List– SDO: http://www.osoa.org/display/PHP/SDO+Wish+List

Silvano Girardi Jr. – PHPSC Conf - 2008

• E vale a pena citar– O feedback dos desenvolvedores através do grupo phpsoa é excelente

32

Page 33: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Agenda

Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos

Silvano Girardi Jr. – PHPSC Conf - 2008 33

Agradecimentos

Page 34: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Quero instalar!

• Disponível no PECL.p– http://pecl.php.net– pecl install SCA_SDO

Silvano Girardi Jr. – PHPSC Conf - 2008 34

Page 35: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Onde encontro mais informações?

• SCA e SDO para PHP• SCA e SDO para PHP– http://.osoa.org/display/PHP/SOA+PHP+Homepage

• Grupo de discussãohtt //g g gl /g / h– http://groups.google.com/group/phpsoa

• Manual do PHP para SCA– http://www.php.net/SCAp // p p /

• Manual do PHP para SDO– http://www.php.net/SDO

• Meu Blog– http://www.silvano.pro.br

Silvano Girardi Jr. – PHPSC Conf - 2008

• Ferramentas de busca :)

35

Page 36: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Agenda

Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos

Silvano Girardi Jr. – PHPSC Conf - 2008 36

Agradecimentos

Page 37: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Perguntas!?

??

Silvano Girardi Jr. – PHPSC Conf - 2008 37

Page 38: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Agenda

Vi ã g l• Visão geral• História• SCA • SDO• Avaliação• Referências• Perguntas?• Agradecimentos

Silvano Girardi Jr. – PHPSC Conf - 2008 38

Agradecimentos

Page 39: SCA & SDO - Uma Introdução

SCA & SDO – Uma Introdução

Agradecimentos

PHPSC ( i l El Mi )• PHPSC (em especial Elton Minetto)• UNOCHAPECÓ• Desenvolvedores SCA_SDO– Matthew PetersMatthew Peters– Caroline Maynard– Graham ChartersGraham Charters

• Você!MUITO OBRIGADO!

Silvano Girardi Jr. – PHPSC Conf - 2008

• MUITO OBRIGADO!

39