Sei sulla pagina 1di 91

Departamento de Engenharia Informtica

Resumo

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

RPC: comparao com API de Mensagens


Positivo
A interface do servio encontra-se claramente especificada e no apenas um conjunto de mensagens Mecanismo de estabelecimento da ligao entre o cliente e o servidor automtico As funes do cliente e do servidor so consistentes, o sistema garante que so correctamente emparelhadas O modelo de invocao de uma funo e respectiva sincronizao simplificam a programao Os dados so automaticamente codificados e descodificados resolvendo o problema da heterogeneidade As Excepes adaptam-se bem ao tratamento de erros nas invocaes remotas Sistemas Distribudos 2009/10

Negativo
A sincronizao pode dar origem a estrangulamentos, interblocagem S so bem suportadas as interaces 1-para-1 (ou seja no suporta difuso) Existem mais nveis de software que implicam maior overhead na execuo

Departamento de Engenharia Informtica

Web Services

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Evoluo
1997
A Sun distribui o JDK 1.1 que inclui o Remote Method Invocation (RMI) que define um modelo de computao distribuda usando objectos Java. O RMI semelhante ao CORBA e ao DCOM mas funciona s com objectos Java. Microsoft desenvolveu o COM+ sucessor do DCOM muito prximo do modelo CORBA.

1999
A SUN distribui o Java 2 Platform Entreprise Edition (J2EE) que integra o RMI e o IIOP tornando mais simples a interoperao de sistemas entre sistemas Java e CORBA. O Simple Object Acess Protocol SOAP apareceu pela primeira vez.

2001
A IBM e a Microsoft propem as pilhas de protocolos dos Web Services W3C (World Wide Web Consortium)
Wire stack Description stack Discovery stack

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Motivao dos Web Services


Protocolo muito simples para garantir a interoperao entre plataformas de mltiplos fabricantes Tratar todo o tipo de heterogeneidade de dados e informao com XML Mensagens codificadas em texto para passar atravs das firewalls Permitir utilizar RPC ou MOM em sistemas de comunicao sncronos e assncronos Usar de forma directa o HTTP e HTTPS como protocolos de transferncia de informao Usar URL e URI como referncias remotas para objectos Permitir a transferncia de todo o tipo de informao desde estruturas de dados a documentos estruturados e informao multimdia. Eliminar a distino de sistemas para transferncia de documentos e sistemas para transferncia de dados
Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Dinmica do Mercado
IBM
O produto principal o Websphere que inclui o SOAP, WSDL, UDDI

Microsoft
.NET suporta directamente Web Services mas muito mais abrangente incluindo uma nova linguagem de programao: o C #

Sun Microsystems
O suporte da Sun ao Java faz com que esta plataforma seja uma das que incorpora a tecnologia Java Enterprise e os Web services.

BEA
Weblogic: evoluo da plataforma de J2EE

Oracle:
Oracle 10i Web Service Broker. BPEL server

SAP:
Netweaver Application server, EAI, Business service architecture

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Modelo dos Web Services

Service Registry

Find

Publish

Service Requestor

Bind Request /Response


Sistemas Distribudos 2009/10

Service Provider

Departamento de Engenharia Informtica

Arquitectura dos WEB services


Um servio de Directrio para registo e pesquisa dos servios UDDI Um protocolo de pedidoresposta para invocao do servio SOAP Uma especificao da interface do servio WSDL Pginas amarelas e directrio Interaco

Contratos

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Web services
Composio Descrio da Localizao UDDI BPEL4WS WS-Metadata Exchange Transaces Componentes Segurana Comunicao Fivel Coordenao Descrio do Servio WSDL MTOM Mensagem SOAP Descrio da Mensagem Transporte HTTP XSD HTTPS WS-Addressing XML SMTP WS-Policy

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Web Services (standards)


Choreography - CDL4WS Orchestration - BPEL4WS Transactions Management WS-Reliability WS-Security Coordination Context UDDI WSDL SOAP Message XML HTTP, JMS, SMTP
Sistemas Distribudos 2009/10

Business Processes

Quality of Service

Discovery Description Description

Transport

Departamento de Engenharia Informtica

Arquitectura de Integrao da Informao


Em muitos casos a integrao tem de resolver o problema da troca de informao com mltiplas representaes A soluo mais simples para este problema representar os dados num formato cannico que todos saibam utilizar Os dados originais de cada sistema tm de ser mapeado no formato cannico mas depois podem ser usados por todos que sigam o formato. Esta a razo da grande importncia do XML

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Simple Object Access Protocol SOAP


