Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Resumo
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
Web Services
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
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
Service Registry
Find
Publish
Service Requestor
Service Provider
Contratos
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
Business Processes
Quality of Service
Transport
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
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
SOAP Headers
Security
SOAP
Data Encoding
Network Protocol
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.
Define:
Modelo de empacotamento
SOAP Envelope
[Fault Element]
one-Way
Mensagem simples
Client
Server
request-response
RPC
Client
Server
Notification
callback
Client
Server
notification-response
Client
Server
JAM8
Exemplo
Servidor que disponibiliza o ltimo preo praticado para um produto Funo Remota
float GetLastTradePrice(string symbol)
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>
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
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>
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
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
RPCElement
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
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
Handlers
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
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
Cliente
A documento WSDL um documento XML com todas as vantagens que dai advm de extensibilidade (namespaces, xml schema, etc.)
WSDL
WSDL
XML Schema
WSDL
Web Services Description Language
WSDL 1.1 Document Structure
Descreve:
WSDL Document [Types] {Messages}
Como invoc-lo
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
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
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
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>
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
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>
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
UDDI
Directory
ADS/DISCO
Inspection
Discovery Stack
Service Registry
Find
Publish
Service Requestor
Bind
Service Provider
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
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
JAX - WS
Integrao dos Web Services com o ambiente Java
View Developer
SOAP message
Wire-level
HTTP packet
HTTP packet
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).
JAX-WS- Arquitectura
Web Container - Tomcat
Service Client
Stub
WSDL description
Service Endpoint
Tie
Dispatch
JAX-WS API
Client Side JAX-WS Runtime System
JAX- WS API
Server Side JAX-WS Runtime System
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
JAM10
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
JAM11
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)
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
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
JAM9
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
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
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
Handlers
Configurao
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
Assegurando execuo protegida (managed) desse suporte Atravs de modelo de programao orientado a servios
(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
Endpoint define:
Para onde as mensagens devem ser enviadas (endereo) Como as mensagens devem ser enviadas (Binding) O que as mensagens devem conter (Contract)
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
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
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
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
Exposio ao parsing
application TCP IP
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 (do email ao file access) podiam ser estruturadas como RPC