João Augusto Alves Pacheco - Universidade Federal de Uberlândia
Transcrição
João Augusto Alves Pacheco - Universidade Federal de Uberlândia
Universidade Federal de Uberlândia Faculdade de Computação Programa de Pós-Graduação Uma Abordagem para Desenvolvimento de Serviços Baseados em Web Services João Augusto Alves Pacheco Uberlândia Dezembro 2003 i Universidade Federal de Uberlândia Faculdade de Computação Programa de Pós-Graduação Dissertação de Mestrado Uma Abordagem para Desenvolvimento de Serviços Baseados em Web Services Dissertação apresentada ao programa de Pós Graduação da Faculdade de Computação da Universidade Federal de Uberlândia – UFU, como um dos requisitos para conclusão do curso de mestrado e obtenção do título de Mestre. ©Todos os direitos reservados ii Universidade Federal de Uberlândia Faculdade de Computação Programa de Pós-Graduação Os abaixo assinados, por meio deste, certificam que leram e recomendam para a Faculdade de Computação a aceitação da dissertação intitulada “Uma Abordagem para Desenvolvimento de Serviços Baseados em Web Services” por João Augusto Alves Pacheco como parte dos requisitos exigidos para obtenção do título de Mestre em Ciência da Computação. Uberlândia, 19 de dezembro de 2003 Orientador : ____________________________________________ Prof. Dr. Pedro Frosi Rosa Universidade Federal de Uberlândia UFU/MG Banca Examinadora : ___________________________________________ Prof. Dr. José Gonçalves Pereira Filho Universidade Federal do Espírito Santo UFES/ES ____________________________________________ Prof. Dr. Jamil Salem Barbar Universidade Federal de Uberlândia UFU/MG iii Universidade Federal de Uberlândia Faculdade de Computação Programa de Pós-Graduação Data: Dezembro de 2003 Autor: João Augusto Alves Pacheco Título: Uma Abordagem para Desenvolvimento de Serviços Baseados em Web Services Faculdade: Faculdade de Computação Grau: Mestre Convocação: Dezembro de 2003 A Universidade Federal de Uberlândia possui permissão para distribuir e ter cópias deste documento para propósitos exclusivamente acadêmicos, desde que a autoria seja devidamente divulgada. ___________________________________ iv Autor O AUTOR RESERVA OS DIREITOS DE PUBLICAÇÃO, E ESSE DOCUMENTO NÃO PODE SER IMPRESSO OU REPRODUZIDO DE OUTRA FORMA, SEJA NA TOTALIDADE OU EM PARTES SEM A PERMISSAO ESCRITA DO AUTOR. Dedico esta dissertação à memória de meu pai Paulo e irmãs Rita e Eliana, à minha irmã Ana Maria, à minha mãe Antonia, e em particular a minha esposa Célia e filhos Breno e Rita, por terem sempre acreditado na me apoiado realização deste trabalho. João Augusto Alves Pacheco v e Agradecimentos Agradeço a todos, que direto ou indiretamente permitiram que eu concluísse este trabalho: • A DEUS por me conceder força, paciência e fé; • Aos professores da Faculdade de Computação pelo apoio e incentivo; • Aos técnicos administrativos da Faculdade de Computação pelo apoio administrativo; • Ao Prof. Flávio de Oliveira Silva pelo apoio e paciência na utilização das ferramentas aqui necessárias; • Ao Prof. Adalton Lima de Aguiar pelo apoio e companheirismo de sempre; • A todos aqueles que acreditaram e confiaram em mim. Obrigado. vi Glossário de Acrônimos API Aplication Program Interface AXIS Apache eXtensible Interaction System B2B Business to Business B2BI Business to Business Integration CLR Common Language Runtime CPU Central Processing Unit CTS Common Type System CORBA Commom Object Request Broker Architecture DCOM Distributed Component Object Model DTD Document Type Description EAI Enterprise Apllication Integration EDI Eletronic Data Interchange EJB Enterprise JavaBeans EIS Enterprise Information System ERP Enterprise Resource Planning FTP File Transfer Protocol GUI Graphical User Interface HTTP Hiper Text Transfer Protocol ISO International Standard Organization IDL Interface Definition Language J2EE Java 2 Enterprise Edition JIT Just in time JRMI Java Remote Method Invocation JSP Java Server Pages vii JVMs Java Virtual Machines MEPs Message Exchange Patterns MSIL Microsoft Intermediate Language OMA Object Management Architecture OMG Object Management Group ORB Object Request Broker PDA Personal Digital Assistant RDF Resource Description Framework RRL Remote Reference Layer RPC Remote Procedure Call SGML Standard Generalized Markup Language SMTP Simple Mail Transfer Protocol SOAP Simple Object Access Protocol SOA Service Oriented Architecture UDDI Universal Description, Discovery and Integration UML Unified Modeling Language URI Unique Resource Identifier URL Unique Resource Location VAN Value Added Network XML eXtensible Markup Language W3C World Wide Web Consortium WS Web Services WSA Web Services Architecture WSDL Web Services Description Language WSIL Web Services Inspection Language WS-I Web Services Interoperability Organization viii Lista de Figuras Figura 01 - O conceito de procedimentos -------------------------------------------------------23 Figura 02 - Um programa chamando um procedimento remoto --------------------------23 Figura 03 - Arquitetura JRMI --------------------------------------------------------------------25 Figura 04 - Componentes da OMA --------------------------------------------------------------26 Figura 05 - Uma requisição enviada através do ORB----------------------------------------27 Figura 06 - Arquitetura DCOM ------------------------------------------------------------------29 Figura 07 - Aplicações Multicamadas -----------------------------------------------------------31 Figura 08 - Servidor de Comunicação-----------------------------------------------------------33 Figura 09 - Camada Web e Aplicação J2EE ---------------------------------------------------33 Figura 10 - Camada de Negócios e EIS----------------------------------------------------------34 Figura 11 - Servidor J2EE e Recipientes -------------------------------------------------------35 Figura 12 - Infraestrutura, Linguagens e Ferramentas -------------------------------------36 Figura 13 - CLR (Common Language Runtime)-----------------------------------------------38 Figura 14 - Suporte a Multilinguagem ----------------------------------------------------------40 Figura 15 - Arquitetura Básica - Web Services ------------------------------------------------44 Figura 16 - Representação das pilhas de um Web Services ---------------------------------47 Figura 17 - Camadas da Pilha de Transporte -------------------------------------------------48 Figura 18 - Camadas da Pilha de Descrição---------------------------------------------------50 Figura 19 - Representação da Pilha de Descoberta-------------------------------------------53 Figura 20 - Representação de uma Arquitetura Completa ---------------------------------55 Figura 21 - Exemplo do uso de XML ------------------------------------------------------------57 Figura 22 - Estrutura de uma mensagem SOAP ----------------------------------------------58 Figura 23 - Exemplo de um Envelope SOAP --------------------------------------------------59 Figura 24 - Exemplo de uma Mensagem SOAP - Pedido -----------------------------------60 Figura 25 - Exemplo de uma Mensagem SOAP - Resposta---------------------------------61 Figura 26 - Modelo de um Documento WSDL ------------------------------------------------62 Figura 27 - Exemplo da principal estrutura de um documento WSDL ------------------63 Figura 29 - Exemplo da utilização de tipos-----------------------------------------------------64 Figura 30 - Exemplo de uma operação mensagem-------------------------------------------65 Figura 31 - Exemplo de uma operação Request Response-----------------------------------66 Figura 32 - Exemplo de uma operação Request Response-----------------------------------67 Figura 33 - Exemplo de definição de um serviço----------------------------------------------68 Figura 34 - Estrutura básica de um registro UDDI ------------------------------------------69 Figura 35 - Solução Proposta----------------------------------------------------------------------73 Figura 36 - Diagrama das operações dos Web Services --------------------------------------79 Figura 37 - Código XML para especificação do tipo Assinante----------------------------80 Figura 38 - Definição do array de objetos Assinante, e do array de Strings -------------80 ix Figura 39 - Definição dos elementos na operação getAssinantesList -------------81 Figura 40 - Código WSDL da operação getAssinantesList -------------------------81 Figura 41 - Operações dentro do elemento <portType> ---------------------------------81 Figura 42 - Operação getAssinantesList ------------------------------------------------82 Figura 43 - Especificação do elemento <service> ----------------------------------------83 Figura 44 - Classes automaticamente geradas pela ferramenta WSDL2Java ----------83 Figura 45 - Web Service construído --------------------------------------------------------------85 Figura 46 - Aplicação Cliente ---------------------------------------------------------------------86 Figura 47 - Quadro Comparativo ----------------------------------------------------------------90 x Resumo A Internet desempenha nos dias de hoje um papel fundamental em qualquer organização que queira manter-se no mercado. Fazer compras, cotação do dólar, reserva de hotéis, são operações possíveis de serem executadas via Web. Apesar do avanço tecnológico existem serviços que ainda não estão facilmente disponíveis na Internet, como por exemplo, um serviço que cuide de todos os passos necessários para validar o crédito de um comprador, antes de realizar a compra. Isto acontece, porque desde o aparecimento das redes de computadores, a integração de aplicativos com características totalmente heterogêneas, tem sido um enorme desafio, e foram várias as tentativas realizadas para solucionar o desenvolvimento de aplicações distribuídas, desde sistemas operacionais distribuídos, sistemas operacionais de redes, usando arquiteturas como RPC (Remote Procedure Cal), ORB (Object Request Broker) e JRMI (Java Remote Method Invocation). Desta forma, a integração de aplicativos tem sido sempre deixada a cargo dos analistas e programadores, talvez porque as interfaces de sistemas (principalmente aquelas para integração de sistemas) são soluções proprietárias. Web Services, ou Serviços Web, apesar de ser uma evolução das diferentes tecnologias de comunicação em ambientes distribuídos, é voltada para uso na Internet, e uma solução para as dificuldades de integração entre aplicações distintas, pois sua idéia básica é prover funções (serviços) que possam ser acessados por outros serviços de qualquer lugar, independentemente de suas características. Com objetivos de verificar os resultados desta nova proposta de integração de serviços, foi projetado, desenvolvido e implantado neste trabalho, uma cadeia de Web services utilizando diferentes ambientes operacionais (Windows e Linux), a linguagem de programação JAVA, o servidor de aplicações Apache Tomcat e a plataforma Apache Axis para processamento das mensagens. xi Abstract Any organization that intends to stay running in today’s rough market has got to recognize the essential role that the Internet plays on it. Shopping, dollar exchanging or even booking a hotel room are all things you can do at the “click of a mouse”. In spite of the high-tech level achieved by online operations, some services are rarely found over the web. For instance, it is hard to find a service that provides the way for a buyer to validate its credit. The reason may lie in the difficulty on joining two totally different applications, and many were the experiments trying to overcome this issue. Take for example operational systems built up using RPC (Remote Procedure Call), ORB (Object Request Broker) and JRMI (Java Remote Method Invocation). Maybe is why the cooperation between two applications is becoming a task delegated to analysts and developers only. Besides the fact that the web services were generated for being used on network environments, it is mainly focused on Internet use, and maybe that is the solution for overcoming the difficulty on joining two different applications. The basic idea behind the “web services” is to provide services that can be accessed by any other services, no matter where or when. This work intends to verify the results of this new way of joining services, by projecting, developing and experimenting web services chains using different operational systems (such as Windows and Linux), the JAVA language, the applications server Apache Tomcat and the Apache Axis for message processing. xii Sumário AGRADECIMENTOS ------------------------------------------------------------------------------ VI GLOSSÁRIO DE ACRÔNIMOS --------------------------------------------------------------- VII LISTA DE FIGURAS ------------------------------------------------------------------------------- IX RESUMO ---------------------------------------------------------------------------------------------- XI ABSTRACT------------------------------------------------------------------------------------------ XII SUMÁRIO ------------------------------------------------------------------------------------------- XIII 1. Introdução------------------------------------------------------------------------------------------17 2. Estado da Arte em Processamento de Informações --------------------------------------20 2.1 Operação Remota ------------------------------------------------------------------------20 2.1.1 Chamada a Procedimento Remoto ---------------------------------------------------21 2.1.2 JRMI (Invocação de Metodo Remoto em Java) ------------------------------------23 2.2 Objetos Distribuídos --------------------------------------------------------------------25 2.2.1 CORBA (Common Object Request Broker Architecture) ------------------------25 2.2.1.1 ORB (Object Request Broker) ---------------------------------------------------27 2.2.1.2 IDL (Interface Definition Language) -------------------------------------------27 2.2.2 DCOM (Distributed Component Object Model) -------------------------------28 2.3 Arquiteturas de Componentes para construção de Sistemas Distribuídos --29 2.3.1 Plataforma J2EE ------------------------------------------------------------------------30 xiii 2.3.1.1 Aplicações J2EE ------------------------------------------------------------------31 2.3.1.2 Clientes J2EE ----------------------------------------------------------------------32 2.3.1.3 Camada - Client--------------------------------------------------------------------32 2.3.1.4 Camada - WEB ---------------------------------------------------------------------33 2.3.1.5 Camada de Negócios -------------------------------------------------------------33 2.3.1.6 Camada - Sistema de Informações de Empresas (EIS)----------------------34 2.3.1.7 Recipientes J2EE ------------------------------------------------------------------35 2.3.2 Plataforma .NET ------------------------------------------------------------------------36 2.3.2.1 CLR (Linguagem Comum de Processamento) -------------------------------36 2.3.2.2 Suporte Multilinguagem ----------------------------------------------------------38 2.3.2.3 Montadores -------------------------------------------------------------------------38 2.3.2.4 Linguagem Intermediária---------------------------------------------------------38 2.3.2.5 Compiladores JIT------------------------------------------------------------------39 2.3.2.6 Desempenho------------------------------------------------------------------------40 2.3.2.7 Geração de Código usando UML -----------------------------------------------40 2.3.2.8 Componentes da Plataforma .NET ----------------------------------------------41 3. Web Services --------------------------------------------------------------------------------------41 3.1 Definição -----------------------------------------------------------------------------------42 3.2 Arquitetura Básica-----------------------------------------------------------------------43 3.2.1 Componentes ----------------------------------------------------------------------------45 3.2.2 Partes -------------------------------------------------------------------------------------45 3.2.3 Operações --------------------------------------------------------------------------------46 3.3 Arquitetura Estendida ------------------------------------------------------------------46 3.4 Pilhas de um Web Service ------------------------------------------------------------47 3.4.1 Pilha Transporte ------------------------------------------------------------------------48 3.4.1.1 Camada de Transporte ------------------------------------------------------------48 3.4.1.2 Camada de Empacotamento------------------------------------------------------49 3.4.1.3 Camada de Extensão --------------------------------------------------------------49 xiv 3.4.2 Pilha Descrição -------------------------------------------------------------------------49 3.4.2.1 Camada de Interface --------------------------------------------------------------50 3.4.2.2 Camada de Implementação-------------------------------------------------------51 3.4.2.3 Camada de Política ----------------------------------------------------------------51 3.4.2.4 Camada de Apresentação---------------------------------------------------------51 3.4.2.5 Relacionamento entre WS--------------------------------------------------------51 3.4.3 Pilha Agências de Divulgação-------------------------------------------------------52 3.4.3.1 Camada de Inspeção --------------------------------------------------------------53 3.4.3.2 Camada de divulgação ------------------------------------------------------------53 3.4.3.3 Camada de Descoberta------------------------------------------------------------54 3.5 Arquitetura Completa ------------------------------------------------------------------54 3.6 Tecnologias Padronizadas para Web Services ---------------------------------55 3.6.1 XML (eXtensible Markup Language) -----------------------------------------------55 3.6.1.1 Exemplo do uso de XML ---------------------------------------------------------56 3.6.2 SOAP (Simple Object Acess Protocol) ----------------------------------------------57 3.6.2.1 Exemplo de um Envelope SOAP------------------------------------------------59 3.6.2.2 Exemplo de uma Mensagem SOAP – Pedido e Resposta -------------------60 3.6.2.3 Seqüência de procedimentos -----------------------------------------------------61 3.6.3 WSDL (Web Service Description Language) --------------------------------------61 3.6.3.1 Definições --------------------------------------------------------------------------63 3.6.3.2 Tipos (Types)-----------------------------------------------------------------------64 3.6.3.3 Mensagens --------------------------------------------------------------------------64 3.6.3.4 Operações---------------------------------------------------------------------------65 3.6.3.5 Ligações-----------------------------------------------------------------------------66 3.6.3.6 Serviços -----------------------------------------------------------------------------67 3.6.4 UDDI (Universal Description, Discovery and Integration) ---------------------68 3.6.5 O modelo de Segurança e Qualidade de Serviço ----------------------------------69 3.6.5.1 Auditoria de defesa----------------------------------------------------------------69 3.6.5.2 Autenticação------------------------------------------------------------------------69 xv 3.6.5.3 Obrigação ---------------------------------------------------------------------------70 3.6.5.4 Permissão ---------------------------------------------------------------------------70 3.6.5.5 Política ------------------------------------------------------------------------------70 3.6.6 O modelo de Gerenciamento ----------------------------------------------------------70 3.6.6.1 Elemento Físico--------------------------------------------------------------------70 3.6.6.2 Capacidade de Gerenciamento---------------------------------------------------70 3.6.6.3 Configuração de Gerenciamento ------------------------------------------------71 3.6.6.4 Gerenciador-------------------------------------------------------------------------71 4. Estudo de caso -------------------------------------------------------------------------------------72 4.1 Cenário --------------------------------------------------------------------------------------72 4.2 Solução Proposta ------------------------------------------------------------------------72 4.3 Ambiente de Implementação ------------------------------------------------------------74 4.3.1 Fundação Apache -----------------------------------------------------------------------74 4.3.2 Apache Axis (Apache eXtensible Interaction System) ----------------------------74 4.3.3 TOMCAT --------------------------------------------------------------------------------76 4.4 Especificação da Cadeia de Web Services ------------------------------------------------76 4.4.1 Identificação dos Requisitos-----------------------------------------------------------77 4.4.2 Geração das especificações dos Web Services--------------------------------------79 4.4.3 Geração dos Códigos dos Web Services ---------------------------------------------83 4.4.4 Implantação dos Web Services -------------------------------------------------------84 4.4.5 Usando os Web Services ---------------------------------------------------------------85 4.5 Avaliação --------------------------------------------------------------------------------------86 5. Conclusões e Trabalhos Futuros -------------------------------------------------------------90 6. Referência Bibliográfica ----------------------------------------------------------------------92 xvi 1. Introdução Um fato comum na rotina de um fornecedor de produtos é o cliente realizar um pedido ou uma compra direta, e o vendedor se deparar com a necessidade da aprovação do crédito do cliente. Esta situação sempre existiu no mundo dos negócios, e bem antes do uso da informática como facilitadora, ela era resolvida de alguma maneira. Na maioria das vezes o problema é resolvido com uma verificação no histórico do cliente, um telefonema a um sistema público de proteção ao crédito, uma consulta ao departamento de crédito da empresa, etc. e, com base nas informações recebidas, o fornecedor executa as operações necessárias para concretizar a operação de venda. Apesar da evolução das tecnologias e o advento da informática, a rotina do vendedor para aprovação do crédito do cliente não alterou muito, porém o volume de dados (clientes, mercadorias, fornecedores, bancos, vendedores) cresce dia a dia, necessitando de melhores recursos para armazenamento dos dados, rapidez de acesso e, segurança na consulta às informações, para uma tomada de decisão mais acertada. O avanço das tecnologias no mundo da computação permitiu que vários serviços, que antes eram executados manualmente, fossem informatizados, e assim surgia também um novo desafio que era a necessidade de integração das aplicações. Na verdade, a necessidade de integração entre aplicações existe há, aproximadamente, trinta anos, pois novas linguagens de programação, sistemas operacionais, arquiteturas e equipamentos sempre surgem com a evolução das tecnologias e, assim ganha-se em poder computacional, mas nem por isso diminuem os problemas que a geração passada da área de desenvolvimento de sistemas enfrentava, e hoje, continuam talvez até com maior complexidade, já que uma enorme heterogeneidade de hardware e software coexiste dentro das organizações. Ao mesmo tempo em que ocorriam evoluções nas arquiteturas das plataformas computacionais, aconteciam também modificações consideráveis nas arquiteturas dos sistemas, provocando a migração para arquiteturas distribuídas. Um Sistema Distribuído, segundo Tanembaum, é aquele que executa processos em um conjunto de máquinas sem memória compartilhada, máquinas estas que aparecem como um único computador para seus usuários [06]. Em um sistema distribuído, existe a possibilidade de integração entre objetos residentes em uma mesma máquina, ou em máquinas diferentes. Quando ocorre entre máquinas diferentes, existe a necessidade da transferência de dados entre elas e, para a realização de tal operação necessita-se da chamada de métodos remotos, que corresponde a objetos comunicando-se como se estivessem em uma mesma máquina. Com o objetivo de um melhor desempenho para as aplicações, surgiu a necessidade de distribuição de processamento em um ambiente cliente/servidor, ou seja, um modelo necessário para a execução de uma aplicação em qualquer lugar da rede. Criou-se então o modelo RPC (Remote Procedure Call) [29], desenvolvido pela Sun Microsystems, e que segundo Tanenbaum, é o método que permite aos programas chamarem procedimentos localizados em outras máquinas, alicerçado no paradigma cliente/servidor [06]. Disponibilizando suas interfaces, esse primeiro conceito de middleware [35] tornou possível a execução de uma mesma aplicação em plataformas diferentes, e inicialmente, sob o paradigma de programação estruturada, foi implantado em diversos sistemas. Com o advento do desenvolvimento orientado a objetos, surgiram novos middlewares que se enquadravam nesse novo paradigma. Os mais conhecidos são a CORBA (Commom Object Request Broker Architecture), DCOM (Distributed Component Object Model) e RMI (Remote Method Invocation) Porém, essas tecnologias apresentavam muitas vezes dificuldades de implementação que de algum modo limitaram seus usos. Algumas dessas dificuldades são: dependência de redes de valor agregado (VAN – Value Added Network), custos operacionais, falta de interoperabilidade, baixo desempenho, etc. Diante do exposto, a integração dos diversos sistemas existentes torna-se complexa, principalmente com os sistemas legados, e assim, são diversas tentativas para a criação de padrões que possibilitem a integração dos vários sistemas, porém muitas vezes sem o sucesso desejado, pois são inúmeras as tecnologias e somente um esforço conjunto conseguiria um padrão. Em 1998, o consórcio W3C (World Wide Web Consortium) iniciou um trabalho de padronização de uma tecnologia para apresentação de dados denominada XML (eXtensible Markup Language) [15], ou seja, uma linguagem para definir a estrutura das informações na Web, através de marcadores (Markups). Os desenvolvedores perceberam o potencial da XML para a integração de sistemas, por se tratar de uma representação abstrata independente de plataforma e orientada à descrição dos dados. Em 1999 surge o protocolo SOAP (Simple Object Access Protocol) [14] criado por Dave Winer da Useland Software, Bob Atikinson e Mohsen Al-Ghosein, ambos engenheiros da Microsoft. Um protocolo simples, que utiliza chamadas de procedimentos remotos (RPC), e formatação XML. Em 2000, com a especificação do SOAP 1.1, a comunidade de tecnologia da informação identifica uma nova maneira de publicar, localizar e chamar um serviço através da Internet, independentemente de localização e características do software, ao que denomina de Web Service ou Serviço Web. Os objetivos deste trabalho são: apresentar os aspectos filosóficos e arquiteturais de Web Services, implantar uma infraestrutura para o desenvolvimento e implantação de uma cadeia de Web Services, e desenvolver um estudo de caso a fim de verificar os verdadeiros avanços conseguidos com esse novo modelo de integração de aplicações. O Capítulo 2 apresenta um breve histórico sobre as tecnologias criadas para o desenvolvimento de sistemas distribuídos, tais como RPC, JRMI, CORBA, DCOM, .NET, J2EE, etc; O Capítulo 3 apresenta os aspectos filosóficos e arquiteturais de Web Services, incluindo a arquitetura estendida e, uma abordagem dos padrões utilizados em seu desenvolvimento: XML, SOAP, WSDL e UDDI; O Capítulo 4 apresenta uma seqüência de procedimentos adotada para o desenvolvimento e implantação de um estudo de caso, onde foi adotado o Web Service como solução; O Capitulo 5 apresenta as conclusões conseguidas ao final do trabalho e algumas propostas para trabalhos futuros. 2. Estado da Arte em Processamento de Informações Como já dito, segundo Tanenbaum, um Sistema Distribuído é aquele que executa processos em um conjunto de máquinas sem memória compartilhada, máquinas estas que aparecem como um único computador para seus usuários [06]. Os sistemas distribuídos apresentam vantagens advindas desta distribuição tais como disponibilidade, desempenho, otimização de custos, distribuição de tarefas e, escalabilidade. Entretanto, surgem as características não desejáveis tais como: afastamento, concorrência, assincronismo, heterogeneidade e autonomia e, a fim de diminuir tais efeitos, têm sido desenvolvido diversos modelos e arquiteturas. Atualmente há uma tendência de construir sistemas abertos baseados em objetos distribuídos, pois desta forma os projetistas podem desenvolver e implementar sistemas mais rapidamente a partir do aproveitamento de objetos distribuídos disponíveis na rede, e os fornecedores podem ofertar aplicações com recursos específicos, como por exemplo, cotação de preços de determinados itens, para algum cliente, com certa quantidade desejada e com um determinado prazo de entrega. A seguir é apresentado um histórico evolutivo das tecnologias desenvolvidas para a criação de sistemas distribuídos. 2.1 Operação Remota Um objeto distribuído é essencialmente um componente, uma peça de software com inteligência auto contida, que pode interoperar com outros objetos distribuídos através de sistemas operacionais, redes, linguagens, aplicações, ferramentas e equipamentos diversos [08]. Objetos distribuídos não trabalham sozinhos, pois em princípio são construídos para interagir com outros objetos e, para isto, existe a necessidade de arquiteturas que torne isto possível. Antes de comentarmos algumas arquiteturas mais utilizadas no mercado, é importante examinarmos como se realiza uma chamada de procedimentos. 2.1.1 Chamada a Procedimento Remoto O modelo de chamada a procedimento remoto ou RPC (Remote Procedure Call) é baseado na necessidade de se executar um componente de uma aplicação em qualquer local da rede e, para isto, utiliza uma construção tradicional de programação - a chamada a procedimentos [29]. Na comunicação em um ambiente cliente/servidor, a solicitação RPC de um determinado serviço de um componente de recurso (servidor) é emitida pelo componente de processos (cliente), e o local do componente de recursos é transparente para o usuário (cliente), assim, RPCs fornecem ferramentas poderosas e necessárias ao desenvolvimento de programas distribuídos. Existem três tarefas fundamentais realizadas por uma implementação RPC: • Localização ("Binding"): encontrar onde se localiza um procedimento ou serviço remoto; • Comunicação: providenciar uma conexão de rede confiável que permita a transmissão de requests e responses, que funcionará como um canal de comunicação entre o cliente e o servidor; • Interface com o código do usuário: converter uma chamada de procedimento em um bloco de dados (mensagem) para que possa trafegar através da conexão, e remontar a mesma chamada de procedimento no outro extremo (remoto) a partir desta mensagem. No lado cliente, um procedimento Stub tem a mesma assinatura (nome, argumentos e tipo de retorno) que o procedimento remoto, e sua função é empacotar os argumentos em uma mensagem para ser enviada através do canal de comunicação. Quando uma mensagem contendo os resultados enviados pelo servidor surge neste canal, o Stub extrai o valor de retorno antes de passá-lo para o código que chamou o procedimento. O complemento do Stub, localizado no lado do servidor, é chamado de Skeleton e sua função é converter as mensagens que chegam pelo canal de comunicação em argumentos e, chamar as implementações dos procedimentos requisitados. Quando o procedimento termina a execução, o valor de retorno é convertido em uma mensagem que é remetida ao Stub cliente. A Figura 01 apresenta um modelo conceitual para chamadas a procedimentos. P ro g ra m a P rin c ip a l Pro ce d . 01 Pro ce d . 02 Pro ce d . 04 Pro ce d . 03 Pro ce d . 05 C o m p u ta d o r Figura 01 - O conceito de procedimentos RPC utiliza o mesmo comportamento procedimental de um programa convencional, permitindo que procedimentos possam estar localizados em máquinas distintas. A Figura 02 ilustra este conceito. P ro g ra m a P rin c ip a l Pr o c e d . 01 Pro ce d . 02 Pr o c e d . 04 Pro ce d . 03 Pr o c e d . 05 C o m p u ta d o r A Pro ce d . 06 Pro ce d . 07 C o m p u ta d o r B Figura 02 - Um programa chamando um procedimento remoto 2.1.2 JRMI (Invocação de Metodo Remoto em Java) Cada linguagem de programação implementa o mecanismo de RPC de uma maneira e, o RMI nada mais é do que a implementação de RPCs em Java, ou seja, é uma tecnologia de gerenciamento de objetos remotos, porém os objetos-cliente e os objetos– servidor devem ser escritos obrigatoriamente em Java [24]. RMI é um mecanismo que permite a um objeto instanciado em uma Máquina Virtual Java (interpretador de “bytecode”) invocar métodos de um objeto que foi instanciado em outra Máquina Virtual Java, ou seja, como Java é uma linguagem orientada a objetos, JRMI não realiza chamadas a procedimentos remotos, mas a métodos de um objeto localizado em uma máquina remota. O funcionamento do RMI consiste basicamente em dois programas, um funcionando como cliente e outro como servidor. O servidor instancia objetos remotos, o referencia com um nome e faz um "BIND" (ligação) dele numa porta, onde este objeto espera por clientes que invoquem seus métodos. Já o cliente referencia remotamente um ou mais métodos de um objeto remoto. É tarefa do RMI, disponibilizar os mecanismos para que a comunicação entre cliente e servidor seja possível. Como pôde ser visto, o RMI nada mais é do que a implementação de RPCs em Java, e por isto executa basicamente as mesmas três tarefas fundamentais que precisam ser realizadas por uma implementação RPC: • Localizar Objetos Remotos: encontrar onde se localiza um procedimento ou serviço remoto; • Comunicar-se com Objetos Remotos: providenciar uma conexão de rede confiável que permita a transmissão de requests e responses, que funcionará como um canal de comunicação entre o cliente e o servidor; • Carregar "bytecodes" de objetos móveis - Como o RMI permite que objetos remotos sejam passados como parâmetros numa função, ele fornece os mecanismos necessários para carregar o código dos objetos remotos. O RMI usa o mecanismo padrão empregado em sistemas RPCs, para comunicar-se com objetos remotos, que são "stubs" e "skeletons". Além destes, mais duas camadas compõem uma arquitetura JRMI: • Camada de Referência Remota – Responsável pela interface para os Stubs e Skeletons, mascarando as diferenças entre os diversos tipos de protocolos do servidor; • Transporte - Manipula os detalhes da conexão e, providencia um canal de comunicação entre as JVMs (Java Virtual Machines) que executam o código cliente e o servidor; A Figura 03 apresenta uma arquitetura JRMI com as três camadas: stubs e skeletons, referência remota e transporte. CL IEN T E S ER V ID O R S tu b s S k e le to n s C a m a d a d e R e f e r ê n c ia R e m o t a S i ste m a RM I T ra n sp o rte T ra n sp o rte Figura 03 - Arquitetura JRMI 2.2 Objetos Distribuídos Diante da necessidade dos computadores estarem em redes, formando assim um ambiente computacional distribuído e possibilitando a troca de recursos e dados entre si, foram criados alguns padrões de middleware como o CORBA, da OMG (Object Managemennt Group), e o DCOM da Microsoft. A proposta destes padrões é oferecer a possibilidade de interface e comunicação de objetos para que estes possam se relacionar independentemente da forma como foram implementados e da arquitetura à qual pertencem. 2.2.1 CORBA (Common Object Request Broker Architecture) Gerado pelo consórcio OMG, com mais de 800 companhias associadas das mais diferentes áreas (IBM, Canon, DEC, Philips, Sun, Apple, etc, além de respeitados usuários como Citicorp, Britsh, Telecom, América Airlines, e outros), trata-se de um importante projeto de arquitetura de objetos distribuídos. Por possuir seu próprio padrão denominado DCOM, a Microsoft não faz parte deste consórcio [07] [05]. Suas especificações são escritas em uma linguagem de definição de interface neutra chamada IDL (Interface Definition Language) [30], cuja gramática é um subconjunto da linguagem C++, e que fixa as bases dos componentes utilizados por ela. Tais componentes devem ter portabilidade para as linguagens, ferramentas, sistemas operacionais e redes. A IDL é utilizada para especificar interfaces entre o objeto servidor e o objeto cliente que o chama, independente de sistemas operacionais e linguagens de programação, para os serviços e componentes que residem em um barramento CORBA, permitindo assim que objetos, clientes e servidores, escritos em linguagens totalmente diferentes possam trocar interações. A CORBA é uma arquitetura que provê uma estrutura para integração entre objetos diferentes, entretanto, ele é apenas um pedaço de uma arquitetura denominada OMA (Object Management Architecture) [27]. Conforme a Figura 04, seus principais componentes são: • Núcleo ORB (Object Request Broker) - manipula requisições entre objetos; • Serviços CORBA a Objetos - definem serviços ao nível de sistema que ajudam a gerenciar e manter objetos; • Facilidades CORBA - definem facilidades e interfaces no nível de aplicação manipulação de dados e armazenamento; • Objetos de Aplicação - são os objetos no nível visível de aplicação. O b je t o s d e Ap lic a ç ã o F a c ilid a d e s CORBA N ú c le o O R B S e r v iç o s a O b je t o s Figura 04 - Componentes da OMA O ORB é o componente com maior responsabilidade dentro da arquitetura OMA, pois permite que objetos façam e recebam requisições de métodos em um ambiente distribuído heterogêneo. A CORBA é uma especificação das interfaces do ORB, ou melhor, um modelo concreto para a especificação abstrata disponível no documento que define a arquitetura OMA. 2.2.1.1 ORB (Object Request Broker) O ORB, é o componente mais importante da arquitetura CORBA, sendo suas responsabilidades intermediar todas as transferências entre cliente e servidor, e fazer com que a transação seja transparente para cada uma das partes durante todo o processo. CLIENTE OR B IM P LEM ENTAÇÃO do OBJETO Figura 05 - Uma requisição enviada através do ORB A Figura 05 apresenta uma requisição proveniente de um cliente, sendo enviada pelo intermédio do ORB, a uma implementação de objeto. O ORB é responsável pela localização do objeto ao qual se destina a requisição, assim como, o envio dos parâmetros da requisição no formato aceito por este objeto. Também é função do ORB, o retorno de parâmetros de saída da requisição para o cliente, se assim houver. 2.2.1.2 IDL (Interface Definition Language) A função da linguagem de definição de interface da CORBA é descrever as interfaces das implementações de objetos, acessadas por seus clientes. Uma interface descrita em IDL especifica o formato das chamadas providas pelo objeto e cada um dos parâmetros de entrada e saída necessários para efetuar a operação. Para o cliente ou usuário, a interface representa uma necessidade, pois quando ele envia uma requisição, uma resposta certamente deverá retornar. Porém, para aquele que implementa o objeto, a interface representa uma obrigação, pois ele deve implementar, em alguma linguagem, todas as operações especificadas na definição da interface. As especificações IDL são formadas por: Definições de Tipos, Constantes, Exceções, Módulos e Interfaces. Este conjunto de definições compõe um arquivo de extensão .idl, que contém as informações necessárias para a interface entre o cliente e a implementação do objeto, tendo como elemento intermediário o ORB. 2.2.2 DCOM (Distributed Component Object Model) Desenvolvido pela Microsoft, trata-se de uma extensão do modelo de objeto baseado em componentes (COM) voltado para ambientes de redes, e assim como CORBA, separa a interface dos objetos da implementação requerendo que todas as interfaces sejam declaradas usando a linguagem de definição de interface (IDL) [09]. Uma interface DCOM é um conjunto de chamadas de funções tecnicamente denominadas como métodos e, assim como o CORBA, serve como ligação entre o cliente e o servidor, pois, através da tecnologia DCOM, objetos realizam chamadas a métodos de outros objetos remotos de maneira transparente. As chamadas a métodos de objetos remotos se comportam para a aplicação cliente, da mesma forma como se comportam chamadas a métodos de outros objetos no mesmo processo ou na mesma máquina que hospeda a aplicação, o que difere e é transparente, é que o programa executável remoto não se encontra no espaço de endereço da máquina local, mas sim em uma máquina remota na rede local ou na Internet. Para requisitar um serviço, a aplicação cliente faz chamada ao método implementado pelo objeto remoto que age como o servidor no modelo cliente-servidor. Os objetos DCOM não mantêm seu estado, ou seja, os clientes não podem reconectar-se para a mesma instância de um objeto em uma conexão posterior, pois, os objetos DCOM não possuem um identificador. O que de fato acontece é que os clientes recebem um ponteiro para uma interface, com informações sobre a localização do objeto na rede, e para acessar os métodos do objeto são realizadas chamadas indiretas aos métodos expostos pela API (Application Programing Interface) do objeto. Objetos DCOM podem ser escritos em diversas linguagens de programação tais como: Java, C++, VB, Delphi, ou até mesmo Cobol. O ORB DCOM gerencia as interfaces que os objetos expõe através de suas APIs expressas em uma linguagem de definição especial que pode ser utilizada para descrever os métodos implementados pelos objetos. O funcionamento de um modelo de arquitetura DCOM é mostrado na Figura 06. COM Execução Cliente Prov edor Segurança DCE RPC Protocolo de Pilha COM Execução Prov edor Segurança Componente DCE RPC Protocolo de Pilha Protocolo de Rede DCOM Figura 06 - Arquitetura DCOM 2.3 Arquiteturas de Componentes para construção de Sistemas Distribuídos A Internet representa hoje um instrumento fundamental para qualquer empresa que queira se manter no mercado competitivo e, estas mesmas empresas têm encontrado nesta classe de ferramentas novas maneiras de conduzir seus negócios. Em diferentes momentos, as empresas vêm explorando o potencial da Internet das mais diversas formas e vivendo um novo modelo de organização. Realizar cotações e compras on-line, controlar saldos bancários, leitura de jornais, notícias do tempo, cotação do dólar, entre outras, são possibilidades disponibilizadas pela Web. Entretanto, existem alguns serviços que ainda não estão facilmente disponíveis, como: saber se um médico tem disponibilidade de consulta em determinado dia; se o fornecedor tem em estoque o tipo de peça desejada pelo cliente; ligar o ar condicionado de uma residência, a qualquer momento e de qualquer lugar, através de um dispositivo inteligente. Possivelmente, esses serviços podem ainda não estar disponíveis, por não existirem padrões para integração de aplicações proprietárias, pois cada empresa possui sua forma de armazenar, descrever e processar seus serviços, e assim, fornecedores de tecnologias e empresas têm feito investimentos para adaptar sua infra-estrutura para trabalhar neste novo cenário. Dois modelos de plataformas para desenvolvimento de aplicações voltadas para Internet têm sido testadas nos dias atuais. São eles: Java 2 Enterprise Edition (J2EE) da Sun Microsystem e .NET da Microsoft, que apesar de terem sido idealizados com princípios arquiteturais similares, foram construídos a partir de diferentes bases filosóficas. .NET tem seus objetivos dirigidos ao sistema operacional Windows com uma linguagem proprietária, já o modelo J2EE tem seus objetivos adotados em padrões abertos. Entretanto, ambas fornecem arquiteturas de componentes para a construção de aplicações distribuídas, oferecendo recursos similares para o desenvolvimento de aplicações Internet e Web Services. 2.3.1 Plataforma J2EE A plataforma Java2 Enterprise Edition ou J2EE utiliza um modelo de aplicação distribuída em multicamadas (multitier). A aplicação lógica é dividida em componentes de acordo com sua função, e os vários componentes que compõem uma aplicação J2EE são instalados em diferentes máquinas, dependendo do ambiente multicamada J2EE, ao qual o componente da aplicação pertence [11]. A Figura 07 apresenta duas aplicações multicamadas, divididas conforme descrição abaixo: • Client – Camada de componentes que rodam na máquina do cliente; • Web – Camada de componentes que rodam no servidor J2EE; • Business – Camada de componentes que rodam no servidor J2EE; • Enterprise Information System (EIS) – Camada de Softwares que roda no servidor EIS. Apesar das aplicações multicamadas J2EE consistirem de três ou quatro camadas, elas são geralmente consideradas de três camadas, porque se encontram distribuídas em três diferentes locais ou máquinas: Máquina Cliente (Camada Client), Máquina Servidor J2EE (Camadas Web e Business) e, Máquina de Banco de dados ou Sistemas legados para suporte (Camada EIS). Contudo não é a distribuição em máquinas diferentes que a caracteriza como multicamada, mas sim o poder de abstração na fase de projeto, de poder quebrar o problema em problemas menores. J2EE Aplicação 1 Aplicação Cliente J2EE Aplicação 2 Páginas HTML Páginas JSP Enterprise Beans Base de Dados Enterprise Beans Base de Dados Camada Cliente Máquina Cliente Camada WEB Camada Negócios Camada TIES Máquina Servidor J2EE Máquina BD Servidor Figura 07 - Aplicações Multicamadas 2.3.1.1 Aplicações J2EE São construídas essencialmente de componentes, que são unidades de software com inteligência auto contida, e que podem interoperar com outros componentes através de sistemas operacionais, redes, linguagens, aplicações, ferramentas e equipamentos diversos. Uma especificação J2EE define os seguintes componentes: • Aplicações cliente e applets - Componentes que rodam no cliente; • Java Servlet e Java Server Pages (JSP) - Componentes Web que rodam no servidor; • Enterprise JavaBeans (EJB) - Componentes de negócios que “rodam” no servidor. Componentes J2EE são escritos em JAVA e são compilados da mesma forma que qualquer outro programa da linguagem. 2.3.1.2 Clientes J2EE Um cliente J2EE pode ser uma aplicação normal ou uma aplicação Web. Clientes Web - Um cliente Web consiste de duas partes: Dynamic Web Pages que contém vários tipos de linguagens markup (HTML, XML, e outras), geradas pelos componentes Web residentes na camada Web, e um Web Browser, que mostra as páginas recebidas do servidor. Um cliente Web é algumas vezes chamado de thin client, por não realizar algumas atividades como pesquisa a banco de dados, executar regras complexas de negócios, ou conectar-se a sistemas legados. Aplicações Cliente - Roda na máquina do cliente e provê recursos para os usuários manipularem tarefas que necessitam de uma interface , como o GUI (Graphical User Interface). 2.3.1.3 Camada - Client A Figura 08 apresenta os vários elementos que podem fazer parte da camada cliente. O cliente se comunica diretamente com a camada de negócios (business tier) que se encontra no servidor J2EE, ou através de páginas JSP ou servlets na camada Web, se o cliente se encontra em um Browser Camada Cliente Componentes: Navegador Web Páginas Web, Applets e JavaBeans Camada Web Camada de Negócios Servidor J2EE Figura 08 - Servidor de Comunicação 2.3.1.4 Camada - WEB Componentes Web J2EE podem ser servlets ou páginas JSP . Servlets são classes escritas em Java que dinamicamente processam requisições e constroem respostas. Páginas JSP são textos baseados em documentos que executam com servlets, mas permitem uma forma mais simples para criar conteúdos estáticos. Assim como a camada cliente, mostrado na Figura 09, a camada Web pode incluir componentes Java beans para gerenciar o recebimento e envio de mensagens para o enterprise beans localizado na camada de negócios para processamento. Camada Web Aplicação Cliente Páginas JSP Componentes JavaBeans (Opcionais) Componentes: Navegador Web Páginas Web, Applets e JavaBeans Camada de Negócios Servidor J2EE Figura 09 - Camada Web e Aplicação J2EE 2.3.1.5 Camada de Negócios O Código de Negócios, que é a lógica dos processos empresariais, de empresas tais como: Banco, Varejistas ou Financeira, é implementada por enterprise beans rodando na camada de negócios. A Figura 10 mostra como um componente enterprise bean recebe dados dos programas dos clientes, processa (se necessário), e envia para a camada de informações do sistema para armazenamento. Camada Camada Negócios EIS Ba se de Da dos e Sistem as Le gados Aplicação Cliente Entidade Be ans Ses são Be ans Com ponentes JavaBea ns (Opciona is ) P á gina s JS P Componentes: Navegador Web Páginas Web, Applets e JavaBeans Servidor J2EE Figura 10 - Camada de Negócios e EIS Existem três tipos de Enterprise Beans: • Sessão Beans – Representa uma sessão finita com o cliente, ou seja, há o estabelecimento da sessão, a fase de transferência de dados e quando há o encerramento da sessão, os dados da sessão são perdidos; • Entidade Beans – Representa uma capacidade de comunicação que pode armazenar os dados em uma fila de uma tabela do banco de dados. • Mensagens Beans – Combina serviços de uma sessão Bean e um Java Message Service (JMS) , permitindo que um componente de negócio receba mensagens JMS assíncronas, de uma entidade Beans. 2.3.1.6 Camada - Sistema de Informações de Empresas (EIS) A camada EIS gerencia um sistema de informações entre empresas incluindo sistemas de infraestrutura tais como ERP (Enterprise Resource Planning), CRM (Customer Relationship Management) transações com mainframes, Sistemas de Banco de Dados, e outros sistemas de informações. 2.3.1.7 Recipientes J2EE São os responsáveis pela interface entre um componente e os clientes, provendo serviços transparente para ambos. Antes que uma Web, entreprise bean ou, componente de aplicação do cliente seja executado, ele precisa ser juntado ao J2EE e colocado dentro de seu recipiente, pois são eles que disponibilizam serviços de suporte de customização oferecidos pelo servidor J2EE como: Segurança, gerenciamento de transações, conectividade remota. A Figura 11 apresenta um servidor J2EE e seus recipientes. S e rvidor J2EE Na ve gador Se rv le t Aplica ç ã o Cliente Re cipie nte Aplic a çã o Clie nte M áquina Clie nte Pá gina J SP R ec ipie nte W E B Ba se de Da dos Em pres a Be a n Em pres a Be a n R ec ipie nte EJB Figura 11 - Servidor J2EE e Recipientes • Servidor J2EE – Porção runtime da plataforma J2EE. Um servidor J2EE disponibiliza EJB e Recipientes Web; • Recipiente EJB – Gerencia a execução dos Java Beans de empresas cação J2EE. Beans de empresas e seu recipiente rodam no servidor J2EE; • Recipiente Web – Gerencia a execução das páginas JSP e componentes Servlets. Web Componentes e seus recipientes rodam no servidor J2EE; • Recipiente da Aplicação do Cliente – Gerencia a execução dos componentes da aplicação do cliente. Aplicação do cliente e seu recipiente rodam no cliente; • Recipiente Applet– Gerencia a execução dos Applets. Consiste de um Web Browser e Java Plug-in rodando juntos no cliente. 2.3.2 Plataforma .NET Um conjunto de tecnologias de software para conectar informações, pessoas, sistemas e dispositivos [26]. Trata-se então de uma plataforma que permite o desenvolvimento de sistemas, disponibilizando informações e interagindo com uma variedade de outras aplicações e dispositivos na Internet, independentemente das plataformas ou linguagens utilizadas. É suportado por um serviço de processamento denominado CLR (Common Language Runtime) ou Linguagem Comum de Processamento, uma arquitetura básica (framework base), linguagens e ferramentas, conforme Figura 12. O processamento e as bibliotecas oferecem serviços às aplicações e são, por isso muito úteis por pouparem tempo dos programadores e facilitarem a utilização de código. VB C++ C# JScript .... ASP.NET Padrões Windows Dados e XML Biblioteca Básica de Classes Visual Studio .NET Especificação de Linguagem Comum Linguagem Comum de Execução Figura 12 - Infraestrutura, Linguagens e Ferramentas 2.3.2.1 CLR (Linguagem Comum de Processamento) A CLR é a infra-estrutura de base que executa as aplicações e permite que estas interajam com os outros componentes da arquitetura, conforme apresentado na Figura 13 [25]. Converte a forma na qual os programas foram compilados, usando uma linguagem intermediária, para o código de máquina, e fornece todos os serviços de suporte necessários às execuções dos programas, como: gerenciamento de memória, tratamento de exceções, compilação, segurança, etc. Sucintamente, a CLR pode ser vista como a funcionalidade de execução, à qual a arquitetura acrescenta as funcionalidades da infraestrutura. Bib lio te ca Bá sica d e Cla sse s S u p o rte S u p o rte d e L in h a CO M Co n d u to r V e rifica d o r d e T ip o s Co n tro le d e Ex ce çõ e s M e ca n ism o s p a ra S e g u ra n ça F e rra m e n ta s d e V e rifica çã o LI pa ra Com pila dor Na tivo Ge r e nc ia dor de Códigos Cole tor de Lix o Ca rre g a d o r d e Cla sse s Figura 13 - CLR (Common Language Runtime) 2.3.2.2 Suporte Multilinguagem As máquinas virtuais desenvolvidas anteriormente pela comunidade de linguagens de programação são orientadas a uma linguagem de programação. Alguns exemplos são: Pascal Virtual Machine (UCSD 1 p-machine), Warren Abstract Machine (para Prolog) e claro, Java Virtual Machine (JVM). A filosofia destas máquinas virtuais é basicamente: tenho a minha linguagem; quero uma máquina virtual para esta linguagem. A grande diferença na CLR é atualmente o suporte a cerca de 22 linguagens, incluindo C#, C++, Pascal, Java, Visual Basic, JScript, Cobol, Scheme, como ilustrado no topo da Figura 14. A CLR também abrange os diferentes paradigmas de programação nas linguagens atualmente suportadas: linguagens procedimentais, funcionais, orientadas a objetos e lógicas. 2.3.2.3 Montadores Depois de criado o arquivo de código, usualmente o que se faz é submetê-lo ao respectivo compilador para gerar um arquivo executável (PE – portable executable) ou uma biblioteca dinâmica (EXEs e DLLs no caso do Windows). Os arquivos ditos “executáveis” do .NET não são código-máquina para serem executados em uma CPU específica, o código gerado pelo compilador do .NET é um código escrito em uma linguagem intermediária denominada MSIL (Microsoft Intermediate Language), que posteriormente será colocada sobre o CLR para ser processada em uma CPU, em semelhança à Máquina Virtual Java. Cada arquivo contém uma parte de metadados, que serão usados pelo CLR para carregar todas as classes e recursos que o arquivo necessita para tratar as questões de segurança e alocação de memória necessária, etc. 2.3.2.4 Linguagem Intermediária A compilação de código-fonte gera código intermédio denominado Microsoft Intermediate Language (MSIL). A MSIL é independente da CPU e compreende tipos de objetos, instruções que criam e iniciam objetos, invocam métodos sobre objetos e que manipulam elementos de arrays diretamente. A grande vantagem da MSIL está na sua portabilidade, pois não está presa a nenhuma plataforma de CPU em particular, e isto significa que um arquivo PE que contenha MSIL pode ser executado em qualquer CPU desde que o sistema operacional nessa CPU abrigue a camada CLR da arquitetura .NET. 2.3.2.5 Compiladores JIT As instruções MSIL não são executadas diretamente pela CPU, pois o CLR compila estas instruções para instruções de CPU nativas. Quando o CLR carrega uma classe, associa a cada método o código de ligação (stub code). Quando um método é invocado, o código de ligação encaminha a execução do programa para o componente responsável por compilar os métodos MSIL em código nativo. Este componente é denominado Compilador Just-in-Time (Just-in-Time Compiler - JITter). Quando o JITter compila a MSIL de um método, o código de ligação é substituído pelo endereço do código compilado, e assim, em invocações futuras, o código nativo será executado sem envolver o compilador JIT no processo. A CLR está dotado de dois compiladores JIT: o compilador normal e o econômico (EconoJIT). O compilador normal examina a MSIL de um método e otimiza o código nativo resultante e, o compilador econômico é usado tipicamente em máquinas onde o custo de uso de memória e ciclos de CPU é alto, pois substitui simplesmente cada instrução pelo seu código nativo respectivo. Por isso o compilador econômico é mais rápido que o normal; no entanto, o código nativo produzido é significativamente menos eficiente. Tipicamente, na maioria das máquinas, o JITter é o normal. No entanto, para máquinas de pequeno porte, como os PDAs, o JITter é o econômico, pois requer menos memória para ser executado. C# IL IL C++ VB JScript Outras Base de Linguagens para o IL T em porary IL M etadata Asp .Net CLR Carregador de Classes DLL/Legados/pre-JIT DLL/Legacy/pre-JIT Código Nativ o Verificador M MSIL SIL OptIL EconoJIT JIT Código Nativ o Execução Segurança Figura 14 - Suporte a Multilinguagem 2.3.2.6 Desempenho A diferença de desempenho pode ser observada, pois afinal código compilado para uma plataforma de CPU específica simplesmente executa quando é invocado, enquanto que no ambiente CLR a compilação acontece em duas fases. Primeiro, o compilador passa pelo código fonte para produzir MSIL e só depois, em runtime, compila a MSIL para instruções nativas, de forma a executar efetivamente o código, o que requer mais memória e tempo de CPU. 2.3.2.7 Geração de Código usando UML A linguagem de modelagem UML (Unified Modeling Language) [28] é o padrão para modelar aplicações do .NET, o que torna possível fazer a correspondência direta entre um desenho de modelo em UML e o código fonte em qualquer uma das linguagens do .NET. É possível, por exemplo, modelar a estrutura global de uma aplicação em UML e, pedir ao .NET para gerar o esqueleto da mesma no código-fonte desejado. O reverse engineering também é suportado a partir de código-fonte pré-existente, o que significa que o .NET consegue gerar um modelo em UML do nosso programa, a partir do nosso código-fonte. 2.3.2.8 Componentes da Plataforma .NET • .NET Framework e Visual Studio .NET – São as ferramentas do desenvolvedor usadas para construir aplicações e XML Web Services. A .NET Framework é o conjunto de interfaces de programação que constitui o núcleo da plataforma .NET. O Visual Studio .NET é um conjunto de ferramentas independente da linguagem do desenvolvedor. • .NET Server Infrastructure - A Infra-estrutura para operar os XML Web Services baseia-se no Sistema Operacional Windows e no .NET Enterprise Servers, um conjunto de aplicações infra-estruturais para comercio eletrônico que opera os serviços XML. • Building Block Services – Serviços que constituem um conjunto integrado de XML Web Services pelo qual o usuário torna-se o centro e podendo controlar os dados. Entre eles esta o Passport (para identificação do usuário) e serviços de entrega de mensagens, arquivamento, gerenciamento das preferências do usuário, alindamento e outras funções. • .NET Device Software – Constituído do Widows XP, Widows ME, Widows CE, .NET framework e da .NET Compact Framework, possibilitando que toda uma nova geração de dispositivos inteligentes para a internet operem no universo .NET. 3. Web Services A sobrevivência das empresas no mercado competitivo depende fundamentalmente da estratégia competitiva e das parcerias comerciais entre si, pois nenhuma empresa existe sozinha. As parceiras requerem além de um bom relacionamento comercial, a integração de diversos processos compatíveis (B2BI – Business to Business Integration). Dessa forma é fundamental que a integração aconteça da melhor forma possível, ou seja, com velocidade, confiabilidade e segurança. Web Services tem despontado como uma ferramenta importante neste cenário. Um acontecimento fundamental para a consolidação deste novo conceito foi a formação da WS-I (Web Services Interoperability Organization), com o objetivo de padronização. O grupo reúne empresas tais como, IBM, Microsoft, SAP, BEA System, Fujitsu e outras. Outro fato a destacar é que este consórcio trabalha junto ao W3C (World Wide Web Consortium), entidade responsável pela padronização de diversas linguagens e protocolos de Internet, inclusive o SOAP (Simple Object Access Protocol) e de outros padrões fundamentais para o desenvolvimento de aplicações distribuídas. 3.1 Definição Há várias definições para Web Services, porém segundo a W3C Web Service Architecture Working Group, que é parte da W3C Web Services Activity, Web Services é [18]: “Um software identificado por uma URI (Unique Resource Identifier), cujas interfaces públicas e ligações são definidas e descritas usando XML e, sua definição pode ser descoberta por outros softwares. Estes sistemas podem então interagir com o Web Service de uma maneira prescrita por suas definições, usando mensagens em XML e transportadas por um protocolo da Internet”. Portanto, um WS é a comunicação transparente de máquina-para-máquina e aplicação-para-aplicacão, e bastando para isto ser capaz de entender SOAP, XML, WSDL (Web Services Description Language), uma linguagem que descreve parâmetros, sintaxe e métodos, UDDI (Universal Description, Discovery and Integration) [23], um diretório geral que se assemelha às páginas amarelas para descrição do serviço e HTTP (Hyper Text Transfer Protocol), protocolo para transferência de hiper textos na Internet. No centro desta iniciativa encontra-se o conceito de interoperabilidade conjunta, ou seja, a capacidade de sistemas diferentes se comunicarem e compartilharem dados sem estarem necessariamente ligados entre si. Segundo a W3C Web Service Architecture Working Group, os Web Services devem possuir uma Arquitetura Básica que descreva uma visão global da arquitetura, e uma Arquitetura Estendida que apresenta como acrescentar características e funcionalidades à uma Arquitetura Básica. 3.2 Arquitetura Básica A arquitetura do Web Services coloca em relacionamento vários componentes e tecnologias através da pilha da arquitetura do Web Services. Uma implementação válida inclui “subsets” ou partes da pilha de protocolos, mas precisa no mínimo disponibilizar os componentes básicos de uma arquitetura. Uma arquitetura básica de um Web Services deve incluir no mínimo a possibilidade de executar os seguintes serviços [18]: • Trocar mensagens; • Descrever o Serviço; • Publicar e Descobrir as descrições do serviço na WEB. A arquitetura básica determina uma interação entre agentes de software (módulos de programas que executam tarefas especificas) através da troca de mensagens entre o requisitante e o fornecedor de serviços. Estes agentes podem executar ambos os papeis, ou seja, de fornecedor ou requisitante. Os fornecedores tem a responsabilidade de publicar e descrever os serviços que oferecem, assim como o requisitante deve possuir ferramentas capazes de encontrar tais descrições. O modelo básico de arquitetura representa a interação entre três partes: • Fornecedor do serviço; • Atividade de descoberta do serviço; • Requisitante do Serviço. Isto implica na necessidade das operações de Publicar, Descobrir e Comunicar (Publish, Find e Bind). O fornecedor faz uma descrição do serviço para o Web Services e publica-o diretamente para o interessado ou coloca-a em uma agência de serviços para ser descoberto. O interessado então faz uso de uma operação de pesquisa para encontrar e recuperar a descrição do serviço localmente ou na agência, e usa esta descrição para trocar mensagens com o fornecedor e utilizar o serviço. Fornecedores e Requisitantes (Providers/Requesters) interagem através da troca de mensagens padrões (MEPs – Message Exchange Patterns) que define uma seqüência de uma ou mais mensagens, trocada entre eles. A descrição do serviço, que pode ficar armazenada em uma agência de publicação de serviços, inclui informações do tipo e da estrutura dos dados, identificação das mensagens e endereço do fornecedor. Os agentes de Software em uma arquitetura básica podem realizar uma ou todas as seguintes tarefas [18]: • Requisitante do Serviço – Requisitar a execução de um WS; • Fornecedor do Serviço – Processar a requisição de um WS; • Agencias de Divulgação – Publicar a descrição de um WS. Um agente de software pode agir em um ou múltiplos papéis, ou seja, como requisitante ou fornecedor somente, em ambos requisitante e fornecedor, ou como requisitante, fornecedor e divulgador. Um serviço somente é solicitado após sua descoberta e solicitação da descrição do serviço para contatos. A Figura 15 ilustra uma Arquitetura Básica, onde o requisitante e um fornecedor interagem baseados na informação de descrição do serviço publicados pelo fornecedor e, descoberta pelo requisitante de alguma maneira. Agências de Div ulgação Encontra Cliente Usuário do Serviço Descrição do Serviço Publica Interage Serviço Fornecedor do Serviço Descrição do Serviço Figura 15 - Arquitetura Básica - Web Services Para possibilitar a troca de mensagens Request/Response, a implementação de um Web Service provê agentes de Software que funcionam como ambos, requisitante e fornecedor, como mostrado na Figura 15. O requisitante envia mensagens para o fornecedor, solicitando informações sobre o serviço ou para executar uma operação, e recebe de volta uma mensagem contendo o resultado da consulta ou da operação. O fornecedor, por sua vez, recebe a requisição, processa a mensagem e envia uma resposta de volta ao solicitante. As tecnologias utilizadas neste tipo de operação incluem SOAP, WSDL e HTTP. 3.2.1 Componentes • O Serviço – Quando um Web Service tem sua interface descrita por um serviço de descrição, sua implementação é o serviço. Um serviço é um módulo de software disponibilizado na rede pelo fornecedor e, existe para ser invocado por, ou para interagir com o serviço do requisitante. Ele pode também realizar funções como um requisitante, usando outros Web Services em sua implementação. • Descrição do Serviço – Contém uma descrição dos detalhes de interface e implementação do serviço. Isto inclui seus tipos de dados, operações, informações de ligação e localização na rede. A descrição completa pode ser feita com um conjunto de documentos XML e, ser publicada diretamente para um determinado usuário ou em uma agência de divulgação. 3.2.2 Partes • Fornecedor de Serviços – Visto sobre a perspectiva do negócio, este é o proprietário do serviço. Visto sobre a perspectiva da arquitetura, esta é a parte da plataforma que hospeda o acesso ao serviço. Pode também ser definida como o ambiente de execução do serviço ou o recipiente do serviço. • Requisitante de Serviços - Visto sobre a perspectiva do negócio, este é aquele que tem alguma necessidade a ser satisfeita. Visto sobre a perspectiva de arquitetura, trata-se de uma aplicação que invocará ou dará início a uma interação com o serviço. A solicitação do serviço pode ser feita por um browser, por uma pessoa ou um programa sem a intervenção de um usuário. • Agência de Divulgação - Trata-se de um local que contém um conjunto de descrições de serviços, possíveis de serem acessados, onde os fornecedores publicam as descrições de seus serviços. Da mesma maneira, os requisitantes dos serviços podem recorrer a outras fontes para obter uma descrição como: um sistema de arquivo local, FTP site, URL. 3.2.3 Operações • Publicar – Para que possa ser acessado, um serviço precisa antes publicar sua descrição. • Encontrar – Através desta operação, o interessado no serviço recupera sua descrição diretamente ou através de pesquisa em um diretório pelo tipo do serviço desejado. Esta operação pode ocorrer em duas diferentes ocasiões, no momento do projeto e desenvolvimento da aplicação ou na hora da execução da aplicação. • Interagir – Nesta operação, o interessado invoca ou inicia uma interação com o serviço no momento da execução, utilizando os detalhes de ligação colocadas na descrição do serviço para localizar, contatar, e invocar o serviço. Exemplos de interação incluem: Mensagens simples one way, broadcast de um requisitante para vários serviços ou, uma conversação multi mensagens. Qualquer um destes tipos de operações podem ser, Síncronas ou Assíncronas. 3.3 Arquitetura Estendida A Arquitetura Estendida incorpora serviços adicionais, aumentando as funcionalidades dos componentes da arquitetura básica [18]. Alguns serviços que podem ser acrescentadas por meio de headers são: • MEP – Uma forma padrão de troca de mensagens entre dois serviços; • Autenticação – Um módulo SOAP com Username/Password; • Confidencialidade – Um módulo SOAP que permite criptografar e descriptografar; • Integridade - Um módulo SOAP que utiliza uma assinatura digital; • Rota – Uma especificação dos caminhos das mensagens entre os nós; • Segurança – MEP – Uma série de requisições entre os nós com um módulo SOAP de reconhecimento; • Sincronismo – Define o tipo de interação entre as partes envolvidas; • Attachment – Um pacote com múltiplos documentos juntos. A Figura 16 apresenta um diagrama de interação com as três pilhas de possíveis serviços, onde algumas são realizadas por módulos SOAP e o gerenciamento através de MEPs [18]. Empacotamento Gerenciamento Conversações Transações Cracterísticas do Servico Confiabilidade Segurança Assincronismo Armazenamento Roteamento Coreografia Registro Esquema XML Mensag. SOAP e Cabeçalho Mensagens SOAP e Cabeçalhos WSDL Inspeção Transporte Descrição Descoberta Figura 16 - Representação das pilhas de um Web Services 3.4 Pilhas de um Web Service A fim de garantir a interoperabilidade entre as operações de Divulgação, Procura e Interação em uma arquitetura orientada a serviços (SOA), técnicas e conceitos padrões devem ser definidos para cada parte e tipo de interação, segundo a W3C Web Service Architecture Working Group. Existe uma série de conceitos envolvendo segurança, gerenciamento e qualidade de serviço, que precisam ser colocados em camadas e, os vários serviços disponíveis em cada camada podem ser ou não dependentes uns dos outros. Um detalhe importante é que nas camadas inferiores das pilhas as tecnologias e conceitos já estão mais amadurecidos e apresentam um alto nível de padronização se comparados a maioria das camadas superiores. Provavelmente o uso dos Web Services proporcionará um contínuo desenvolvimento e padronizações dos níveis mais altos das pilhas. 3.4.1 Pilha Transporte Responsável pela troca física de informações entre as partes, incluindo uma variedade de meios de transporte, de empacotamento e extensão das mensagens. A Figura 17 apresenta as camadas da pilha de Transporte [18]. Agências de Div ulgação Descrição do Serviço Encontra Cliente Usuário do Serviço Publica Interage Serviço Fornecedor do Serviço Descrição do Serviço Extensão Transporte Empacotamento Transporte Figura 17 - Camadas da Pilha de Transporte 3.4.1.1 Camada de Transporte Representa a tecnologia a ser utilizada para o transporte das mensagens entre as partes envolvidas, e por isto: • Um Web Services tem de estar em uma rede acessível, para ser invocado, • Para acesso a um Web Services público, o HTTP é o protocolo padrão de transporte em rede; • Outros protocolos de transporte também podem ser utilizados, tais como SMTP e FTP; • Uma Intranet pode utilizar protocolos proprietários, ou de fornecedores específicos como o MQSeries, Corba etc; A escolha do protocolo de rede a ser utilizado, depende inteiramente dos requisitos da aplicação tais como: Segurança, Acessibilidade, Desempenho e, Confiabilidade. 3.4.1.2 Camada de Empacotamento Representa a tecnologia a ser utilizada na construção dos pacotes que serão trocados entre as camadas. • XML (eXtensive Markup Language) – tem sido amplamente adotada como base de empacotamento das mensagens; • SOAP (Simple Object Acess Protocol) – mecanismo simples, baseado em XML, para criar pacotes de dados estruturados a fim de serem trocados entre aplicações em redes. 3.4.1.3 Camada de Extensão Construída sobre a camada de Empacotamento, representa a tecnologia a ser utilizada para agregar informações adicionais às mensagens a serem trocadas entres as partes envolvidas. Estas informações fazem parte da estrutura do envelope SOAP, que define um mecanismo para incorporar extensões à mensagem sob a forma de headers, como módulos de roteamento, política, segurança etc. 3.4.2 Pilha Descrição A camada para descrição do serviço é na verdade uma pilha de documentos descritos usando XML Schema. É através desta descrição que o fornecedor comunica todas as especificações para o interessado no Web Services. A Figura 18 apresenta as camadas da Pilha de Descrição. Agências de Div ulgação Encontra Cliente Usuário do Serviço Descrição do Serviço Publica Interage Serviço Fornecedor do Serviço Descrição do Serviço Contrato em Nível de negócios Contrato em Nível de Serviços Descrição Composição Orquestração Apresentação Policy Descrição da Implementação Descrição da Interface XML Schema Figura 18 - Camadas da Pilha de Descrição 3.4.2.1 Camada de Interface Escrito em WSDL, contém um resumo da definição do serviço, que poderá ser consultado pelos usuários que pretendem implementá-los. O serviço de interface tem elementos que incluem: • TYPE – Descreve os tipos de dados simples e complexos, contido nas mensagens; • Message – Especifica quais tipos de dados XML constituem as várias partes da mensagem; • PortType – Define as operações do Web Services. E as operações definem quais mensagens XML podem aparecer nas mensagens de entrada, saída e erros; • Binding – Descreve os aspectos referentes a protocolo, formato dos dados, segurança, e outros atributos para a interface de um serviço. 3.4.2.2 Camada de Implementação Descreve como uma interface de serviço deve ser implementada por um fornecedor e, sua localização para uma possível interação. Contém os seguintes elementos: • Port – Contém um endereço de rede (URL); • Service – Contém uma coleção de Ports. As definições da interface juntamente com a definição de implementação, compõem uma completa definição WSDL do serviço. 3.4.2.3 Camada de Política Consiste de fatos ou afirmações e, regras que se aplicam a um particular WS. Pode ser utilizado para descrever ou apontar para documentos que estejam associados ao negócio, como produtos, senhas, política de segurança, atributos de qualidade do serviço, etc. 3.4.2.4 Camada de Apresentação Consiste de uma descrição a mais, que pode acompanhar a descrição do Web Services, que definirá como apresentar um serviço para um usuário e quais serão as interações entre ele e o serviço. Esta descrição pode ser utilizada para apresentações que serão feitas em PDA’s, Telefones fixos, Microcomputadores, etc. 3.4.2.5 Relacionamento entre WS Existem dois tipos de relacionamentos entre WS: • Programado – cujas regras encontram-se definidas nas camadas de Composição e Orquestração; • Contratual – cujas regras encontram-se definidas nas camadas de serviços de Contratos e Negócios. As camadas Orquestração e Composição, descrevem como a comunicação colaboração e fluxos de dados devem ser feitos em um Service-to-Service. • Camada de Orquestração – Define a coreografia de relacionamento de Web Services entre dois parceiros, para uma completa interação. Por exemplo, um acordo que define as regras entre o comprador e vendedor, para recebimento e envio de mensagens contendo, Ordem de Compra, de Pagamento, Fatura, Relatórios de Contabilidade, etc. • Camada de Composição – Define uma forma de execução do Web Services, dentro da própria empresa ou entre empresas diferentes. 3.4.3 Pilha Agências de Divulgação Enquanto as três camadas inferiores da pilha identificam tecnologias para negociações e interoperabilidade, a divulgação e a descoberta do serviço podem ser implementadas com uma série de soluções. Qualquer mecanismo que permita ao interessado ter acesso à descrição de um serviço, e torná-lo disponível a uma aplicação, é qualificado como serviço de descoberta. Alternativamente, o serviço pode ser encontrado no momento do projeto da aplicação ou, em tempo de execução, usando um diretório WSDL local ou público. A Figura 19 [18] apresenta as camadas da pilha de descoberta. Descrição do Serviço Agências de Div ulgação Encontra Cliente Usuário do Serviço Publica Interage Serviço Fornecedor do Serviço Descrição do Serviço Descoberta Agências de Divulgação Publicação Inspeção Figura 19 - Representação da Pilha de Descoberta 3.4.3.1 Camada de Inspeção Tecnologias como WSIL (Web Services Inspection Language) [22] oferecem métodos de procura por Web Services através da criação de documentos contendo uma lista de WSDL URLs e outros WSILs relacionados dentro de um domínio, podendo também fazer referência a entradas UDDIs. As especificações WSIL definem convenções para especificações de nomes e locais de arquivos, para facilitar a procura, similar a um endereço Index.html. 3.4.3.2 Camada de divulgação A descrição de um serviço pode ser gerada ou codificada manualmente e, depois incluída em um UDDI. Existem ferramentas que geram partes da WSDL e da UDDI. A divulgação da descrição pode ser feita de várias formas: • Direta - O fornecedor envia a descrição diretamente ao interessado, através de E-Mail, CDROM, FTP, etc; • Registros UDDI - Podendo ser: Serviços Internos - registro para aplicações internas do site (escolas, empresas, etc); Portal – para uso de parceiros ou sócios externos à empresa; Catálogo de Sócios – empresas parceiras com serviços específicos; e-Marketplace – quando o fornecedor deseja competir c/ outros WS. 3.4.3.3 Camada de Descoberta O Requisitante do Serviço deve procurar pela descrição dos Web Services em dois diferentes momentos do ciclo de vida de uma aplicação: Projeto – Serão pesquisadas por tipos de interfaces que eles suportam; Execução - Serão pesquisadas baseadas em como eles se comunicam, ou na qualidade do serviço oferecido. Estas descrições poderão ser localizadas em uma Web page (URL), um repositório, registro UDDI, etc., e poderão também ser selecionadas por preço, proximidade, qualidade, suporte, etc. Uma vez encontrado o serviço desejado, o requisitante pode invocar o processamento deste usando da descrição do serviço, para gerar requisições SOAP para o Web Services. 3.5 Arquitetura Completa A Figura 20 ilustra um completo conjunto de funções contidas em uma arquitetura estendida de Web Services [18]. As funcionalidades incluem tecnologias adicionais nas seguintes áreas: Transporte, Descrição e Agentes de Descobrimento. Inclui também conceitos de Segurança, Gerenciamento e Qualidade de Serviços que se aplica a todos os componentes da arquitetura. Descoberta Agências Agências de de Divulgação Divulgação Publicação Inspeção Contrato em Nível de negócios Contrato em Nível de Serviços Esquema XML Gerência Apresentação Policy Descrição da Implementação Descrição da Interface Segurança Descrição Composição Orquestração Qualidade do Serviço Contrato em nível de Negócios Extensão Transporte Empacotamento Transporte Figura 20 - Representação de uma Arquitetura Completa 3.6 Tecnologias Padronizadas para Web Services Para que as interações entre Web Services aconteçam com sucesso, existe a necessidade do uso de tecnologias padronizadas para os protocolos e formatação dos dados. 3.6.1 XML (eXtensible Markup Language) Em fevereiro de 1998 o World Wide Web Consortium (W3C) divulgou a primeira versão da linguagem Extensible Markup Language (XML) [16], voltada para a construção de documentos Web [17]. O objetivo era permitir que fossem construídos documentos cuja informação fosse estruturada, isto é, documentos que contivessem não só o conteúdo, mas também indicações a respeito deste. Em outras palavras, XML passou a permitir a elaboração de documentos que contenham não só dados, mas também metadados. Desde então, XML passou a ser utilizada na construção de documentos Web e tornou-se uma forma padrão para representação de dados estruturados, em que a maioria das especificações de Web Services utiliza. A linguagem XML tem algumas características como: • descrever o conteúdo do documento; • descrever os dados estruturados como : assunto, título, autor, referências, datas, preço, etc.; • fazer uso de tags (palavras encapsuladas por sinais < > ) e atributos (definidos com name = “value”); • não predefinir as tags. Tags são definidas sob demanda, bem como a própria estrutura do documento; • qualificar a informação diferentemente do HTML [10] que serve para definir a visualização da informação; • independer do sistema operacional, linguagem ou fonte de dados das aplicações que o utilizam; • fazer uso do DTD (Document Type Description) ou XML Schema para descrever os dados; • auto descrever os dados através de DTDs e XML Schema. O XML é um subconjunto do SGML (Standard Generalized Markup Language) [13], que foi definido em 1986 pela ISO (International Standardization Organization) como padrão ISO 8879. O XML define a estrutura das informações através da tecnologia de marcadores (markups) flexíveis, permitindo a possibilidade de extensibilidade, ou seja, uma flexibilidade quanto a definição dos marcadores. Este recurso permite ao usuário criar marcadores de acordo com a sua necessidade, sendo no entanto importante entender que o XML foi projetado para armazenar, transportar e trocar dados e não para apenas visualizar dados. 3.6.1.1 Exemplo do uso de XML <!-- Exemplo para o envio de um bilhete para João. --> <?xml version=”1.0”encoding=”ISO-8859-1”?> <bilhete> <to>João</to> <from>Augusto</from> <heading>Lembrete</heading> <body>não se esqueça do futebol hoje às 19.00 hs</body> </bilhete> Figura 21 - Exemplo do uso de XML Neste fragmento de código XML, tem-se que: • A primeira linha do documento é um comentário; • A segunda linha do documento, define a versão do XML e o padrão de codificação usado neste documento. Neste caso segue a especificação da versão XML 1.0 e usa o conjunto de caracteres ISO-8859-1 (ASCII); • A próxima linha descreve o elemento raiz do documento – Tag bilhete; • As próximas 4 linhas definem 4 filhos do elemento raiz bilhete (to, from, heading e, body); • E finalmente a ultima linha que determina o fim do elemento raiz – bilhete. 3.6.2 SOAP (Simple Object Acess Protocol) Um protocolo simples para acesso a objetos, projetado para invocar aplicações remotas através de RPC ou troca de mensagens, em um ambiente independente de plataforma e linguagem de programação [19]. Trata-se, portanto de um padrão que pretende garantir a interoperabilidade e intercomunicação entre diferentes sistemas, através da utilização da linguagem XML, ou seja, um protocolo padrão para troca de mensagens. Suas principais características são: • Definido pelo consórcio W3C; • Protocolo baseado em XML para troca de informações em ambientes distribuídos; • Padrão de utilização em construção de Web Services; • Normalmente utiliza o HTTP como protocolo de transporte; • Uma mensagem SOAP consiste basicamente dos seguintes elementos (vide Figura 22): o Envelope – Contém declarações de namespaces (uma coleção de nomes, identificados por uma URI, que são utilizados em documentos XML como tipos de elementos e nomes de atributos) e atributos adicionais como o estilo de codificação (encoding style) que define como os dados são representados no documento XML. É o elemento raiz do documento e, obrigatório em toda mensagem. o Cabeçalho – Um cabeçalho opcional, que carrega informações adicionais, como por exemplo, se a mensagem deve ser processada por um nó intermediário. Quando utilizado, deve ser o primeiro elemento do envelope. o Corpo – Elemento obrigatório no documento, e contém o payload, ou a informação a ser transportada pela rede. Pode conter um elemento opcional fault, utilizado para levar mensagens de status e erros retornados pelos “nós” ao executarem a mensagem. E n v e lo p e S O A P C AB E Ç ALH O C OR PO Mensagem F a lh a Figura 22 - Estrutura de uma mensagem SOAP Uma especificação SOAP, segundo a W3C, define as seguintes informações, como necessárias em toda chamada RPC. • A URI do objeto alvo; • O nome do Método; • Os parâmetros do método (requisição ou resposta); • Uma assinatura do método opcional; • Um cabeçalho (header) opcional. 3.6.2.1 Exemplo de um Envelope SOAP <!-- Versão do XML que esta sendo utilizada -- > <?xml version=”1.0”encoding=”UTF-8”?> <!--Prologo–Envelope SOAP–Define Namespaces XML Schema -- > <soap:Envelope xmlns:soap=”http://www.w3.org/2001/12/soap-envelope” soap:encodingStyle= http://www.w3.org./2001/soap-encoding"> <soap:Header> <t:Transaction xmlns:m=http://www.ufu.com.br/transaction" soap:mustUnderstand=”1”>234 </t:Transaction> </soap:Header> <soap:Body> <m:Getnota xmlns:m=http://www.ufu.com.br/notas"> <m:Materia>Redes</m:Materia> </m:Getnota> </soap:Body> </soap:Envelope> Figura 23 - Exemplo de um Envelope SOAP Neste envelope SOAP tem-se que: • A primeira linha do documento é um comentário; • A segunda linha do documento, define a versão do XML e o padrão de codificação usado neste documento. Neste caso segue a especificação da versão XML 1.0 e usa o conjunto de caracteres UTF-8; • A próxima linha descreve o elemento raiz do documento – Envelope. Deve estar sempre associado a um namespace; • A próxima linha define os tipos de dados usados no documento; • A próxima linha define um header com o elemento “Transaction”, um atributo “mustUnderstand” com valor de 1, e um valor 234. Os atributos definidos no Header, determinam como um recipiente deverá processar uma mensagem. • A próxima linha define o Body da mensagem. Observe que m:GetNotas e o item Matéria são elementos específicos da aplicação. Eles não fazem parte do padrão SOAP. • E finalmente a ultima linha que determina o fim do elemento raiz – Envelope. 3.6.2.2 Exemplo de uma Mensagem SOAP – Pedido e Resposta <!-- Versão do XML que esta sendo utilizada -- > <?xml version=”1.0”encoding=”UTF-8”?> <!--Prologo – Envelope SOAP – Define Namespaces XML Schema -- > <soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”> <soapenv:Body> <add soapenv:encodingStyle = http://schemas.xmlsoap.org/soap/encoding/"> <op1 xsi:type=”xsd:int”>20</op1> <op2 xsi:type=”xsd:int”>50</op2> </add> </soapenv:Body> </soapenv:Envelope> Figura 24 - Exemplo de uma Mensagem SOAP - Pedido <!-- Versão do XML que esta sendo utilizada -- > <?xml version=”1.0”encoding=”UTF-8”?> <!--Prologo – Envelope SOAP – Define Namespaces XML Schema -- > <soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”> <soapenv:Body> <addResponse soapenv:encodingStyle = http://schemas.xmlsoap.org/soap/encoding/”> <addReturn xsi:type=”xsd:int”>70</addReturn> </addResponse> </soapenv:Body> </soapenv:Envelope> Figura 25 - Exemplo de uma Mensagem SOAP - Resposta 3.6.2.3 Seqüência de procedimentos Uma seqüência de procedimentos para solicitação de execução de um determinado serviço, pode ter os seguintes passos: 1. Um software de e-commerce formata uma mensagem com a informação do produto e do local de destino, na forma de uma mensagem XML; 2. A mensagem é encapsulada no formato SOAP, a fim de ser transportada pelo protocolo HTTP, na Internet; 3. O Web Service “desempacota a mensagem” e a lê no formato XML, e em seguida processa a solicitação; 4. O resultado é encapsulado pelo protocolo SOAP para ser transportado novamente pelo HTTP de volta à origem. 3.6.3 WSDL (Web Service Description Language) Os participantes de uma troca de mensagens em um Web Services necessitam ter acesso a uma única descrição do serviço. O remetente precisa saber como formatar corretamente a mensagem a ser enviada e, o receptor precisa da descrição do serviço para entender como receber corretamente a mensagem. Quando o remetente deseja enviar uma mensagem, ele obtém a descrição do serviço e gera uma mensagem conforme o tipo de dados e estrutura contidas dentro de um WSDL e, quando o receptor recebe a mensagem, ele a valida usando os mesmos tipos de dados e estrutura contidas no serviço de descrição. Portanto o WSDL pode ser entendido como uma linguagem para definição da interface, baseada em XML, que possibilita a descrição das funcionalidades, métodos e atributos, tipos de dados e os protocolos que podem ser utilizados pelos Web Services, possibilitando assim, que outra aplicação possa compreendê-la e usar seu serviço [20]. Assim, trata-se de um documento XML que determina exatamente como uma requisição e uma resposta SOAP serão realizadas. O modelo desta linguagem descreve um documento como um conjunto de componentes com características próprias, conforme visto na Figura 26 [21]. D E F IN IÇ Õ E S T IP O S M E N S AGE N S OP E R AÇ ÕE S L IG A Ç Õ E S S E R V IÇ O S Figura 26 - Modelo de um Documento WSDL Um documento WSDL pode conter outros elementos, como elementos de extensão e um elemento de serviços que torna possível agrupar várias definições de Web Services em um único documento WSDL. Exemplo da principal estrutura de um documento WSDL. <definitions> <types> definição dos tipos………. </types> <message> definição das mensagens………. </message> <portType> definição de uma port………. </portType> <binding> definição das ligações………. </binding> <services> definição dos serviços………. </services> </definitions> Figura 27 - Exemplo da principal estrutura de um documento WSDL 3.6.3.1 Definições Elemento raiz do documento que contém o nome do WS e as definições de namespaces. Trata-se de um recipiente com duas categorias de componentes: • Componentes WSDL – o qual define mensagens, interfaces, ligações e serviços ou propriedades do local name, namespace name, children e attributes de um elemento; • Tipos de componentes – são declarações de elementos e definições de tipos retirados de algum sistema de tipos. Define as propriedades dos childrens e atributos. Exemplo do componente Definição: <definitions targetNamespace="xs:anyURI" > <documentation />? [ <import /> | <include /> ] <types /> [ <message /> | <interface /> | <binding /> | <service /> ] </definitions> Figura 28 – Exemplo do componente Definição 3.6.3.2 Tipos (Types) Contém os tipos de dados a serem utilizados na mensagem, e são definidos utilizando o XML Schema. Os tipos aqui definidos serão utilizados dentro do elemento mensagem para facilitar a interoperabilidade. Exemplo da utilização de tipos: <!---- Elemento Tipos -- > <types> <xsd:schema targetNamespace=”urn:EnderecoPesquisado1” xmlns:xsd=http://www.w3.org/1999/XMLSchema”> <xsd:simpleType name=”stateType”> <xsd:restriction base=”xsd:string”> <xsd:enumeration value =”TX”/> <xsd:enumeration value =”IN”/> <xsd:enumeration value =”OH”/> </xsd:restriction> </xsd:simpleType> Figura 29 - Exemplo da utilização de tipos 3.6.3.3 Mensagens Define os elementos de dados de uma operação. Cada mensagem pode consistir de uma ou mais partes que podem ser comparadas a chamada de uma função em uma linguagem tradicional de programação. Cada elemento da mensagem pode ser utilizado como input, output ou fault. Exemplo de uma operação mensagem : <!-- Elemento Mensagens -- > <message name=empty”/> <message name =”AddEntryRequest”> <part name=”name”Type=”xsd:string”/> <part name=”address” Type=”typens:adress”/> </message> <message name=”GetAdressFromNameRequest”> <part name=”name”Type=”xsd:string”/> </message> <message name=”GetAdressFromNameResponse”> <part name=”adress” Type=”typens:address”/> </message> Figura 30 - Exemplo de uma operação mensagem 3.6.3.4 Operações Descreve as operações oferecidas pelo Web Services e as mensagens que estão envolvidas, por isto, é um dos mais importantes elementos do WSDL. Define o ponto de conexão de um Web Services e pode ser comparado à biblioteca de funções em uma linguagem tradicional de programação. O tipo request/response é a operação mais comum, mas o WSDL define quatro tipos: • One-way – A operação pode receber uma mensagem, porém não retornará uma resposta; • Request/Response - A operação pode receber uma requisição e retornará uma resposta; • Solicit-response - A operação pode enviar uma mensagem e aguardará por uma resposta; • Notification - A operação pode enviar uma mensagem, porém não aguardará uma resposta; Exemplo de uma operação Request Response: <!-- Exemplo de uma Operação -- > <message name=”GetTermRequest”> <part name=”term” Type=”xs:string”/> </message> <message name=GetTermResponse”> <part name=”value” Type=”xs:string”/> </message> <portType name=”glossaryTerms”> <operation name=”getTerm”> <input message=”getTermRequest”/> <output message=”getTermResponse”/> </operation> </portType> Figura 31 - Exemplo de uma operação Request Response Neste exemplo a port “glossary terms” define uma operação request-response chamada “getTerm” . A operação “getTerm” requer uma mensagem de entrada chamada “getTermRequest” com um parâmetro chamado “term” e, retornará uma mensagem de saída chamada “getTermResponse”com um parâmetro chamado “value”. 3.6.3.5 Ligações Bindings WSDL definem o formato da mensagem e detalhes de protocolo para o Web Services. Este elemento possui dois atributos: o nome do atributo e o tipo do atributo (name – type.) O nome do atributo (pode-se usar qualquer nome) define o nome do Binding e, o tipo do atributo faz referência a um portType já definido, para a ligação (binding). O elemento soap:binding possui dois atributos – o estilo e o transporte. O estilo pode ser um “RPC” ou “documento”. O transporte define o protocolo SOAP a ser utilizado. O elemento operation define cada operação que o port disponibiliza, e para cada operação, a ação correspondente tem de ser definida. É necessário também ser especificado como a input e output são codificadas. Exemplo de uma operação Request Response: <!—Exemplo de uma Operação -- > <message name=”GetTermRequest”> <part name=”term” Type=”xs:string”/> </message> <message name=GetTermResponse”> part name=”value” Type=”xs:string”/> </message> <portType name=”glossaryTerms”> <operation name=”getTerm”> <input message=”getTermRequest”/> <output message=”getTermResponse”/> </operation> </portType> <bindingType name=”glossaryTerms”> name =”b1”> <soap binding style=”document” transport=http://schemas.xmlsoap.org/soap/http”/> </operation> <soap:operation soapAction=http://example.com/getTerm”/> <input> <soap:body use=”literal”/> </input> <output> <soap:body use=”literal”/> </output> </operation> </binding> Figura 32 - Exemplo de uma operação Request Response 3.6.3.6 Serviços O componente Serviço descreve uma e somente uma interface que o serviço provê, e contém os seguintes atributos: um porType (name) e um binding associado ao mesmo. O elemento possui uma tag informando a localização (location) do serviço, e cada serviço contém um atributo name, indicando o nome do mesmo. É possível ter diferentes ports para diferentes protocolos, mas todos acessando o mesmo serviço. Exemplo do elemento service <definitions> <service name="AdressBookService"> <port name="AdressBook" bidigng="tns:AdressBookSOAPBinding”> <soap:adress location=http:localhost:8080/axis/services/AdressBook”/> </port> </service> </definitions> Figura 33 - Exemplo de definição de um serviço 3.6.4 UDDI (Universal Description, Discovery and Integration) Ao se criar uma aplicação, são necessários mecanismos para catalogar e localizar Web Services com funcionalidades específicas e que possam ser utilizadas pela aplicação que está sendo criada. Da mesma forma que os anteriores, utiliza-se do padrão XML. Trata-se de um serviço similar ao prestado pelas páginas amarelas, ou seja, oferecem uma estrutura de informações na qual a empresa se auto registra e cadastra seus respectivos serviços, através de suas definições na linguagem WSDL, separada por área como, indústria, produto, localização geográfica, a fim de facilitar uma procura para um interessado. A Figura 34 apresenta uma forma básica de um registro UDDI. As informações UDDI são classificadas em: • Páginas Brancas - Nome da empresa, informações de contato (nome, telefone, fax...), tipo da industria; • Páginas Amarelas – Tipo da indústria, categoria do produto, localização geográfica; • Páginas Verdes – Informações sobre os serviços disponíveis, de ligações (binding). Desta forma, o UDDI especifica uma maneira de publicar e descobrir informações a respeito de Web Services. Brancas UDDI Amarelas Verdes Figura 34 - Estrutura básica de um registro UDDI 3.6.5 O modelo de Segurança e Qualidade de Serviço WS reduzirão drasticamente o custo e o tempo de desenvolvimento das aplicações, porém aumentarão consideravelmente o risco de segurança, e para isto algumas precauções devem ser adotadas como uma política de segurança e qualidade do serviço, recomendada pela WSA [33], para o bom funcionamento dos serviços. 3.6.5.1 Auditoria de defesa Auditoria é um mecanismo implementado em beneficio do proprietário que monitora um ou mais recursos, as ações relativas a um ou mais serviços e os agentes para verificar se os compromissos foram satisfeitos. Tipicamente uma auditoria de defesa monitora o estado de um recurso ou serviço, assegurando que a obrigação foi relaizada com sucesso. 3.6.5.2 Autenticação Um processo de verificação se um parceiro, em uma conversação, está habilitado a representar uma pessoa ou organização. O domínio (conjunto de agentes e/ou recursos que esta sujeito às restrições de uma ou mais regras de segurança) define o escopo da aplicação das regras de segurança. 3.6.5.3 Obrigação Uma obrigação é um tipo de segurança onde se o agente tem a responsabilidade de realizar alguma ação, então ele é solicitado para executá-la. Quando a ação é feita, então o agente pode dizer que foi satisfeita sua obrigação. 3.6.5.4 Permissão Permissão é um tipo fundamental de segurança, pois quando um agente tem permissão para fazer uma ação, para acessar algum recurso, ou concluir um certo serviço, então espera-se que qualquer tentativa de executar a ação tenha sucesso. 3.6.5.5 Política A política é uma descrição processável por computador, onde se encontram as restrições dos procedimentos dos agentes de como devem executar suas ações e acessar os recursos, ou seja, informam as permissões e obrigações dos agentes. 3.6.6 O modelo de Gerenciamento Segundo a WSA [33], o modelo de gerenciamento foca os aspectos da arquitetura referentes ao gerenciamento dos Web Services, em particular com ênfase no uso da infraestrutura oferecida pelo WS para gerenciar os recursos necessários. 3.6.6.1 Elemento Físico Um recurso físico é um recurso que existe no mundo físico, podendo ser um agente, serviço ou descrição, que deve ser gerenciado. 3.6.6.2 Capacidade de Gerenciamento Capacidade de gerenciamento são capacidades requeridas pelo gerenciador para estar habilitado a efetivamente gerenciar. A chave da capacidade de gerenciar inclui a habilidade para identificar o elemento gerenciável, a habilidade de conseguir informações a respeito do elemento gerenciável, a habilidade para configurá-lo e a habilidade de controlar seu ciclo de vida. 3.6.6.3 Configuração de Gerenciamento A configuração de um gerenciamento é uma coleção de propriedades de elementos gerenciáveis, ou seja, um conjunto de valores que denotam um estado particular de um elemento. 3.6.6.4 Gerenciador Um gerenciador é uma entidade que é capaz de realizar o gerenciamento de elementos, ou seja, é um agente com habilidade de gerenciar um conjunto de elementos gerenciáveis. Gerenciadores usam sua capacidade e interfaces para controlar o ciclo e outras propriedades dos elementos gerenciáveis em beneficio dos proprietários dos elementos. Um gerenciador pode também ter capacidades adicionais dentro de sua arquitetura, por exemplo, pode ter condições de diretamente controlar os recursos computacionais que esta sendo usados pelos WS. 4. Estudo de caso 4.1 Cenário Agências de turismos são constantemente consultadas, por seus clientes, com relação a Hotéis, Restaurantes, Cinemas, Teatros, etc., bem como localização destes estabelecimentos em determinada cidade. Respostas a essas consultas nem sempre são totalmente satisfatórias como o cliente gostaria, pois, se considerarmos que para manter uma base de dados atualizada é necessário que os próprios estabelecimentos enviem regularmente para a agência os dados que sofreram alterações, como, telefone, endereço, etc. A idéia desse estudo de caso foi desenvolver uma cadeia de Web Services para solucionar uma situação parecida com a descrita acima, e ao final retirar algumas conclusões desta nova proposta de integração de serviços chamada Web Services. Importante ressaltar que nenhuma metodologia específica para projeto e desenvolvimento de sistemas foi utilizada, porém, baseada na própria experiência foi adotada uma seqüência de procedimentos simples para a implantação do estudo de caso, conforme poderá ser visto a seguir. 4.2 Solução Proposta A solução proposta considera três atores distintos: • Uma Companhia Telefônica com sua base de dados contendo um grande número de informações sobre seus assinantes e, com possibilidade de ser acessada via Internet, aqui denominada Companhia Telefônica; • Uma empresa desenvolvedora de softwares e prestadora de serviços, responsável pelo desenvolvimento dos Web Services, aqui chamada de Fornecedor; • Uma Agência de Turismo, com a necessidade de pesquisar informações sobre Hotéis, Cinemas, Restaurantes, etc, existentes em determinada cidade e endereço, aqui chamada de Usuário. Fazendo uso deste serviço, o usuário terá em sua consulta as informações necessárias sempre atualizadas, maior agilidade e, opções diferentes de pesquisa. A Figura 35 apresenta uma visão topológica desta cadeia. Ca de ia de W e b S e rvic e s Aplic a ç ã o Us uá rio (Applic a tion) W e b S e rvic e s -P rove dor (phone P rovide r) W e b S e rvic e s Com pa nhia Te le fônic a (phone Lis t) Ba s e de da dos Figura 35 - Solução Proposta Conforme pode ser visto na Figura 35, um Web Service disponibilizará a base de assinantes da companhia telefônica, para que o fornecedor possa realizar sua consulta. Este Web Service foi chamado de phoneList e executou basicamente a seguinte operação: • Informada uma cidade e um ramo de atividade, consultará a base de dados de assinantes e retornará uma coleção de objetos que satisfaçam a consulta. Um segundo Web Services instalado no fornecedor do serviço, receberá estes dados da companhia telefônica e, fará uma filtragem nessas informações baseado na consulta realizada pelo usuário. Este Web Service foi chamado de phoneProvider. A Agência de Turismo ou usuário terá na sua aplicação a possibilidade de consultas de diferentes formas, ou seja, com várias opções. O Ramo de Atividade e a Cidade são campos obrigatórios, porém outras informações podem ser adicionadas a fim de melhorar a consulta. São campos opcionais: o nome da rua e o bairro. Esta aplicação do usuário foi chamada de application. A fim de demonstrar a interoperabilidade, foram utilizados dois diferentes sistemas operacionais. Uma máquina com o servidor Linux, onde se encontra o Web phoneList e, uma outra com o Windows onde se encontra instalado o Service phoneProvider. Nos servidores foi utilizado o Apache Tomcat como servidor de aplicações e, o Apache Axis [02] como plataforma para o para processamento de mensagens SOAP. A aplicação foi escrita em JAVA [12], utilizando as classes geradas pela especificação WSDL phoneProvider e, as implementações dos serviços dentro de cada servidor, também foram feitas em JAVA. 4.3 Ambiente de Implementação Como a proposta deste estudo não é de avaliar ferramentas para desenvolvimento de Web Services, então, foram utilizadas soluções disponíveis no mercado como software livre. Especificamente soluções da fundação Apache e Java da Sun Microsystems. 4.3.1 Fundação Apache A fundação de software Apache [03] tem por objetivo oferecer suporte a toda comunidade de desenvolvedores de projetos de software livres Apache. É formada por grupos de voluntários cujo interesse é colaborar no desenvolvimento de softwares através de suporte e contribuições aos projetos existentes na fundação. Seu projeto mais conhecido é o Browser que leva seu nome. 4.3.2 Apache Axis (Apache eXtensible Interaction System) Produzido pela fundação Apache [01], trata-se de um conjunto de ferramentas escrito em JAVA, cuja proposta é fornecer uma infraestrutura para a construção e manipulação de mensagens que utilizam o protocolo SOAP, ou seja, é um SOAP engine. Além desta funcionalidade, o Axis disponibiliza uma série de outros componentes que contribuem ao desenvolvimento de Web Services, são eles: • Um servidor simples que pode ser utilizado para testes; • Um servidor que pode ser instalado sobre o servidor de aplicações Apache Tomcat; • Um amplo suporte à linguagem de descrição de Web Services (WSDL); • Ferramentas que geram classes JAVA à partir da especificação WSDL; • Alguns exemplos de programas; • Uma ferramenta para monitoração de pacotes TCP/IP (TCPMon). Alguns recursos fundamentais também fazem parte do AXIS, e servem como auxílio na sua utilização: • Suporte às versões 1.1 e 1.2 do SOAP; • Flexibilidade para configuração e desenvolvimento de sistemas; • Suporte a todos os tipos básicos para definição de serializadores e deserializadores; • Serialização e deserialização automática de Java Beans; • Conversão automática, nos dois sentidos, entre coleções JAVA e arrays SOAP; • Provedores para RPC e mensagens baseadas em serviços SOAP; • Geração automática de classes JAVA à partir de documentos WSDL; • Geração automática de documentos WSDL à partir de classes JAVA; • Geração automática de documentos WSDL à partir de serviços implantados; • Suporte para mensagens SOAP com anexos; • Provedor para acessar EJB´s (Enterprise Java Beans) como Web Services; • Servidor simples com suporte para http. Algumas características do Axis que devem ser destacadas são: • Velocidade – O AXIS utiliza um analisador para conseguir um aumento significativo em sua velocidade, em relação as versões anteriores do Apache SOAP; • Flexibilidade – A arquitetura AXIS oferece enorme flexibilidade para inclusão de extensões nos cabeçalhos, gerenciamento de sistemas, etc; • Estabilidade – Define um conjunto de interfaces publicadas, que sofrem poucas alterações; • Implantação orientada a componentes – Possibilita a reutilização de manipuladores (Handlers) a fim de criar padrões para processamento de aplicações; • Arquitetura de transporte – uma abstração simples para projetos de transporte para emitentes e receptores de mensagens SOAP, sobre vários protocolos como SMTP, FTP, etc; • Suporte à versão WSDL 1.1 que permite a construção de stubs para acessar serviços remotos. 4.3.3 TOMCAT Trata-se de um sub projeto do projeto JAKARTA [03], desenvolvido pela Fundação Apache e é um servidor de aplicações que possibilita a execução de sistemas na Internet. Escrito em Java, e por isso faz uso das tecnologias da linguagem como Servlets e Java Server Pages (JSP). Como se encontra escrito em Java, para sua execução é necessário que no mesmo computador esteja instalada uma versão runtime do J2SE (Java 2 Standard Edtion), para execução dos programas escritos em JAVA. O desenvolvimento de uma aplicação que utiliza o Tomcat como servidor exige de seu desenvolvedor um conhecimento das linguagens JAVA, HTML e XML. O servidor Tomcat converte automaticamente qualquer página JSP em uma servlet equivalente, ou seja, ele é capaz de criar código fonte Java a partir de um documento HTML. Servlet são classes escritas em Java cujos objetos têm a finalidade de gerar documentos codificados em HTML. Uma página escrita em JSP (arquivos com extensão .jsp) é uma página escrita em HTML e que contém pequenos fragmentos de código Java e/ou tags especiais (definidos na especificação JSP). 4.4 Especificação da Cadeia de Web Services A criação desta cadeia de Web Services, implicou na seqüência de procedimentos abaixo: • Inicialmente foram identificados os requisitos necessários ao desenvolvimento da aplicação; • Em seguida foram geradas as especificações dos Web Services usando para isto a linguagem WSDL; • Depois foi realizada a geração dos códigos Java dos Web Services com a ferramenta WSDL2Java [04] e a implantação dos Web Services; • Finalmente o uso dos Web Services construídos. 4.4.1 Identificação dos Requisitos O primeiro elemento da cadeia, uma Agência Turismo, terá à sua disposição uma aplicação escrita em Java a fim de facilitar sua consulta ao fornecedor do serviço. Esta aplicação permitirá ao cliente realizar uma consulta com várias opções, onde, obrigatoriamente deverão ser informados os campos de Ramo de Atividade e Cidade, e opcionalmente Bairro e Rua. Ao iniciar a aplicação, o sistema realiza automaticamente uma consulta ao fornecedor do serviço, a fim de gerar uma lista dos Ramos de Atividades e Cidades existentes na base de dados da Companhia Telefônica, e disponibiliza-a para o usuário fazer sua opção. Esta operação implicará na construção e envio, para o fornecedor do serviço, de duas mensagens SOAP contendo a Cidade e Ramo de Atividade, respectivamente. Estes procedimentos são realizados por duas operações chamadas getCidades() e getRamosAtividades(). Tendo o usuário à sua disposição na tela da aplicação, todos os Ramos de Atividades e Cidades, poderá melhorar sua consulta informando opcionalmente a Rua e o Bairro. Será também permitido ao usuário informar somente parte dos campos, para que o resultado da consulta contemple um maior número de objetos. Estes procedimentos geram agora três mensagens SOAP com as possíveis opções e, as operações são chamadas de getEmpresasCidade(cidade,ramoAtividade), e getEmpresasBairro(bairro,cidade,ramoAtividade) getEmpresasRua(rua,cidade,ramoAtividade). O Web Service do segundo ator (phoneProvider), considerado aqui o fornecedor do serviço, ao receber as mensagens SOAP da aplicação do usuário, montará uma nova mensagem SOAP com a Cidade e o Ramo de Atividade escolhidos pelo usuário, e as enviará para o segundo Web Service (phoneList)localizado na Companhia Telefônica. A operação é chamada de getAssinantesList(cidade,RamoAtividade). Ao receber o resultado obtido na consulta à base de assinantes, esta aplicação fará um refinamento destas informações considerando as opções de Bairro e Rua feitas pelo cliente, e em seguida, enviará o resultado para a aplicação do cliente. No final desta cadeia encontra-se o Web Service instalado na companhia telefônica (phoneList).Ele receberá do fornecedor uma mensagem SOAP contendo a Cidade e o Ramo de Atividade, com o propósito de retornar uma lista com os dados dos assinantes que satisfazem às informações contidas na mensagem. Para isto, será feita uma consulta à base de assinantes da companhia, e montado um array com o resultado, para ser enviado de volta ao fornecedor. Este array conterá objetos da classe Assinante. Na verdade este WebService realizará no início dos serviços, duas outras operações. A primeira retornará para o fornecedor, um array de strings contendo as cidades válidas e, a segunda um outro array de strings com os ramos de atividades, também válidos, constantes da base de assinantes da companhia telefônica. Estas operações são chamadas getCidadeList e getRamosAtividadesList. O diagrama na Figura 36, apresenta uma visão da seqüência das operações executadas na cadeia de Web Services. Figura 36 - Diagrama das operações dos Web Services 4.4.2 Geração das especificações dos Web Services Considerando atendido todos os requisitos necessários, o próximo passo é criar as especificaçõe de cada Web Service, usando para isto a linguagem WSDL. Inicialmente é necessario definir os tipos de dados complexos envolvidos nas operações. Neste caso precisamos das informações referentes ao Assinante, a definição de um array dos objetos e um array de strings. O tipo Assinante será especificado com o seguite codigo XML: <xsd:complexType name=”assinante”> <xsd:all> <xsd:element name=”sNome” type=”xsd:string”/> <xsd:element name=”sFone” type=”xsd:string”/> <xsd:element name=”sEndereco” type=”xsd:string”/> <xsd:element name=”sBairro” type=”xsd:string”/> <xsd:element name=”sCidade” type=”xsd:string”/> <xsd:element name=”sRamoAtividade” type=”xsd:string”/> </xsd:all> </xsd:complexType> Figura 37 - Código XML para especificação do tipo Assinante O array de objetos Assinante e o array de strings são também definidos com a linguagem WSDL, conforme pode ser visto abaixo. <schema xmlns=”http://www.w3.org/2001/XMLSchema” targetNamespace=”http://soapinterop.org/xsd”> <import namespace = http://schemas.xmlsoap.org/soap/encoding/”/> <complexType name=”ArrayOfAssinante”> <complexContent> <restriction base=”SOAP-ENC:Array”> <attribute ref=”SOAP-ENC:arrayType” wsdl:arrayType=”typens:assinante[]”/> </restriction> </complexContent> </complexType> <complexType name=”ArrayOfString”> <complexContent> <restriction base=”SOAP-ENC:Array”> <attribute ref=”SOAP-ENC:arrayType” wsdl:arrayType=”string[]”/> </restriction> </complexContent> </complexType> </schema> Figura 38 - Definição do array de objetos Assinante, e do array de Strings Em WSDL, os parâmetros de entrada e saída de cada operação são definidos como elemento <message>, desta forma, torna-se necessária a definição dos seguintes elementos na operação getAssinantesList. <message name=”GetAssinantesListRequest”> <part name=”cidade” type=”xsd:string”/> <part name=”ramoAtividade” type=”xsd:string”/> </message> <message name=”GetAssinantesListResponse”> <part name=”assinantes” type=”s:ArrayOfAssinante”/> </message> Figura 39 - Definição dos elementos na operação getAssinantesList Feita a definição dos elementos <message>, cada serviço precisa ser definido como uma <operation>. Por exemplo, a operação getAssinantesList pode ser definida usando o seguinte código WSDL: <operation name=”getAssinantesList”> <input message=”tns:GetAssinantesListRequest”/> <output message=”tns:GetAssinantesListResponse”/> </operation> Figura 40 - Código WSDL da operação getAssinantesList Em seguida, cada operação deverá ser colocada dentro do elemento <portType>, como pode ser visto na codificação abaixo: <portType name=”PhoneListServices”> <operation name=”getAssinantesList”> <input message=”tns:GetAssinantesListRequest”/> <output message=”tns:GetAssinantesListResponse”/> </operation> <operation name=”getRamosAtividadesList”> <input message=”tns:empty”/> <output message=”tns:GetRamosAtividadesListResponse”/> </operation> <operation name=”getCidadesList”> <input message=”tns:empty”/> <output message=”tns:GetCidadesListResponse”/> </operation> </portType> Figura 41 - Operações dentro do elemento <portType> E por ultimo é necessário especificar, o protocolo a ser utilizado para o transporte das mensagens, o estilo do serviço e a codificação utilizada. Isto é feito utilizando o elemento <binding>. Especificamente neste caso foram utilizados o protocolo de transporte HTTP, o estilo RPC e a codificação SOAP. O elemento <binding> precisa referenciar cada <operation> previamente definida. O fragmento de código abaixo, apresenta a operação getAssinantesList: <binding name=”PhoneListServicesSOAPBinding” type=”tns:PhoneListServices”> <soap:binding style=”rpc” transport=”http://schemas.xmlsoap.org/soap/http”/> <operation name=”getAssinantesList”> <soap:operation soapAction=””/> <input> <soap:body use=”encoded” namespace=”urn:phoneList” encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”/> </input> <output> <soap:body use=”encoded” namespace=”urn:phoneList” encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”/> </output> </operation> </binding> Figura 42 - Operação getAssinantesList Os códigos apresentados nas Figuras 37 a 42, escritos utilizando a linguagem WSDL, contêm todas as informações necessárias a respeito das operações. A fim de definir e especificar um Web Service a última especificação necessária é a do elemento <service>, e para realizar tal serviço, é necessário a criação do elemento <port> que usará os elementos <porType> e <binding> definidos anteriormente: <service name=”PhoneListService”> <port name=”PhoneListServices” binding=”tns:PhoneListServicesSOAPBinding”> <soap:addresslocation = “http://localhost:8080/axis/services/PhoneListServices”/> </port> </service> Figura 43 - Especificação do elemento <service> Da mesma forma, será necessária a criação do arquivo WSDL usado para especificar o phoneProvider Web Service. A criação do WSDL de cada Web Service é a questão chave do projeto, desenvolvimento e implantação dos Web Services. 4.4.3 Geração dos Códigos dos Web Services Nesta etapa devem ser geradas todas as classes Java necessárias à implementação do serviço. Para realizar tal tarefa, foi utilizada uma ferramenta chamada WSDL2Java, que vem junto com o Axis, e aplicada a todos os arquivos WSDL criados para os Web Services. A Figura 44 apresenta as classes automaticamente geradas, sendo que PhoneListServicesSOAPBindingImpl foi a única codificada manualmente, pois contém os procedimentos do negocio. Esta classe sempre tem o nome do elemento <binding> mais a string “Impl.Java”. Figura 44 - Classes automaticamente geradas pela ferramenta WSDL2Java As classes apresentadas na Figura 44 foram usadas para criar os arquivos do lado do servidor, e correspondem às classes usadas para criar seu próprio serviço. Para fazer uso do serviço é necessário obter a especificação WSDL do serviço construído e, usar a ferramenta WSDL2Java para processar este arquivo e gerar os arquivos do lado do cliente. Neste estudo os arquivos são: • Assinante.Java; • PhoneListService.Java; • PhoneListServiceLocator; • PhoneListeServices; • PhoneListServicesSOAPBindingStub. Neste caso foi necessário obter o WSDL phoneList para criar a classe cliente e usá-la no Web Service phoneProvider. Estas classes permitiram ao Web Service phoneProvider utilizar o serviço phoneList. 4.4.4 Implantação dos Web Services Após a codificação de cada operação feita pelos Web Services, a última tarefa a ser feita antes de usá-lo é a implantação do serviço. A Figura undeploy.wsdd, 44 mostra dois arquivos chamados deploy.wsdd e gerados pela ferramenta WSDL2Java. Ambos os arquivos são basicamente um documento XML, que será usado pela ferramenta AdminClient [02], para tornar o serviço disponível ou indisponível, ao ambiente AXIS. A ferramenta processa o arquivo, e então o serviço está pronto para ser utilizado pelo cliente ou outros Web Services. A Figura 45 apresenta como o AXIS mostra as informações sobre o Web Service phoneList após sua implantação (deploy). Figura 45 - Web Service construído Usando o mesmo método, após a criação do arquivo WSDL que especifica o Web Service phoneProvider foi necessário gerar seu código, implementar seus serviços e finalmente implantá-lo (deploy) no servidor do fornecedor. 4.4.5 Usando os Web Services Para demonstrar o uso dos Web Services foi criada para o cliente, neste caso uma suposta Agência de Turismo, uma aplicação em JAVA que usa o serviço do fornecedor (phoneProvider). Este cliente não tem conhecimento dos recursos utilizados por este fornecedor para fornecer as informações desejadas por ele, ou seja, não sabe da existência de um segundo Web Service (phoneList) envolvido nas operações. Para criar esta aplicação foi necessário usar o arquivo phoneProvider e, então gerar os arquivos do cliente. A Figura 46 apresenta a tela da aplicação usada pelo cliente, após uma consulta que utilizou os Web Services phoneProvider e phoneList. A consulta do cliente neste caso, não teve bairro informado e, somente a palavra peixoto como rua. Tal consulta teve como resultado, uma lista de todos os assinantes da cidade de Uberlândia, cujo Ramo de Atividade é Hotel, localizados em qualquer bairro e, que tenham em seu nome de rua a String Peixoto. Figura 46 - Aplicação Cliente A cadeia de serviços proposta neste estudo de caso é uma solução para a necessidade de um usuário, no caso uma Agência de Turismo. No entanto, este mesmo fornecedor pode ter outros Web Sevices disponíveis que completarão os serviços desejados pelo cliente, como por exemplo: reserva nos hotéis, nos restaurantes, nos teatros, etc. Portanto, esta cadeia de Web Services pode se expandir na medida em que as necessidades forem surgindo, oferecendo serviços cada vez mais ricos na Web. 4.5 Avaliação Segundo a WSA (Web Services Architecture), as principais metas arquiteturais de um Serviço Web estão descritas no documento que contém os requisitos necessários à arquitetura de uma WS, e são elas: • Interoperabilidade entre os Serviços Web; • Integração com a Internet; • Confiabilidade dos Serviços; • Segurança dos Serviços; • Gerenciamento dos Serviços. Diante dessas propostas, pôde-se avaliar ao final deste trabalho que: A Maturidade da Tecnologia – Se considerarmos que uma das unidades de medida de maturidade de uma tecnologia é o número de sistemas desenvolvidos e em desenvolvimento, então, WS ainda tem muito que caminhar para considerar-se uma tecnologia amadurecida, pois muitas avaliações ainda deverão ser feitas, principalmente no aspecto segurança, porém outros aspectos foram possíveis de serem verificados como: • Interoperabilidade – Foi implantada e obtida com sucesso, já que dois ambientes operacionais distintos foram utilizados sem dificuldade de integração; • World Wide Web - O HTTP, protocolo utilizado como meio de transporte para as mensagens SOAP, comportou-se de uma forma segura. E por tratar-se de um protoloco que utiliza a porta 80, de acesso livre para a Internet, facilita o desenvolvimento de aplicativos com estas características, ou seja, de softwares que ficarão disponíveis para acesso externos; • Confiabilidade – Apesar par de existir ainda uma série de testes para serem feitos, esta primeira versão da cadeia de Web Services não apresentou problemas neste aspecto; • Segurança e Gerenciamento – Quanto a estes itens, não houve tempo suficiente para uma avaliação apurada, porém com a continuidade deste trabalho, testes elaborados serão realizados com intuito de uma melhor verificação destes aspectos. Segundo as pesquisas feitas em relação a gerenciamento e segurança de Web Services, ainda há muito que avançar e amadurecer; • Facilidades x Dificuldades – As tecnologias aqui utilizadas para implantação e uso dos WS (Java, Apache Axis, Tomcat) foram implantadas e utilizadas sem nenhuma dificuldade, baseadas simplesmente nas orientações fornecidas por seus fabricantes. Obviamente que para o uso destas ferramentas exige experiência na área de informática. Existem no mercado atualmente outras ferramentas para desenvolvimento e implantação de Serviços Web como: Microsoft - Visual Studio.net; IBM - WSTK (Web Services Tool Kit); ORACLE - Oracle9iAS e a Sun - SunOne (Sun Open Net Environment), com as mesmas possibilidades de sucesso conseguidas com o Apache Axis. Porém, como o objetivo deste estudo não era verificar as ferramentas disponíveis no mercado, mas sim uma abordagem para desenvolvimento de serviços baseados em WS, testes com outras implementações não foram realizados. WS são componentes de software que podem ser invocados por outros componentes através da Web, permitindo assim a troca de informações e a disponibilização, independentemente de localização, sistema operacional ou linguagem de programação utilizada. A tecnologia WS promete resolver uma questão que até o presente momento tem sido complexa que é a interoperabilidade entre os componentes. Apesar de tratar-se de uma tecnologia relativamente recente, como ela é apoiada por verdadeiros gigantes como a IBM, ORACLE, Sun, HP, BEA, Microsoft e outros, isto leva a crer que não se trata de mais um modismo, mas sim de uma nova tendência. Outra avaliação interessante a ser considerada é a procura por serviços na Internet. O crescimento exponencial das informações na Web e a dificuldade para indexá-las com a linguagem HTML, causa muitas vezes certas decepções. Por exemplo: uma pesquisa com a palavra “SAUDE” provavelmente retornará um considerável número de respostas que não interessará ao usuário. Cabe então a este usuário a tarefa de identificar as diferenças e escolher a resposta que lhe convém. O problema é que esta diferença só é entendida pelos humanos e não fazem diferença para os programas de computador que ainda estão distante de imitar o funcionamento do cérebro humano e resolver estas ambigüidades. Um novo conceito de Web começa a surgir no mercado como uma tentativa de resolver esta questão. Trata-se da Web Semântica (Semantic Web) [31], onde a idéia é que as informações sejam também entendidas pela máquina e não só pelo ser humano, ou seja, informação compreensível pela máquina ou Machine-understandable Information, segundo o pai da Web, Tim Berners-lee . Neste contexto a linguagem XML é o componente central que permite descrever os dados de uma forma semântica, a partir das categorias determinadas pelo próprio usuário. Outras tecnologias e conceitos, no entanto, precisam ser associados ao XML para o sucesso da Web Semântica, como: URI (Universal Resource Identifier) como a URL[34]; RDF (Resource Description Framework) que é uma linguagem e uma gramática para definir informações na Web [34]; Ontologias [34 ] que são conjuntos de afirmações os quais definem as relações entre conceitos e estabelecem regras lógicas de raciocínio sobre eles; Agentes, que são softwares que funcionam sem o controle direto ou supervisão para executarem suas tarefas [32]. Portanto, a idéia central da Web Semântica é buscar através de seu agente, as informações realmente relevantes, o que torna um recurso fundamental para o sucesso dos Web Services e também a semântica da troca de mensagens entre o provedor e o requisitante. É inegável que os WS produzirão uma grande transformação na Internet, pois com eles torna-se possível que um grande volume de transações entre empresas aconteça com grande velocidade e facilidade. Se pensarmos em transações entre empresas com ambientes heterogêneos, plataformas diferentes que podem responder às solicitações em tempos variados, como teremos a garantia, por exemplo, que um serviço solicitado a uma empresa localizada no exterior, responderá com a rapidez necessária. Outro agravante é que os sistemas atuais são constantemente atualizados com novas versões. Para isto existem ferramentas para EAI (Enterprise Apllication Integration) [35] que devem ser utilizadas para orquestrar os Web Services. Deste modo pode-se ter todo o fluxo de uma operação B2B visualizado graficamente, e as alterações, quando necessárias, realizadas na interface gráfica. Se pensarmos que as interações entre processos remotos envolvem muitas vezes transações complexas que necessitam de alta disponibilidade e escalabilidade é fundamental o uso da orquestração dos WS para que os negócios entre empresas sejam executados de uma forma segura e rápida. A Figura 47 apresenta um quadro comparativo entre as tecnologias discutidas neste relatório. WS RPC ORB J2EE .NET Gerenciamento N/D N/D Interoperabilidade Ótima Regular Fraca Regular Fraca Segurança Fraca Fraca Boa Ótima Boa Integração de Ótima Regular Boa Ótima Ótima Ótima Fraca Fraca Regular Regular Regular Sistema Manutenção Regular Regular Figura 47 - Quadro Comparativo 5. Conclusões e Trabalhos Futuros No mundo dos negócios, as empresas sempre tiveram a necessidade de manter um relacionamento intenso, a fim de garantir sua sobrevivência no mercado competitivo. Com o passar dos tempos e avanço das tecnologias de comunicação, esta forma de relacionamento sofre consideráveis mudanças de comportamento e necessidades. Esta constante e rápida evolução nos meios de comunicação tem provocado saltos consideráveis na maneira como as empresas realizam suas transações com fornecedores e clientes, que cada vez mais exigem qualidade, agilidade e segurança nos serviços prestados. Entre as mais diversas formas de integração entre as empresas, a informática tem apresentado enormes contribuições, pois representa uma fundamental ferramenta para a implementação e sucesso destas evoluções. O fato das empresas sempre buscarem qualidade e rapidez na prestação de serviços, muitas vezes provocam o avanço das tecnologias, principalmente para troca de informações e dados e hoje, é impensável uma empresa de negócios que não faça uso da Internet, ferramenta importante para o sucesso dos negócios, e aquelas que não a usam correm o risco de ficar fora do mercado. Sendo assim, este trabalho conclui que Web Services ou uma cadeia de Web Services: • Usando os conceitos HTTP, SOAP e XML juntamente com o WSDL é possível desenvolver e implantar o conceito de Serviços Web; • Apresenta-se como uma nova maneira de integração entre aplicações com característica heterogêneas (interoperabiliade); • Funciona de uma forma totalmente transparente para seus usuários; • Apresentou a viabilidade de utilização de WS na implementação de aplicações B2B (Business to Business); • A possibilidade de divulgação de seu serviço de uma forma padronizada em um meio tão poderoso quanto a Internet, permite enormes chances de atingir um público bem maior de interessados; • A possibilidade de sistemas totalmente heterogêneos serem suficientemente independentes para agirem por conta própria, e se comunicarem quando necessário, independentemente de plataformas, sistemas operacionais e linguagens de programação, gera novas facilidades de integração com sistemas atuais e legados; • Um grupo de Web Services, implantado em diferentes companhias, pode gerar uma cadeia de serviços, usando enlaces de alta velocidade para se conectarem. Neste ambiente, apesar de ser transparente para o cliente, ele poderá contar com resultados mais rápidos; • O desenvolvimento e implantação de um ambiente para Web Services, exige de seu analista um conhecimento de várias tecnologias, como por exemplo: projeto de sistemas, linguagens de programação, sistemas operacionais, plataformas de desenvolvimentos, e outros. A partir das potencialidades de Web Services apresentadas neste trabalho, pode-se vislumbrar os seguintes trabalhos futuros: • Implantar outras cadeias de serviços utilizando ferramentas diferentes existentes no mercado como as da IBM, MICROSOFT, SUN e ORACLE; • A possibilidade de aplicação comunicando com aplicação em empresas diferentes, gera uma nova preocupação para os fornecedores de serviços, a segurança. Há muito trabalho a ser feito nesta área, ou seja, o desenvolvimento de procedimentos de segurança como: assinaturas digitais, certificados digitais, criptografias, etc..Empresas fornecedoras de software, tem investido fortemente nesta área; • J2EE e .Net são arquiteturas oferecidas por diferentes fornecedores, sem nenhuma preocupação com interoperabilidade. A tecnologia dos Web Services é uma candidata natural para integrar estas arquiteturas; • Através do uso do WSDL, é possível automatizar o código do cliente e o do servidor. Isto aumenta a interoperabilidade e abre um excelente caminho para absorver uma enorme quantidade de diferentes funcionalidades que, dia a dia, aparecem no mercado. 6. Referência Bibliográfica [01] Axis User's Guide. Apache Software Foundation. Disponível em : < http://ws.apache.org/axis/java/user-guide.html > Acessado em: 07 de outubro de 2003. [02] Axis installation instructions. Apache Software Foundation. Disponível em: < http://ws.apache.org/axis/java/install.html > Acessado em 27 de outubro de 2003. [03] The Apache Jakarta Project. Apache Software Foundation. Disponível em: <http://jakarta.apache.org/tomcat/index.html>. Acessado em: 27 de outubro de 2003. [04] The Apache Ant Project. Axis-wsdl2java Task. Apache Software Foundation. Disponível em: < http://ws.apache.org/axis/java/ant/axis-wsdl2java.html >. Acessado em: 27 de outubro de 2003. [05] Schimidt´s, Douglas c.; Overview of CORBA Disponível em: http://www.cs.wustl.edu/~schmidt/corba.html Acessado em: 07 de agosto de 2003 [06] TANENBAUM, Andrew S.; Sistemas Operacionais Modernos", Editora 1999. [07] LIMA, Rayfram Rocha. Tutorial Corba. LTC, Disponível em: <http://www.mundooo.com.br/php>. Acessado em: 11 de setembro de 2003 [08] C. Montez; Um modelo de Programação para Aplicações de Tempo real em Sistemas Abertos., Monografiado Exame de Qualificação de Doutorado, DAS, UFSC, julho de 1987. Disponível em < http://www.lemi.ufsc/~montez/corba/corba.html >. Acessado em 09 de setembro de 2003. [09] HORSTMANN, Markus; KIRTLAND, Mary. DCOM Architecture. Disponível em: <http://www.msdn.microsoft.com/library/en-us/dndcom/html/ >. Acessado em: 04 de setembro de 2003 [10] W3C; HyperText Markup Language; Home Page. Disponível em < http://www.w3.org/MarkUp/ > Acessado em 20 de junho de 2003. [11] PAWLAN, Monica; The J2EE Tutorial. Disponível em: <http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Overview.html> Acessado em 27 de setembro de 2003. [12] Oliveira, Alcione de Paiva; Maciel, Vinícius Valente; Java na Prática, (Volumes I e II); Universidade Federal de Viçosa; Departamento de Informática. [13] W3C; Overview of SGML Resources Disponível em: < http://www.w3.org/MarkUp/SGML/ > Acessado em:20 de junho de 2003. [14] Box, D. et al. Simple Object Access Protocol (SOAP) 1.1. World Wide Web Consortium Note, 2000. Disponível em: <http://www.w3.org/TR/2000/NOTE-SOAP-20000508>. Acessado em: 15 de agosto de 2003 [15] Harold, E. R. Processing XML with Java: A Guide to SAX, DOM, JDOM, JAXP, and TrAX. Boston, MA: Addison Wesley, 2002. 1120 p. [16] BRAY, Tim; PAOLI, Jean, SPERBERG, C. M., MALER, Eve. Extensible Markup Language (XML) 1.0 (Second Edition). Disponível em <http://www.w3.org/TR/2000/REC-xml-20001006 >. Acessado em 15 de agosto de 2003. [17] Centro de Competência de Software em XML.Curitiba – PR. Histórico da Tecnologia XML Disponível em http://www.institutoxml.org.br/historico.aspx. Acessado em 04/09/2003. [18] CHAMPION, et al. Web Services Architecture – W3C Working Draft 14 November 2002. Disponível em < http://www.w3.org/tr/2002/WD-ws- arch- 20021114/ > Acessado em 25/04/2003. [19] Marcio Boaro; Web Services – Uma Visão Inicial; Disponível em: http://www.csit.com.br/html/artigos/artigo08.htm Acessado em : 20 de marco de 2003 [20] Chinnici, Roberto et al. Web Services Description Language (WSDL) Version 1.2 Part 1: Core LanguageW3C Working Draft 11 June 2003. Disponível em: http://www.w3.org/TR/2003/WD-wsdl12-20030611/ Acessado em: - 15 de agosto de 2003. [21] Christensen, E. et al. (2001) Web Services Description Language (WSDL) 1.1. World Wide Web Consortium Note. Disponível em <http://www.w3.org/TR/wsdl>. Acessado em: 27 de novembro de 2003. [22] Timothy Appnel; An Introduction to WSIL (Web Service Inspection language); Disponível em: http://www.oreillynet.com/pub/a/onjava/2002/10/16/wsil.html Acessado em 21 de marco de 2003. [23] Douglas Bryan et al; UDDI Version 2.04 API Specification; Disponível em: <http://uddi.org/pubs/ProgrammersAPI-V2.04-Published-20020719.htm> Acessado em : 20 de abril de 2003 [24] Henry, Kevin; Distributed Computation with Java Remote Method Invocation Disponível em: < http://www.acm.org/crossroads/xrds6-5/ovp65.html > Acessado em: 20 de abril de 2003 [25] Luís Pereira, João Carmo; Mecanismos de Geração de Código na plataforma .Net Disponível em: < http://mega.rnl.ist.utl.pt/~ic-micro/ uP_01_02_artigo_sintese_1.pdf > Acessado em: 23/09/2003 [26] Microsoft .Net; What is .NET Disponível em < http://www.microsoft.com/net/basics/ > Acessado em 15 de junho de 2003. [27] Object Management Group, Inc.; Introduction to OMG's Unified Modeling Language; Disponível em: < http://www.omg.org/oma/ > Acessado em 20 de junho de 2003 [28] Object Management Group, Inc.; Introduction to OMG's Unified Modeling Language; Disponível em: < http://www.omg.org/uml/ > Acessado em 20 de junho de 2003 [29] Bowman, Phil et al ; Remote Procedure Call Disponível em: http://searchwebservices.techtarget.com/sDefinition/0,,sid26_gci214272,00.html Acessado em : 12/04/2003 [30] Sun Microsystems; JAVA IDL; Disponível em: http://java.sun.com/j2se/1.3/docs/guide/idl/; Acessado em; 20/06/2003 [31] W3C Semantic Web Activity Statement Disponível em: http://www.w3.org/2001/sw/Activity/; Acessado em; 05/01/2004 [32] Berners-Lee, Tim; Semantic Web Road map Disponível em: http://www.w3.org/DesingnIssues/Semantic/; Acessado em; 05/01/2004 [33] Booth, D. et al. Web Services Architecture. World Wide Web Consortium Working Draft, 2003. Disponível em <http://www.w3.org/TR/2003/WD-ws-arch-20030808>. Acessado em: 27 de novembro de 2003. [34] O futuro da Internet Disponível em <http://www.comciencia.br>. Acessado em: 12 janeiro de 2004. [35] Garcia, Simone de Souza, et al; EAI – Enterprise Apllication Integration Núcleo de Computação Eletrônica – Universidade Federal do Rio de Janeiro.