Protocolo de comunicao dos Web Services

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Simple Object Access Protocol - SOAP


Objectivo
Ubiquitous XML distributed computing infrastructure

Caractersticas
Protocolo de comunicao distribudo permitindo o envio de qualquer tipo de informao entre aplicaes Protocolo de representao de dados baseado em XML. Referncias remotas baseadas em URI Protocolo extensvel permitindo a incorporao de vrias facetas : segurana, tolerncia a faltas, atravs de headers associados s mensagens

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Especificao SOAP
Define O protocolo de pedido resposta estrutura das mensagens e da interaco entre cliente e servidor Como o XML deve ser usado para representar o contedo das mensagens As regras de como os receptores das mensagens devero processar os elementos XML que as mensagens SOAP contm O uso de protocolos como o HTTP e o SMTP para comunicar as mensagens SOAP
Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Wire stack Viso dos Web Services

SOAP Headers

Envelope Extensions Quality of Service Manageability XML Messaging

Security

SOAP

XML and SOAP


HTTP(S), SMTP, FTP, sockets.

Data Encoding

Network Protocol

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

SOAP
No SOAP toda a informao est includa dentro de uma mensagem o envelope do SOAP. A mensagem tem um ou mais cabealhos (headers) e um corpo (body). Extenses s mensagens so os SOAP headers A heterogeneidade tratada pelo XML assim como convenes para representar tipos de dados abstractos ou tipos de dados complexos Uma interaces do tipo pedido - resposta Um mecanismo de ligao entre as mensagens SOAP e o protocolo HTTP, o mais usado na Internet, contudo o SOAP pode utilizar outros protocolos de transporte como SMTP Um mecanismo para tratar as faltas SOAP fault Na base esto os protocolos de comunicao que podem ser usados: HTTP, SMTP, FTP, ou API de comunicao como os sockets A segurana pode aparecer a qualquer nvel, por exemplo, utilizar SSL na comunicao ou assinaturas digitais nos headers.

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

SOAP Simple Object Access Protocol


SOAP 1.1 Message Structure
SOAP Envelope Header Entries

Define:
Modelo de empacotamento
SOAP Envelope

Baseado em XML Pode usar vrios transportes:


HTTP SMTP ...

[Header Element] Body Element

[Fault Element]

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Interaces previstas no SOAP

one-Way
Mensagem simples

Client

Server

request-response
RPC

Client

Server

Notification
callback

Client

Server

notification-response

Client

Server

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Binding do SOAP ao protocolo de Transporte


O HTTP um protocolo de pedido-resposta pelo que torna o protocolo de RPC do SOAP muito simples. Para outros protocolos tem de se criar um protocolo de controlo da invocao remota O HTTP permite que o servidor no tenha estado A confidencialidade da informao pode ser assegurada pelo HTTP/S

Sistemas Distribudos 2009/10

JAM8

Departamento de Engenharia Informtica

Binding do SOAP ao protocolo de Transporte


O SOAP independente do transporte e pode ser usado com diferentes protocolos. Contudo necessrio dar um contexto que identifique o servio de destino
O contexto para o servidor perceber qual o servios invocado pode ser passado dentro na mensagem SOAP ou na mensagem de transporte No caso do HTTP a informao de contexto passada atravs do URI e do SOAP action Se o mecanismo de transporte no tiver possibilidade de ter informao de contexto, por exemplo, usando directamente os sockets as solues possveis so:
Por conveno o porto x corresponde ao servio Y Usando os headers do SOAP Usando um protocolo de controlo mnimo para transferir as mensagens do SOAP

Sistemas Distribudos 2009/10

Slide 20 JAM8 Introduzir o problema do contexto


Jose Alves Marques; 22-03-2006

Departamento de Engenharia Informtica

Execuo simples em SOAP


necessrio um URL de destino O nome de uma operao Os parmetros.
Os parmetros so passados por cpia (in e out) No existem referncias para os objectos remotos criadas automaticamente como em Corba ou Java.

Informao contextual, como a informao de segurana

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Exemplo
Servidor que disponibiliza o ltimo preo praticado para um produto Funo Remota
float GetLastTradePrice(string symbol)

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

SOAP - Pedido
POST /ExemploHelloWS/endpoint HTTP/1.1 Host: www.server.com Content-Type: text/xml; charset="utf-8" Content-Length: 322 SOAPAction: "" <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://hello"> <soapenv:Body> <ns1:sayHello> <ns1:name>friend</ns1:name> </ns1:sayHello> </soapenv:Body> </soapenv:Envelope>

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

