Estudo de caso: Café Expresso Ltda. A estória de João... © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Café Expresso Ltda. • Características: •Sistema de controle de vendas de café: •Implementado em Delphi •Interface Windows p/ Desktop •Possui um SGBD © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Café Expresso Ltda. Um dia o chefe de João traz novos requisitos... Preciso vender café através da Internet!! Estou perdendo dinheiro! Quero isso PARA ONTEM! © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Café Expresso Ltda. João pensa... Como vou integrar o sistema existente com um novo módulo de acesso à Internet? Terei que reescrever o sistema em Java? ASP? © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Café Expresso Ltda. Enquanto isso, o chefe traz mais requisitos... Meus concorrentes estão vendendo mais variedades de café do que eu! Preciso integrar nosso sistema de venda pela internet com os sistemas de meus fornecedores, e de novos fornecedores, para aumentar meus lucros!!! PARA ONTEM!!! © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Café Expresso Ltda. João desesperado... Já estou reescrevendo o sistema em Java... Pelo menos o sistema dos fornecedores é escrito em Java?? © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Café Expresso Ltda. O chefe esclarece... Um dos fornecedores tem o sistema em Delphi... ... o outro em C++ ... ... o outro em Visual Basic ... Preciso disso PRA ONTEM! © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Café Expresso Ltda. Precisamos ajudar João... © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Web Services Parte 1 – Introdução Rodrigo Rebouças de Almeida [email protected] Arquiteturas - Histórico MainFrames Terminal Mainframe Terminal [ Dados + Lógica + Interface ] Terminal © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Arquiteturas - Histórico Arquitetura Cliente-Servidor PC [ Dados ] Cliente PC Cliente PC [ Lógica + Interface ] Cliente © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Servidor c/ SGBD Arquiteturas - Histórico Arquitetura em n-camadas Browser Web Browser Web Internet Servidor Web [ Interface ] © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) SGBD Servidor de Aplicação [ Lógica ] [ Dados ] O Problema de João... 1. Integrar o sistema legado com um novo sistema 2. Integrar o sistema da empresa com os sistemas dos fornecedores A, B, C Cliente 1 Fornecedor A Fornecedor B Internet PC 2 PC Cliente Cliente Servidor de Aplicação © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Fornecedor C Vamos tentar resolver o problema de João usando Web Services. © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) O que é um Web Service? Um Web Service é um ponto de acesso a funcionalidade que pode ser: Localizado dinamicamente Ter sua interface descoberta automaticamente, porque o serviço sabe se descrever Ser chamado na Web © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Web services Se fundamenta basicamente em três tecnologias: Web Services Description Language (WSDL) Define a interface de acesso ao serviço Simple Object Access Protocol (SOAP) Um protocolo baseado em XML. Permite que os clientes se comuniquem com os provedores de serviço. Universal Description, Discovery and Integration (UDDI) Permite Web services registrarem suas características, permitindo que outras aplicações as encontrem. © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Usar XML para toda a comunicação Extended Markup Language (XML) Oferece um formato ASCII para trocar qualquer tipo de informação estruturada Usa o “estilo” HTML de markup com tags <pessoa nome=”João”> <frutasFavoritas> <fruta>Manga</fruta> <fruta>Maçã</fruta> <fruta>Uva</fruta> </frutasFavoritas> </pessoa> Os tags podem ser definidos para criar uma “Aplicação XML” ou “Linguagem XML” © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Usar SOAP fazer RPC SOAP é uma forma de fazer Remote Procedure Call (RPC) usando documentos XML © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Descrever o serviço remoto usando WSDL WSDL = Web Services Description Language Pronunciado “wisdle” É uma linguagem XML que contém informação sobre a interface, a semântica, e outros detalhes de chamadas a um Web Service © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Definir ontologias Precisamos saber o que as coisas significam Exemplo: como mandar uma ordem de serviço se não sei o que cada campo deve conter? Várias organizações definem e padronizam ontologias ebXML RosettaNet (...) © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Usar UDDI para localizar serviços UDDI = Universal Description, Discovery, and Integration Permite cadastrar serviços e localizá-los Não é necessário usar UDDI se o cliente já tiver o documento WSDL © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Web services, Arquitetura 3 - Provê serviço Serviço cliente << SOAP >> << SOAP >> Provedor de serviço << SOAP >> 1 - Registra-se 2 - Busca serviço Serviço de diretório © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) SOAP Simple Object Access Protocol Define uma forma de transferir documentos XML através da Internet; Aplicações cliente se comunicam com Web services usando SOAP como protocolo; SOAP define um envelope para transmissão de mensagens, oferece regras para representar “remote procedure calls” (RPCs); © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) SOAP É o padrão para troca de mensagens usando XML; Desenvolvido sob a supervisão da W3C; Permite a transferência de mensagens através de protocolos de alto nível, como HTTP e SMTP; É mais usado sobre HTTP, pois consegue atravessar firewalls! © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) SOAP © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) SOAP Estrutura de uma mensagem SOAP: <SOAP:Envelope xmlns:SOAP= http://schemas.xmlsoap.org/soap/envelope/> <SOAP:Header> <!conteudo do cabecalho > </SOAP:Header> <SOAP:Body> <!conteudo do corpo> </SOAP:Body> </SOAP:Envelope> © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) João agora não precisa reimplementar o sistema de controle de vendas de café para este ser acessível via Internet... Basta fazer o sistema existente e o módulo de acesso a Internet conversarem usando SOAP e descrever os dados em XML © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Integração entre aplicações dentro de um domínio administrativo Parser XML PC PC Cliente Cliente Internet XML SOAP HTML XML Servidor de Aplicação © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Resolvemos o 1o problema, publicamos o sistema existente na Internet, agora precisamos ligar nosso sistema aos sistemas dos nossos fornecedores! Podemos usar SOAP como protocolo de comunicação! Mas, como saber a interface do sistema do meu fornecedor? Como posso fazer meu sistema iteragir com um sistema escrito em outra linguagem, em outra plataforma? © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) WSDL Web Service Description Language É uma linguagem XML para descrever Web services; Segue um conceito parecido da “Interface Definition Language” (IDL) usado em CORBA; Descreve detalhes como definição de tipos de dados, operações suportadas pelo Web service, formato das mensagens, endereço de rede do Web service, etc. © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Resolvido o problema, agora João tem seu Sistema integrado com os fornecedores. WSDL << SOAP >> Fornecedor A WSDL Café Expresso Ltda. Internet << SOAP >> WSDL << SOAP >> Fornecedor B WSDL Fornecedor C Último detalhe... Como descobrir novos fornecedores?? © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) UDDI Universal Description, Discovery and Integration Provê um mecanismo para registro e localização de Web services; É um diretório que contém vários Web services registrados, onde associamos um nome a um serviço, como um Web service. © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) UDDI Permite que empresas registrem seus serviços e possam interagir com outras empresas interessadas. UDDI é um Webservice baseado em XML e SOAP; A interação com um serviço UDDI é baseado em interfaces SOAP pré-definidas. © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) UDDI Um registro UDDI é organizado em duas entidades fundamentais: businessEntity : provê informações a sobre a empresa que está publicando o serviço. Contém um ou mais elementos businessService; businessService: representa um serviço provido pela businessEntity; Cada entidade é identificada por uma chave única, permitindo que haja referências a serviços, definições WSDL; © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) João agora pode encontrar outros Fornecedores através de um serviço UDDI. UDDI Service Registram-se Fornecedores XYZ Busca novos fornecedores WSDL Café Expresso Ltda. << SOAP >> WSDL Internet << SOAP >> Fornecedor A WSDL << SOAP >> Fornecedor B WSDL Fornecedor C © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) João agora pode encontrar outros Fornecedores através de um serviço UDDI. UDDI Service Registram-se Fornecedores XYZ Comunica-se com novos fornecedores <<SOAP>> WSDL Café Expresso Ltda. << SOAP >> WSDL Internet << SOAP >> Fornecedor A WSDL << SOAP >> Fornecedor B WSDL Fornecedor C © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Ferramentas - Como desenvolver Web Services? Ferramentas da Sun JWSDP com muitas APIs: JAXP, JAXB, JAX-RPC, SAAJ, JAXR, JWSDL Ferramentas da IBM Ferramentas da Microsoft (.NET) Ferramentas da Apache Axis do projeto Apache WSDL2Java converte WSDL para Java © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Exemplo com Axis Usando JWS Criando um serviço de soma e subtração de números Recursos: Axis Apache Tomcat 5.x Eclipse 3.1 Plugin do Eclipse: Lavadora http://lavadora.sourceforge.net/ © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Passo a passo (1) Passo 1: Download Axis Passo 2: Crie contexto Axis no Tomcat Copie (...)/axis/webapps/axis para o diretório webapps do Tomcat Passo 3: Inicie o Tomcat e teste a instalação do Axis http://ws.apache.org/axis/ Acesse: http://localhost:8080/axis/happyaxis.jsp Corrija as dependências Passo 4: Crie o WebService Crie uma classe Java, altere a extensão de .java para .jws Copie o jws para o contexto do Axis, no tomcat © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Passo a passo (2) Passo 5: Acesse o WSDL do webservice gerado Passo 6: Instale o plugin do Eclipse Download: http://lavadora.sourceforge.net Descompacte no diretório onde seu Eclipse está instalado Passo 7: Crie o cliente para acessar o serviço http://localhost:8080/axis/Calculator.jws?wsdl No Eclipse: File -> New -> WebServices-> Web Service Client Digite o caminho do wsdl do seu serviço: http://localhost:8080/axis/Calculator.jws?wsdl Passo 8: Execute o cliente e acesse o webservice Veja código no próximo slide © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Passo a passo (3) Código do cliente public static void main(String[] args) { try { CalculatorServiceLocator locator = new CalculatorServiceLocator(); Calculator calc = locator.getCalculator(); System.out.println(calc.add(10,5)); } catch (ServiceException e) { } catch (RemoteException e) { } } © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Conclusões João não foi despedido João com seu salário © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Conclusões O chefe de João conseguiu barrar a concorrência.. © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Fontes de consulta Axis User’s Guide http://ws.apache.org/axis/java/user-guide.html http://java.sun.com/webservices developers.ibm.com/webservices JavaWorld: www.javaworld.com webservices.org www.uddi.org xml.apache.org © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com) Obrigado!! Rodrigo Rebouças de Almeida [email protected] http://rodrigor.com © Copyright 2005 Rodrigo Rebouças de Almeida (http://rodrigor.com)