Departamento de Engenharia Informática Departamento de Engenharia Informática RPC: comparação com Mensagens Positivo Negativo Programação usando uma IDL que é uma linguagem • Só são bem suportadas as interacções 1-para-1 (ou seja não suporta difusão) • Funcionamento síncrono •A semântica exactamente-uma-vez não é possível sem um suporte transaccional •A transparência de execução entre um chamada local e remota é limitada por alguns pormenores na passagem de parâmetros •Existem mais níveis de software que implicam maior overhead na execução idêntica às linguagens de programação habituais. A interface do serviço encontra-se claramente especificada e não é apenas um conjunto de mensagens Resumo O modelo de invocação de uma função e respectiva sincronização simplificam a programação Os dados são automaticamente codificados e descodificados resolvendo o problema da heterogeneidade Mecanismo de estabelecimento da ligação entre o cliente e o servidor é automatizado através do serviço de nomes e rotinas do run-time de suporte ao RPC As funções do cliente e do servidor são consistentes, o sistema garante que ambas são modificadas coerentemente As excepções adaptam-se bem ao tratamento de erros nas invocações remotas 2009 José Alves Marques 2009 José Alves Marques Departamento de Engenharia Informática 2 Departamento de Engenharia Informática Evolução • 1997 – A Sun distribui o JDK 1.1 que inclui o Remote Method Invocation (RMI) que define um modelo de computação distribuída 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 próximo do modelo CORBA. Web Services • 1999 – A SUN distribui o Java 2 Platform Entreprise Edition (J2EE) que integra o RMI e o IIOP tornando mais simples a interoperação de sistemas entre sistemas Java e CORBA. – O Simple Object Acess Protocol – SOAP apareceu pela primeira vez. • 2001 – A IBM e a Microsoft propõem as pilhas de protocolos dos Web Services à W3C (World Wide Web Consortium) • Wire stack • Description stack • Discovery stack 2009 José Alves Marques 2009 José Alves Marques 1 Departamento de Engenharia Informática Departamento de Engenharia Informática Motivação dos Web Services • • • • Protocolo muito simples para garantir a interoperação entre plataformas de múltiplos fabricantes Tratar todo o tipo de heterogeneidade de dados e informação com XML Permitir utilizar RPC ou MOM (Message Oriented Middleware) sistemas de comunicação síncronos e assíncronos Usar de forma directa o HTTP e HTTPS como protocolos de transferência de informação – Conseguindo maior facilidade de passar através das firewalls • • • Usar URL e URI como referências remotas para objectos Permitir a transferência de todo o tipo de informação desde estruturas de dados a documentos estruturados e informação multimédia. Eliminar a distinção de sistemas para transferência de documentos e sistemas para transferência de dados 2009 José Alves Marques Dinâmica do Mercado • IBM • Microsoft – O produto principal é o Websphere que inclui o SOAP, WSDL, UDDI – .NET suporta directamente Web Services mas é muito mais abrangente – O biztalk suporta web services • Sun Microsystems – O suporte da Sun ao Java faz com que esta plataforma é uma das que incorpora a tecnologia Java Enterprise e os Web services. • Oracle: • SAP: – Oracle 10i Web Service Broker. BPEL server, Oracle BPMS – SAP XI, 2009 José Alves Marques Departamento de Engenharia Informática Departamento de Engenharia Informática Porque podem ter sucesso os Web Services se os RPC falharam (??) Uniform Resource Identifiers (URIs) • Standard de nomes de recursos na WWW • Sintaxe: [prefixo]:[sufixo-específico-do-protocolo] – Exemplos: urn:isbn:0-486-27557-4 https://www.ist.utl.pt/index.html mailto:[email protected] • SOAP = só mais um protocolo de RPC – Muitos precursores: SunRPC, DCE, DCOM, Corba, … – Modelo Cliente Servidor – Todos iam transformar a informática das empresas, integrar os sistemas legados, … • • Porque não o fizeram? Especulação: – Não tinha uma interface Web (não eram aplicações a três níveis) – Poucas implementações open-source – O protocolo não era o mesmo entre o cliente PC (Microsoft) e o backend (IBM, Sun, VMS) – As redes empresariais eram locais, ligações à Internet limitadas • Duas funções distintas: – Identificar univocamente um recurso na internet • Chamados URNs (Uniform Resource Names) e/ou – Localizar um recurso na internet • Chamados URLs (Uniform Resource Locator) 2009 José Alves Marques 2 Departamento de Engenharia Informática Departamento de Engenharia Informática Modelo dos Web Services Arquitectura dos Web Services (arquitectura básica) Find Client • Name & Service description Service Registry Um serviço de Directório para registo e pesquisa dos serviços – UDDI • • Um protocolo de pedido/resposta para invocação do serviço – SOAP • Interacção • Uma especificação da interface do serviço – WSDL • Contratos Publish Service Service Requestor Service Provider Bind Páginas amarelas e directório (endereço, contactos, identificadores, categorizadores, ...) Service description Request /Response 13 16-03-2011 16-03-2011 14 Departamento de Engenharia Informática Departamento de Engenharia Informática Web Services (standards) Choreography - CDL4WS Orchestration - BPEL4WS Business Processes Simple Object Access Protocol SOAP Management Transactions WS-Reliability WS-Security Coordination Quality of Service Context UDDI Discovery WSDL Description Description Protocolo de comunicação dos Web Services SOAP Message XML HTTP, JMS, SMTP 2009 José Alves Marques Transport 2009 José Alves Marques 3 Departamento de Engenharia Informática Departamento de Engenharia Informática Simple Object Access Protocol - SOAP Wire stack – Visão dos Web Services • Objectivo – Ubiquitous XML distributed computing infrastructure – Protocolo de comunicação distribuído permitindo o envio de qualquer tipo de informação entre aplicações – Define o protocolo de pedido resposta – estrutura das mensagens e da interacção entre cliente e servidor – O protocolo de representação de dados baseado em XML. – Referências remotas baseadas em URI – Protocolo extensível permitindo a incorporação de várias facetas : segurança, tolerância a faltas, através de headers associados às mensagens XML Messaging XML and SOAP Data Encoding 2009 José Alves Marques HTTP(S), SMTP, FTP, sockets. Network Protocol 2009 José Alves Marques Departamento de Engenharia Informática Departamento de Engenharia Informática Interacções previstas no SOAP SOAP Simple Object Access Protocol SOAP 1.1 Message Structure • Define: – Modelo de empacotamento SOAP Envelope Quality of Service SOAP • Características Manageability Envelope Extensions Security SOAP Headers one-Way • SOAP Envelope Client Server Client Server Client Server Client Server Mensagem simples Header Entries • Baseado em XML • Pode usar vários transportes: request-response [Header Element] Body Element RPC – HTTP – SMTP – ... Notification callback notification-response [Fault Element] 2009 José Alves Marques 2009 José Alves Marques 4 Departamento de Engenharia Informática Departamento de Engenharia Informática Execução simples em SOAP • É necessário um URL de destino • O nome de uma operação • Os parâmetros. Binding do SOAP ao protocolo de Transporte • Informação contextual, como a informação de segurança • 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 invocação remota • O HTTP permite que o servidor não tenha estado • A confidencialidade da informação pode ser assegurada pelo HTTP/S 2009 2009 – Os parâmetros são passados por cópia (in e out) – Não existem referências para os objectos remotos criadas automaticamente como em Corba ou Java. José Alves Marques José Alves Marques Departamento de Engenharia Informática SOAP - Pedido POST /ExemploHelloWS/endpoint HTTP/1.1 Host: www.server.com Content-Type: text/xml; charset="utf-8" Content-Length: 322 SOAPAction: "" Departamento de Engenharia Informática Binding de SOAP sobre HTTP O que há de específico deste transporte? Envelope SOAP com pedido <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://hello"> 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:Body> <ns1:sayHello> <ns1:name>friend</ns1:name> </ns1:sayHello> </soapenv:Body> </soapenv:Envelope> </soapenv:Envelope> 2009 José Alves Marques 2009 José Alves Marques 5 Departamento de Engenharia Informática Departamento de Engenharia Informática 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> 2009 José Alves Marques WSDL - Web Service Definition Language Definição do contrato do Serviço 2009 José Alves Marques Departamento de Engenharia Informática Departamento de Engenharia Informática WSDL WSDL - Web Service Definition Language Web Services Description Language WSDL 1.1 Document Structure • A definição permite descrever Qual o serviço Que mensagens devem ser enviadas e qual a sua estrutura Como usar os vários protocolos de transporte Onde o serviço está localizado, mais precisamente para que rede a mensagem deve ser enviada José Alves Marques {Messages} {Port Types} Diferenças vs IDL de RPC? 2009 [Types] Interface Concreta – – – – WSDL Document Interface Abstracta • A IDL dos Web Services • Define o contrato a que o serviço se obriga 2009 {Bindings} {Services} José Alves Marques 6 Departamento de Engenharia Informática Departamento de Engenharia Informática WSDL information model part Definições type • Port Type abstract interface portType (abstract) message (abstract) operation concrete implementation binding (concrete) message Made concrete by (concrete) message service service. – Descreve a interface abstracta de um Web – Atenção 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 operações descrevendo o nome e os parâmetros da operação – colecção de todos os tipos de dados usados na especificação. • Estes elementos são reutilizáveis porque definem entidades abstractas e não a concretização de um serviço • types concrete endpoint port Contains zero or more 2009 José Alves Marques 2009 José Alves Marques Departamento de Engenharia Informática Departamento de Engenharia Informática portType <portType name=”PriceCheckPortType”> <operation name=”checkPrice”> <input message=”pc:PriceCheckRequest”/> <output message=”pc:PriceCheckResponse”/> </operation> </portType> • • • Descreve o que o Serviço faz As mensagens permitem saber a assinatura dos métodos Normalmente um documento WSDL contem apenas um port type por razões de reutilização 2009 José Alves Marques 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 operações 2009 José Alves Marques 7 Departamento de Engenharia Informática Departamento de Engenharia Informática 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”> <xsd:sequence> <xsd:element name=”sku” type=”xsd:string”/> <xsd:element name=”price” type=”xsd:double”/> </xsd:sequence> </xsd:complexType> </xsd:schema> </types> • • Binding • • A função do binding é tornar concreto o serviço definindo a forma como funciona Exemplos: – – – – • SOAP; HTTP; SMTP Protocolo de transporte Valor do Soap action Formatação da mensagem Um portType pode ter um mais bindings associados, mas cada documento WSDL normalmente só tem um. Tipos utilizados no documento WSDL Os tipos são declarados num XML schema Diferente do outro conceito de Binding! 2009 José Alves Marques 2009 José Alves Marques Departamento de Engenharia Informática Departamento de Engenharia Informática Exemplo de binding para HTTP <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> 2009 José Alves Marques Exemplo de opções no binding RPC/encoded document/literal document/encoded RPC/literal 2009 José Alves Marques 8 Departamento de Engenharia Informática Departamento de Engenharia Informática 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> 2009 José Alves Marques 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:[email protected]”/ </ port> </ service> • • Define o endereço da rede da rede onde o Web service é disponibilizado. Se existirem vários bindings são definidos vários ports – exemplo para http ou o endereço de email para SMTP 2009 José Alves Marques Departamento de Engenharia Informática Departamento de Engenharia Informática Universal Description Discovery & Integration (UDDI) Discovery Stack • Definição de um conjunto de serviços que suportam a descrição e a localização de: Service Registry Find – Entidades que disponibilizam Web Services (empresas, organizações) – Os Web Services disponibilizados – As interfaces que devem ser utilizadas para aceder aos Web Services Publish • Baseada em standards Web: HTTP, XML, XML Schema, SOAP Service Requestor 2009 Bind José Alves Marques Service Provider 2009 José Alves Marques 9 Departamento de Engenharia Informática Informação representada na UDDI Departamento de Engenharia Informática Modelo estrutural da informação • businessEntity: descreve uma empresa ou organização que exporta Web Services • A UDDI permite pesquisar informação muito variada sobre os Web Services. Ex: – Procurar Web Services que obedeçam a uma determinada interface abstracta – Procurar Web Services que estejam classificados de acordo com um esquema conhecido de classificação – Determinar os protocolos de transporte e segurança suportados por um determinado Web Service – Procurar Web Services classificados com uma palavra-chave – A informação encontra-se conceptualmente dividida em: – Páginas brancas – informação geral de contacto – Páginas amarelas – Classificação do tipo de serviço e localização – Páginas verdes – Detalhes sobre a invocação do serviço • O acesso é via as API definidas mas os operadores também disponibilizam sites para acesso via web • businessService: descreve um conjunto de Web Services exportado por uma businessEntity • bindingTemplate: descreve a informação técnica necessária para usar um determinado serviço • tModel: descreve o “modelo técnico” de uma entidade reutilizável, como um tipo de Web Service, o binding a um protocolo usado por um Web Service, etc. Sistemas Distribuídos Sistemas Distribuídos 78 Departamento de Engenharia Informática Taxionomia Departamento de Engenharia Informática Arquitectura UDDI - Registries • Os serviços registados devem ser categorizados em taxionomias que os permitam pesquisar • Existem várias taxionomias normalizadas, ex.: – ISO 3166 – geografias – D-U-N-S – Data Universal Numbering System – Dun&Bradstreet – UN/SPSC- produtos e serviços – ONU • O UDDI permite que todas as entidades sejam classificadas • As pesquisas podem usar múltiplas classificações • Para uso interno das organizações podem ser definidos os seus esquemas de classificação. Ex.: qualidade de serviço do fornecedor do web service Sistemas Distribuídos 79 80 • Um Registry é composto por um ou mais nós UDDI • Os nós de um Registry gerem colectivamente um conjunto bem definido de dados UDDI. Tipicamente, isto é suportado com replicação entre os nós do Registry • A representação física de um Registry é deixada à escolha das implementações Sistemas Distribuídos 81 10 Departamento de Engenharia Informática Departamento de Engenharia Informática Registry Server privado • Gere a base de dados com os registos UDDI • Modos de acesso JAX - WS – Aplicações JAX-R – Registry Browser – Xindice Integração dos Web Services com o ambiente Java • Interfaces – API – Acesso directo aos registos Sistemas Distribuídos 82 2009 José Alves Marques Departamento de Engenharia Informática Departamento de Engenharia Informática JAX-WS JAX-WS- Arquitectura Web Container (e.g. JBoss) • Java API for XML Web Services • • Esconde a complexidade da utilização de SOAP do programador. No servidor: – Evolução da JAX-RPC (Java API for XML-based RPC) Service Client Stub – Programador especifica os procedimentos remotos definindo uma interface em Java e criando uma classe que implemente esta interface • Service Endpoint Stub (Tie) No cliente: – Programador cria uma proxy (objecto local que representa o serviço) que é invocado para executar os métodos. • WSDL description Um cliente JAX-WS pode aceder a Web services definidos noutras plataformas (devido à utilização de HTTP, SOAP e WSDL). 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, etc 2009 José Alves Marques 2009 José Alves Marques 11 Departamento de Engenharia Informática Departamento de Engenharia Informática JAX-WS - Passos de Execução Programação do servidor JAX-WS • Contract-first (ver lab. 4) – Define-se o WSDL – Gera-se um esqueleto do servidor usando a ferramenta wsconsume – Implementa-se o código do serviço • Implementation-first (ver lab. 3) – Define-se a classe Java – Anota-se a classe para dizer que deve gerar um Web Service – O WSDL e os ties são gerados usando a ferramenta wsprovide Vantagens e desvantagens? 2009 José Alves Marques 2009 José Alves Marques Departamento de Engenharia Informática Departamento de Engenharia Informática Quando usar cada abordagem? Programação do cliente JAX-WS • Implementation-first – Gerar os stubs a partir do WSDL (wsconsume) – Compilar e executar a aplicação – Oferecer serviços já implementados por web service – Construir novo web service de raiz sem ter de aprender a programar WSDL • Contract-first – Programador conhecedor de WSDL que pretende ter elevado controlo sobre o que é especificado no contrato – Substituir a implementação de um web service existente por outro mantendo compatibilidade com clientes – Aderir a contrato definido por terceiros (e.g. protocolo definido por consórcio de organizações) 2009 José Alves Marques 2009 José Alves Marques 12 Departamento de Engenharia Informática Departamento de Engenharia Informática Cliente com dynamic proxy Cliente: geração dos stubs • Invocação estática (static proxy) – Criado antes da execução – Gerado e compilado a partir do WSDL – Não é portável para outros ambientes • Invocação “semi-dinâmica” (dynamic proxy) 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); – Classe criada durante a execução a partir do WSDL que se obtém na altura – Antes da execução, apenas a interface abstracta do serviço é conhecida (correspondendo a uma interface Java) 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 • Invocação dinâmica (dynamic invocation interface,DII) – O cliente em tempo de execução utiliza o WSDL para construir a invocação – Antes da execução, nem interface abstracta nem concreta do serviço são conhecidas 2009 double lastpaid= stub.getLastPayment(“my cable tv provider”); System.out.println(“Last payment was” + lastpaid); } } José Alves Marques 2009 José Alves Marques Departamento de Engenharia Informática Departamento de Engenharia Informática Cliente com invocação dinâmica (DII) JAX-WS Handlers • • public class DIIClient_WSDL{ Os handlers podem ser usados por exemplo para efectuar logging ou cifrar/decifrar os envelopes SOAP que passam na rede Handler – Estende a classe – Métodos relevantes • javax.xml.ws.handler.Handler 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(namespace”getLastPayment”); Call call = service.createCall(portName, operationName); Object[] params = {“my cable tv provider”}; • handleRequest(MessageContext context) • handleResponse(MessageContext context) • handleFault(MessageContext context) • Handler Chain – Sequência de handlers executados sobre pedidos e respostas Object lastpaid = (Double)call.invoke(params); System.out.println(”Last payment was” + lastpaid); } } 2009 José Alves Marques 2009 José Alves Marques 13 Departamento de Engenharia Informática Handlers Configuração • Configuração (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 configuração especifica que, para cada mensagem SOAP que é recebida ou enviada pelo Web Service, os handlers são invocados na seguinte ordem: – À saída (outbound): Log, Cipher – À chegada (inbound): Cipher, Log 2009 José Alves Marques 14