SOAP - Resposta
HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Content-Length: 367 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://hello"> <soapenv:Body> <ns1:sayHelloResponse ns1:sayHelloResponse> ns1:sayHelloResponse <ns1:return>Hello friend!</ns1:return> </ns1:sayHelloResponse> </soapenv:Body> </soapenv:Envelope>
Sistemas Distribudos 2009/10

JAM7

Departamento de Engenharia Informtica

SOAP - Erro
HTTP/1.0 500 Internal Server Error Content-Type: text/xml; charset=utf-8 Content-Length: nnn <SOAP - ENV: Envelope xmlns:SOAP-ENV=http//schemas.xmlsoap.org/soap/enve1ope/ SOAP-ENV:encodingStyle=http//schemas.xmlsoap.org/soap/encoding/> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>Client .AuthenticationFailure</faultcode> <faultstring>Failed to authenticate client</faultstring> <faultactor>urn:X-SkatesTown:PartnerGateway</faultactor> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

Sistemas Distribudos 2009/10

Slide 25 JAM7 validar a distino para o pacote SOAP


Jose Alves Marques; 22-03-2006

Departamento de Engenharia Informtica


Physical (Communication Protocol) Message POST /LookupCentral HTTP/1.1 Host: www.lookupcentralserver.com Content-Type: text/xml; charset=utf-8 Content-Length: nnn SOAPAction: Directory/LookupPerson

Out-of-message context (target URI)

Out-of-message context (SOAPAction)

Logical SOAP Message <SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/ SOAP-ENV:encodingStyle=http://schemas.xmlsoap.org/soap/encoding//> SOAP Headers In-message context

<SOAP-ENV:Header> <a: AuthorizationLevel> xmls:a=some-URI> </a:AuthorizationLevel> </SOAP-ENV:Header> <SOAP-ENV:Body> <m:LookupPerson xmlns:m=Some-URI> <FirstName>Big<FirstName> <LastName>Boss</LastName> </m:LookupPerson> </SOAP-ENV:body> </SOAP-ENV:Envelope>

SOAP Body

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

SOAPEnvelope
+addHeader(header:SOAPHeader):void +addBodyElement(element:SOAPBodyElement):void
+getHeaderByName(namespace:String, localPart:String):SOAPHeader message Type:String encodingStyleURI:String bodyElements:Vector headers:Vector

MessageElement
+getValueAsType(type:QName):Object +output(context:SerializationContext):Void Name:String Prefix:String namespaceURI:String Type:QName Parent:MessageElement Element:SOAPEnvelope

SOAPHeader
+SOAPHeader(namespace:String, localPart:String +SOAPHeader(elem:Element) mustUnderstand:boolean actor:String

SOAPBodyElement
+SOAPBodyElement(elem:Element)

RPCParam
+RPCParam(name:String, value:Object) value:Object name:String

methodName:String params:Vector +RPCElement(namespace:String, methodName:String, args:Object[]) +getParam(name:String):RPCParam +addParam(param:RPCParam):void

RPCElement

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Execuo dos Web Services

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Apache Axis
Apache Axis uma plataforma open source para Web Services O Axis engine o Servidor SOAP que suporta as linguagens Java e C++ composto por:
Axis engine O processador de SOAP Handlers os blocos bsicos de parametrizao dentro do Axis Chains cadeias de invocao de handlers
Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Relao Transporte
O Processador SOAP pode receber mensagens atravs de vrios mecanismos de transporte
Os Transport listeners esperam mensagens e invocam o Axis engine Os Transport listeners so servlets cuja funo invocar o Axis engine com uma mensagem SOAP Podem ser adicionados ou modificados listeners para requisitos particulares de transporte

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Handlers

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Handler Chain
As chains representam a invocao de handlers A WS specific chain invocam handlers que se aplicam a um web service determinado e so definidos no seu contrato WSDL
Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Servidor
A Global chain so handlers que so invocados para todos os web services. Um exemplo o log de todas as invocaes recebidas A Transport chain especifica do transporte e executa operaes que se aplicam sempre a um transporte. Por exemplo cifrar o corpo da mensagem O dispatcher faz a invocao da funo

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Cliente

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

WSDL - Web Service Definition Language


Definio do contrato do Servio

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

WSDL - Web Service Definition Language


A Interface Description Language dos Web Services Define o contrato a que o servio se obriga Foi submetida para norma ao W3C pela IBM e pela Microsoft em Setembro 2000. A definio permite descrever
Qual o servio Que mensagens devem ser enviadas e qual a sua estrutura Como usar os vrios protocolos de transporte Onde o servio est localizado, mais precisamente para que rede a mensagem deve ser enviada

A documento WSDL um documento XML com todas as vantagens que dai advm de extensibilidade (namespaces, xml schema, etc.)

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Service Description stack


WSFL/ XLANG WSEL Service Orchestration Endpoint Description Service Interface Service Implementation XML
Sistemas Distribudos 2009/10

WSDL

WSDL

XML Schema

Departamento de Engenharia Informtica

WSDL
Web Services Description Language
WSDL 1.1 Document Structure

Descreve:
WSDL Document [Types] {Messages}

O que o servio faz


Operaes

Onde est localizado


Endpoint

Como invoc-lo

Existem bindings para:


{Port Types} {Bindings} {Services}

SOAP 1.1 HTTP GET/POST MIME

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Definies
Port Type Descreve a interface abstracta de um Web

service.
Ateno porque o termo port usado com um sentido totalmente diferente dos sockets. Um port de um Web Service mais parecido com uma interface Java message assinatura das operaes descrevendo o nome e

os parmetros da operao types coleco de todos os tipos de dados usados na especificao. Estes elementos so reutilizveis porque definem entidades abstractas e no a concretizao de um servio

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

portType
<portType name=PriceCheckPortType> <operation name=checkPrice> <input message=pc:PriceCheckRequest/> <output message=pc:PriceCheckResponse/> </operation> </portType>

Descreve o que o Servio faz As mensagens permitem saber a assinatura dos mtodos Normalmente um documento WSDL contem apenas um port type por razes de reutilizao

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Mensagens
<! - - Message definitions - -> <! - - A PriceCheckRequest is simply an item code (sku) - -> <message name=PriceCheckRequest> <part name=sku type=xsd:string/> </message> <! - - A PriceCheckResponse consists of an availability structure, - > <! - - defined above. <message name=PriceCheckResponse> <part name=result type=avail:availabilityType/> </message>

As mensagens podem ser de input, output ou assinalar faltas podem ser usadas para diferentes operaes

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Tipos de dados
<types> <xsd:schema targetNamespace=http://www.skatestown.com/ns/availability xmlns:xsd=http://www.w3.org/2001/XMLSchema> <xsd:complexType name=availabilityType> <wsd:sequence> <xsd:element name=sku type=xsd:string/> <xsd:element name=price type=xsd:double/> </xsd:sequence> </xsd:complexType> </xsd:schema> </types>

Tipos utilizados no documento WSDL Os tipos so declarados num XML schema

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Binding
A funo do binding tornar concreto o servio definindo a forma como funciona Exemplos:
SOAP; HTTP; SMTP Semntica da invocao Request response; one-way; solicit response; notification Protocolo de transporte Valor do Soap action Formatao da mensagem

Um portType pode ter um mais bindings associados, mas cada documento WSDL normalmente s tem um.

8/28/2003

Sistemas Distribudos 2009/10 Jos Alves Marques

Departamento de Engenharia Informtica

binding
<binding name=PriceCheckSOAPBinding type=pc:PriceCheckPortType> <soap:binding style=rpc transport=http://schemas.xmlsoap.org/soap/http/> <operation name=checkPrice> <soap:operation soapAction= /> <input> <soap:body use=encoded namespace= http://www.skatestown.com/services/PriceCheck encodingStyle= http://schemas.xmlsoap.org./soap/encoding//> </input> <output> <soap:body use=encoded namespace= http://www.skatestown.com/services/PriceCheck encodingStyle= http://schemas.xmlsoap.org/soap/encoding//> </output> </operation> </binding>

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Exemplo de binding para SMTP


<!- - Binding definitions - -> <binding name=PriceCheckSMTPBinding type=pc:PriceCheckPortType> <soap:binding style= document Transport= http://schemas.xmlsoap.org/soap/smtp/> <operation name=checkPrice> <input> <soap:body use=literal/> </ input> <output> <soap:body use=literal/> </ output> </ operation> </ binding>

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Port
<! - - Service definition - -> <service name=PriceCheckService> <port name=PriceCheck binding=pc:PriceCheckSOAPBinding> <soap:address location= http://localhost:8080/axis/services/PriceCheck/> </port> </service <! - - Service definition - - > <service name=PriceCheckSMTPService> <port name=PriceCheckSMTP binding=PriceCheckSMTPBinding> <soap:address location= mailto:priceCheck@skstestown.com/ </ port> </ service>

Define o endereo da rede da rede onde o Web service disponibilizado. Se existirem vrios bindings so definidos vrios ports
exemplo para http ou o endereo de email para SMTP

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

WSDL information model


part type

abstract interface portType


(abstract) message (abstract) operation

concrete implementation binding


(concrete) message (concrete) message

Made concrete by service Contains zero or more concrete endpoint port

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

WSDL exemplo (I)


<?xml version=1.0?> <definitions name=PriceCheck targetNamespace=http://www.skatestown.com/services/PriceCheck xmlns:pc=http://www.skatestown.com/services/PriceCheck xmlns:avail=http://www.skatestown.com/ns/availability xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/ xmlns=http://schemas.xmlsoap.org/wsdl/> <! - - Type definitions - -> <types> <xsd:schema targetNamespace=http://www.skatestown.com/ns/availability xmlns:xsd=http://www.w3.org/2001/XMLSchema> <xsd:complexType name=availabilityType> <wsd:sequence> <xsd:element name=sku type=xsd:string/> <xsd:element name=price type=xsd:double/> </xsd:sequence> </xsd:complexType> </xsd:schema> </types>

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

WSDL exemplo (II)


<! - - Message definitions - -> <! - - A PriceCheckRequest is simply an item code (sku) - -> <message name=PriceCheckRequest> <part name=sku type=xsd:string/> </message> <! - - A PriceCheckResponse consists of an availability structure, - > <! - - defined above. <message name=PriceCheckResponse> <part name=result type=avail:availabilityType/> </message> <!- - Port type definitions - -> <portType name=PriceCheckPortType> <operation name=checkPrice> <input message=pc:PriceCheckRequest/> <output message=pc:PriceCheckResponse/> </operation> </portType>

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

WSDL exemplo (III)


<binding name=PriceCheckSOAPBinding type=pc:PriceCheckPortType> <soap:binding style=rpc transport=http://schemas.xmlsoap.org/soap/http/> <operation name=checkPrice> <soap:operation soapAction= /> <input> <soap:body use=encoded namespace= http://www.skatestown.com/services/PriceCheck encodingStyle= http://schemas.xmlsoap.org./soap/encoding//> </input> <output> <soap:body use=encoded namespace= http://www.skatestown.com/services/PriceCheck encodingStyle= http://schemas.xmlsoap.org/soap/encoding//> </output> </operation> </binding> <! - - Service definition - -> <service name=PriceCheckService> <port name=PriceCheck binding=pc:PriceCheckSOAPBinding> <soap:address location= http://localhost:8080/axis/services/PriceCheck/> </port> </service> Sistemas Distribudos 2009/10 </definitions>

Departamento de Engenharia Informtica

UDDI- Discovery stack

UDDI

Directory

ADS/DISCO

Inspection

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Discovery Stack

Service Registry

Find

Publish

Service Requestor

Bind

Service Provider

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Universal Description Discovery & Integration (UDDI)


Definio de um conjunto de servios que suportam a descrio e a localizao de:
Entidades que disponibilizam Web Services (empresas, organizaes) Os Web Services disponibilizados As interfaces que devem ser utilizadas para aceder aos Web Services

Baseada em standards Web: HTTP, XML, XML Schema, SOAP Norma definida por um consrcio alargado: Accenture, Ariba, Commerce One, Fujitsu, HP, i2 Technologies, Intel, IBM, Microsoft, Oracle, SAP, Sun e Verisign Verso actual: UDDI Version 3.0, 19 Jul 200
Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Discovery Stack
Protocolo de ligao ou binding entre o cliente e o servidor. Os fornecedores dos servios publicam a respectiva interface O protocolo de inspeco permite verificar se um dado servio existe baseado na sua identificao O UDDI responde s questes
Onde que o Web service est localizado? Qual o processo de negcio que o servio disponibiliza

O UDDI permite encontrar o servio baseado na sua definio capability lookup


Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

JAX - WS
Integrao dos Web Services com o ambiente Java

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Stack tpico de Interaco

View Developer

Requestor Java API

Provider Java API

Web service SOAP message

SOAP message

Wire-level

HTTP packet

HTTP packet

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

JAX-WS
Java API for XML Web Services
Evoluo da JAX-RPC (Java API for XML-based RPC)

Em JAX-WS, uma chamada remota de procedimento efectuada utilizando o protocolo SOAP (que define a estrutura e regras de representao da informao). A API do JAX-WS esconde a complexidade da utilizao de SOAP do programador. No servidor, o programador especifica os procedimentos remotos definindo uma interface em Java e criando uma classe que implemente esta interface. No cliente, o programador cria uma proxy (objecto local que representa o servio) que invocado para executar os mtodos. Um cliente JAX-WS pode aceder a Web services definidos noutras plataformas (devido utilizao de HTTP, SOAP e WSDL).

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

JAX-WS- Arquitectura
Web Container - Tomcat
Service Client
Stub
WSDL description

Service Endpoint
Tie
Dispatch

JAX-WS API
Client Side JAX-WS Runtime System

WSDL <-> Java Mapping

JAX- WS API
Server Side JAX-WS Runtime System

Message Protocol - SOAP Transport Protocol - HTTP


Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

JAX-WS - Passos de Execuo

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

JAX-WS
Duas componentes
Server-side
Definir o WSDL Gerar os ties a partir do WSDL Empacotar aplicao Instalar (deploy) num servidor aplicacional

Client-side
Gerar os stubs a partir do WSDL Compilar e executar a aplicao

Sistemas Distribudos 2009/10

JAM10

Departamento de Engenharia Informtica

Modelo de programao JAX-WS


Para criar um Web Service em JAX-WS existem duas abordagens: contract-first ou implementation-first Contract-first
Define-se o WSDL Gera-se um esqueleto do servidor usando a ferramenta wsimport Implementa-se o cdigo do servio

Implementation-first
Define-se a classe Java Anota-se a classe para dizer que deve gerar um Web Service O WSDL e os ties so gerados usando a ferramenta wsgenerate
Sistemas Distribudos 2009/10

Slide 61 JAM10 Exemplo do livro


Jose Alves Marques; 21-01-2005

JAM11

Departamento de Engenharia Informtica

Service Endpoint
A interface implcita na classe Java com a anotao @WebService declara os mtodos que um cliente remoto pode invocar no servio
public String sayHello(String name)

Algumas das regras


Os parmetros de entrada e de retorno tem de ser suportados pelo JAX-WS

Sistemas Distribudos 2009/10

Slide 62 JAM11 Exemplo do livro


Jose Alves Marques; 21-01-2005

Departamento de Engenharia Informtica

Exemplo
A implementao efectuada na prpria classe: public String sayHello(String name) { return "Hello " + name + "!"; } A ferramenta wsgenerate gera classes stub (cliente) e tie (servidor), que interagem com as bibliotecas de run-time. O wsgenerate gera tambm o documento da WSDL que descreve o servio As configuraes podem ser detalhadas:
Em anotaes do cdigo Java (capacidade disponvel desde o Java 5) Ou em ficheiro de configurao

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Cliente
O cliente pode ter um static proxy criado antes da execuo (static stub) que compilado a partir do WSDL pelo wsimport O cliente pode tambm usar um dynamic proxy uma classe que criada durante a execuo a partir do WSDL

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Cliente com Stub


Um stub nunca downloaded ou distribudo aos clientes O stub implementado em Java s relevante para o run-time do JAX-WS e no portvel para outros ambientes O stub especfico para um protocolo de transporte Com um stub o cliente no precisa do WSDL em tempo de execuo
Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Stack Tpico de Interaco

Sistemas Distribudos 2009/10

JAM9

Departamento de Engenharia Informtica

Cliente
Invocao esttica
O cliente pode ter um static proxy criado antes da execuo (static stub) que compilado a partir do WSDL pelo wsimport

Invocao dinmica
Dynamic Invocation Interface DII. Semelhante invocao dinmica do Corba. O cliente em tempo de execuo utiliza o WSDL para construir a invocao

Invocao dinmica.
O cliente pode tambm usar um dynamic proxy uma classe que criada durante a execuo a partir do WSDL

Sistemas Distribudos 2009/10

Slide 67 JAM9 aula 8


Jose Alves Marques; 22-03-2006

Departamento de Engenharia Informtica

Cliente com um static proxy


package soma; import javax.xml.rpc.Stub; public class SomaClient { public static void main(String[] args) { try { Stub stub = createProxy(); SomaIF soma = (SomaIF)stub; int res = soma.soma(1, 2); System.out.println("O resultado e': " + res); } catch (Exception ex) { ex.printStackTrace(); } } private static Stub createProxy() { // implementao esttica de um proxy return (Stub)(new EndpointSoma_Impl().getSomaIFPort()); } }

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Cliente com DII


public class DIIClient_WSDL{ public static void main(String[] args) throws Exception { String wsdllocation = http://127.O.O.1:9090/billpayservice/billpayservice.wsdl; String namespace = http://www.flutebank.com/xml; String serviceName = Billpayservice; ServiceFactory factory = ServiceFactory.newlnstanceQ; Service service = (Service) factory.createService ( new URL(wsdllocation), new QName(namespace,serviceName)); QName portName = new QName(namespace,BillPayPort); QName operationName = new QName(namespacegetLastPayment); Call call = service.createCall(portName, operationName); Object[] params = {my cable tv provider}; Object lastpaid (Double)call.invoke(params); System.out.println(Last payment was + lastpaid); } }

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Dynamic Proxy
import java.util.Date; import java.net.URL; // Interface class import com.flutebank.billpayservice.BillPay; public class DynamicProxyClient { public static void main(String[] args) throws Exception{ String namespace = http://www.flutebank.com/xml; String wsldport BillPayPort; String wsdlservice = Billpayservice; String wsdllocation = http://127.O.O.1:8080/billpayservice/billpayservice.wsdl; URL wsldurl = new URL(wsdllocation); ServiceFactory factory = ServiceFactory.newlnstance(); Service service = factory.createService(wsldurl, new QName(namespace, wsdlservice)); // make the call to get the stub corresponding to this service and interface BillPay stub (BillPay) service.getPort(new QName(namespace,wsldport), BillPay.class); // invoke methods on the service double lastpaid= stub.getLastPayment(my cable tv provider); System.out.println(Last payment was + lastpaid); } } Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

JAX-WS Handlers
Os handlers podem ser usados por exemplo para efectuar logging ou cifrar/decifrar os envelopes SOAP que passam na rede Handler
Estende a classe
javax.xml.ws.handler.Handler

Mtodos relevantes
handleRequest(MessageContext context) handleResponse(MessageContext context) handleFault(MessageContext context)

Handler Chain
Sequncia de handlers executados sobre pedidos e respostas

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Handlers
Configurao

Configurao (cliente ou servidor)


... <jws:handler-chains> <jws:handler-chain> <jws:handler> <jws:handler-class>util.LogHandler</jws:handler-class> </jws:handler> <jws:handler> <jws:handler-class>util.CipherHandler</jws:handler-class> </jws:handler> </jws:handler-chain> </jws:handler-chains> ...

Esta configurao especifica que, para cada mensagem SOAP que recebida ou enviada pelo Web Service, os handlers so invocados na seguinte ordem:
sada (outbound): Log, Cipher chegada (inbound): Cipher, Log
Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Projecto em Sistemas Empresariais Integrados

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Windows Communication Foundation


Integrao dos Web Services com o ambiente .Net 3.0

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Windows Communication Foundation (WCF)


Unifica de forma consistente o anterior suporte na plataforma .Net a:
Web Services Invocao remota de objectos (.Net Remoting) Transaes distribudas (MS Transaction Server) Message Queues (MSMQ)

Assegurando execuo protegida (managed) desse suporte Atravs de modelo de programao orientado a servios

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

(As Muitas) Semelhanas de Base com JAX-WS Baseado em SOAP para comunicao entre processos API simples, alivia programador da complexidade de SOAP, WSDL, etc.
No servidor, o programador especifica os procedimentos remotos definindo uma interface C# (ou Java, ou outra...) e criando uma classe que a implemente No cliente, o programador cria um objecto proxy para utilizar os servios remotos
Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Definio dos Servios: Services e Endpoints


Service serve mltiplas actions
Cada action associada a um mtodo no servidor

Cada service associado a mltiplos endpoints


No servidor, o programador expe os seus Endpoints Mensagens enviadas para endpoints

Endpoint define:
Para onde as mensagens devem ser enviadas (endereo) Como as mensagens devem ser enviadas (Binding) O que as mensagens devem conter (Contract)

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Definio dos Servios: Contracts


Service Contracts
Mapeia um servio remoto a uma interface (e.g. C#)

Operation Contracts
Mapeia uma (ou mais) aces a cada mtodo na interface

Message Contracts
Permitem definir cabealhos especficos para as mensagens SOAP
using System.ServiceModel; namespace ServiceLibrary { [ServiceContract(Namespace="http://example.org/echo/")] public interface IEchoService { [OperationContract] string Echo(string msg); } }
Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Implementao do Servio
Classe que implementa a interface do servio
using System.ServiceModel; namespace ServiceLibrary { [ServiceBehavior( InstanceContextMode=InstanceContextMode.Single, ConcurrencyMode=ConcurrencyMode.Multiple)] public class EchoService : IEchoService { public string Echo(string msg) { Mltiplas chamadas podem return msg; acontecer concorrentemente } ... Existe tambm }} operationBehavior
Sistemas Distribudos 2009/10

Behaviors permitem configurar aspectos do processamento local

Uma nica instncia da classe serve as chamadas remotas

Departamento de Engenharia Informtica

Definio dos Servios: Bindings


Binding define como o cliente deve enviar mensagens e como o servidor as deve processar WCF j inclui largo conjunto de bindings pr-definidos
Mas programador tambm pode criar novos bindings

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Definio de Servios: Exemplo


using 2. System; Cria using System.ServiceModel; (mltiplos) using ServiceLibrary; endpoints 1. Cria servio, indicando classe que o implementa e endereo

class Program { static void Main(string[] args) { using (ServiceHost host = new ServiceHost( typeof(EchoService), new Uri("http://localhost:8080/echo"))) { host.AddServiceEndpoint(typeof(IEchoService), new BasicHttpBinding(), "svc"); host.AddServiceEndpoint(typeof(IEchoService), new NetTcpBinding(), "net.tcp://localhost:8081/echo/svc"); host.Open(); ... 3. Inicia o }}} servio
Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Cliente: Exemplo
using System; using System.ServiceModel; using ServiceLibrary;

class Program { static void Main(string[] args) { try { // define service endpoints on client ServiceEndpoint httpEndpoint = new ServiceEndpoint( ContractDescription.GetContract( typeof(IEchoService)), new BasicHttpBinding(), new EndpointAddress("http://localhost:8080/echo/svc"));

1. Cria endpoint do lado do cliente, especificando contract, binding e endereo do endpoint do servidor

... }

IEchoService svc = null; // create channel factory based on HTTP endpoint using (ChannelFactory<IEchoService> httpFactory = 2. Cria proxy new ChannelFactory<IEchoService>(httpEndpoint)) { (equivalente a dynamic // create channel proxy for endpoint proxy do JAX-WS) svc = httpFactory.CreateChannel(); // invoke service operation Console.WriteLine("Invoking HTTP endpoint: {0}", svc.Echo("Hello, world")); } 3. Faz chamada Sistemas Distribudos 2009/10

remota

Departamento de Engenharia Informtica

SOAP como evoluo dos protocolos nas redes

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Uma transformao no desenvolvimento dos protocolos


Os protocolo tradicionais da aplicao na Internet (IETF et al.):
Um protocolo para cada tipo de aplicao:
SMTP para email, ftp para transferncia de ficheiros, HTTP para acesso web, POP para ler email, NNTP para netnews, Processo de desenvolvimento de protocolos lento refazer segurana (autenticao) para cad protocolo Cada novo protocolo tem a sua codificao de texto prpria Semelhanas em vrios protocolos: SMTP-style headers
Content-Type: text/plain; charset="us-ascii"; format=flowed

Exposio ao parsing

Possibilidade de novos buffer overflows para cada protocolo

application TCP IP

application SOAP HTTP TCP IP

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

A transformao do desenho de protocolos


Uma aplicao, um protocolo Modelo Antigo:

uma infraestrutura comum para o desenvolvimento

RPC para as aplicaes proprietrias das empresas Protocolos dedicados para aplicaes comuns na internet No h engenheiros de redes suficientes Evoluir de especialista da rede especialista da aplicao Um novo protocolo da IEFT demora em mdia ~5 anos

Muitas aplicaes novas

Muitas aplicaes (do email ao file access) podiam ser estruturadas como RPC

custom text protocol (ftp)

ASN.1based (SNMP, X.400)

RFC 822 protocol (SMTP, HTTP, RTSP, SIP, )

use XML for protocol bodies (IETF IM & presence)

SOAP and other XML protocols

Sistemas Distribudos 2009/10

Departamento de Engenharia Informtica

Porque podem ter sucesso os Web Services se os RPC falharam (??)


SOAP = s mais um protocolo de RPC
Muitos precursores: SunRPC, DCE, DCOM, Corba, Modelo Cliente Servidor Todos iam transformar a informtica das empresas, integrar os sistemas legados,

Porque no o fizeram? Especulao:


No tinha uma interface Web (no eram aplicaes a trs nveis) Poucas implementaes open-source O protocolo no era o mesmo entre o cliente PC (Microsoft) e o backend (IBM, Sun, VMS) As redes empresariais eram locais, ligaes Internet limitadas

Sistemas Distribudos 2009/10

Potrebbero piacerti anche