UNIVERSIDADE FEDERAL DE SANTA CATARINA - UFSC CURSO DE CIÊNCIAS DA COMPUTAÇÃO FERNANDO MARÇAL SENRA DOUGLAS SCHROEDER Protótipo de Um Sistema de Agendamento de Consultas Para A Integração de Centros de Saúde e Hospitais Públicos FLORIANÓPOLIS, JULHO DE 2006. FERNANDO MARÇAL SENRA DOUGLAS SCHROEDER Protótipo de Um Sistema de Agendamento de Consultas Para A Integração de Centros de Saúde e Hospitais Públicos Proposta para o Trabalho de Conclusão de Curso, a ser apresentado para obtenção do grau de bacharel no curso de Ciências da Computação da Universidade Federal de Santa Catarina, UFSC. Orientador: Dr. João Bosco Mangueira Sobral Dedicatória. AGRADECIMENTOS Espaço reservado para agradecimentos àqueles que tornaram possível à realização deste trabalho. “Nossa vida é desperdiçada em detalhes... Simplifique, simplifique”. Henry ThoureauRESUMO O trabalho tem como objetivo propor e implementar uma arquitetura confiável que forneça o serviço de marcação de consultas em hospitais da rede pública de saúde, sendo acessado a partir de terminais remotos localizados nos postos de saúde. Isso será feito na forma de um protótipo de sistema, já que não temos acesso ao sistema real dos hospitais da rede publica. Nosso propósito é implementar não somente os sistemas necessários para tal tarefa, como também integrar todo o software necessário para que o sistema possa executar de maneira estável. Também é objetivo aplicar técnicas normalmente aceitas de engenharia de software, em todas as etapas do projeto, desde sua concepção até a sua fase de testes. A motivação nasce da idéia de que um serviço como este estando disponível poderá trazer maior qualidade de vida para os usuários do sistema público, evitando que os mesmos passem horas em filas desnecessárias, muitas vezes em condição enferma. Palavras-chave: WEB SERVICES, AXIS, SOAP. ABSTRACT This academic work consists had as objective implementing a trustworthy architecture that supplies the service of marking of consultations in the public hospitals, being had access from located remote terminals in the health centers. This will be made in the form of a system archetype, because I do not have access to the real system at the hospitals. The intention is implement the systems necessary for this archetype, and also integrate all necessary software that make the enterprise system to execute in a steady way. Also had the objective to apply normally accepted techniques of software engineering, in all stages of the project, since its conception until its phase of tests. The motivation born in a idea that a service as this being available will be able to bring bigger quality of life for the users of the public health system, preventing that the someone pass hours in unnecessary lines. LISTA DE ILUSTRAÇÕES Figura 1. H. Voormann distribuída GNU....................................26LISTA de maneira legal DE ABREVIATURAS E SIGLAS W3C – World Wide Web Consortium URL – Uniform Resource Locator HTTP – Hyper Text Transfer Protocol sobre a licença HTML – Hyper Text Markup Language CERN – European Organization for Nuclear Research DARPA – Defense Advanced Research Project Agency MIT – Massachusetts Institute of Technology LCS – Laboratory for Computer Science XML – Extensible Markup Language SOAP – Service Oriented architectural Pattern RPC – Remote Procedure Call RMI – Remote Method Invocation WS-I – Web Services Interoperability Organization FTP – File Transfer Protocol SMTP – Simple Mail Transfer Protocol XMPP – Extensible Messaging and Presence Protocol DOM – Document Object Model CORBA – Common Object Request Broker Architecture OMG – Object Management Group API – Application Programming Interface OASIS – Organization for the Advancement of Structured Information Standards UFSC – Universidade Federal de Santa Catarina INE – Departamento de Informática e Estatística SGBD – Sistema Gerenciador de Banco de Dados UDDI – Universal Description, Discovery and Integration Service XML DSIG – XML Digital Signature# JVM – Java Virtual Machine SUMÁRIO 1 APRESENTAÇÃO ................................................................................................. 11 1.1 Entidade ............................................................................................................. 11 1.2 Titulo................................................................................................................... 11 1.3 Autores ............................................................................................................... 11 1.4 Orientador .......................................................................................................... 11 1.5 Banca Avaliadora .............................................................................................. 11 2 INTRODUÇÃO ...................................................................................................... 12 2.1 Descrição do Problema..................................................................................... 12 2.2 Objetivos ............................................................................................................ 12 2.2.1 Objetivos Gerais ............................................................................................. 12 2.2.2 Objetivos Específicos .................................................................................... 13 2.3 Tecnologias Escolhidas.................................................................................... 14 2.3.1 Servidor Web .................................................................................................. 14 2.3.1.1 Servidor Apache HTTP Server ................................................................... 14 2.3.1.2 Apache Tomcat ............................................................................................ 15 2.3.2 O PSH e a tecnologia Java ............................................................................ 16 2.3.3 Resumo sobre o SGBD escolhido e o porquê da escolha .......................... 21 2.3.4 Resumo sobre a tecnologia escolhida para o desenvolvimento do web service e o porquê da escolha ............................................................................... 23 3 VISÃO GERAL SOBRE WEB SERVICES............................................................. 25 3.1 SOAP Simple Object Access Protocol ............................................................ 28 3.3 Web Service Description Language (WSDL) ................................................... 32 REFERÊNCIAS ......................................................................................................... 34 APACHE SOFTWARE FOUNDATION. Apache Derby Tutorial. Disponível em: <http://db.apache.org/derby/papers/DerbyTut/index.html>. Acesso em: 27 de Março de 2005.......................................................................................................... 35 [1] WIKIPEDIA. Servidor Apache. Disponível em: <http://pt.wikipedia.org/wiki/Servidor_Apache>. Acesso em: 19 de Março de 2006. ......................................................................................................................... 35 [3] Network Research Group. Hypertext Transfer Protocol -- HTTP/1.1. Disponível em: <http://www.w3.org/Protocols/rfc2616/rfc2616.html>. Acesso em: 13 de Março de 2006. ....................................................................................... 35 [5] W3C. SOAP Version 1.2 Part 1: Messaging Framework. Disponível em: ...... 35 [6] W3C. 3. SOAP Extensibility Model. Disponível em: <http://www.w3.org/TR/soap12-part1/#extensibility>. Acesso em: 11 de Março de 2006. .................................................................................................................... 35 [7] W3C. 4. SOAP Protocol Binding Framework. Disponível em: ....................... 35 [8] W3C. 5. SOAP Message Construct. Disponível em: ....................................... 35 [9] W3C. Web Services Description Language (WSDL) 1.1. Disponível em: ...... 35 113 6 1 APRESENTAÇÃO 1.1 Entidade Universidade Federal de Santa Catarina Curso de Ciências da Computação 1.2 Titulo Protótipo de Um Sistema de Agendamento de Consultas Para A Integração de Centros de Saúde e Hospitais Públicos. 1.3 Autores Fernando Marçal Senra. Douglas Schroeder. 1.4 Orientador Prof° João Bosco Mangueira Sobral, Doutor. 1.5 Banca Avaliadora Prof° Fernando Augusto da Silva Cruz, Doutorando. Prof° Leandro José Komosinski, Doutor.(a confirmar) Profª Patrícia Vilain, Doutora. 123 6 2 INTRODUÇÃO O presente documento tem por objetivo definir a proposta de projeto de conclusão do curso de Ciências da computação da Universidade Federal de Santa Catarina (UFSC). Neste Será definidos objetivos gerais e específicos do trabalho, apresentar-se-á fundamentação teórica necessária para realização do mesmo, além de descrever brevemente a motivação de se atingir os objetivos. Este documento é, portanto, apenas um rascunho inicial do trabalho final a ser apresentado nas disciplinas de Introdução ao Projeto em Ciências da Computação (INE 5373) e Pesquisa Bibliográfica (CIN5100) cursadas no semestre 2005.2 na UFSC. 2.1 Descrição do Problema Um hospital da rede pública de saúde possui geralmente sistemas computacionais gerenciando seus vários setores, emergência, financeiro, lavanderia, cozinha, laboratórios, etc. Assim como também gerenciam seus serviços, como marcação de consultas, marcação de cirurgias, exames, etc. A marcação de consultas invariavelmente se dá de uma mesma forma. A pessoa se dirige até o hospital, onde normalmente, em caso de emergência, vai buscar um atendimento imediato para seu problema, o que pode levar minutos ou horas, dependendo da gravidade de seu problema e do tamanho da fila no setor de emergência do hospital. Em outra situação, a pessoa pode não estar procurando o serviço de emergência, mas sim, deseja um atendimento preventivo com um clinico geral, ou foi encaminhada por um clinico geral ao hospital com a finalidade de agendar consulta com um médico especialista. Este atendimento pode se transformar em questão de horas, dias ou mesmo meses, principalmente no caso de marcação de especialistas. Essas pessoas encaminhadas ao hospital, normalmente receberam atendimento médico prévio em um posto ou centro de saúde, em sua localidade, no qual são realizadas consultas com clínicos gerais, que encaminham o paciente a um hospital quando o mesmo necessita de atendimento especializado. 2.2 Objetivos 2.2.1 Objetivos Gerais 133 6 O objetivo central deste trabalho é discutir, apresentar e implementar uma arquitetura estável, para executar um web service, que permitirá o acesso a um protótipo de sistema hospitalar, o qual iremos nos referir no texto como PSH.Este web service ao qual iremos construir terá a finalidade fornecer o serviço de marcação de consultas em um hospital presente no PSH. O serviço ficará acessível através de uma aplicação web, que será executada a partir de um navegador de Internet (Browser), acessando através do web service (WS), o PSH que estará executando como uma aplicação Desktop. A idéia é de que este serviço, estando disponível em um sistema real, forneceria o serviço de marcação de consultas a partir de qualquer centro de saúde, desde que o mesmo possua um computador conectado a Internet, evitando dessa maneira, que o paciente do sistema público de saúde necessite se dirigir a uma fila de hospital após ser atendido em um posto de saúde no qual recebeu a indicação para marcar consulta em hospital publico. 2.2.2 Objetivos Específicos Implementar: O PSH como aplicação Desktop. Um web service que permita ao PSH expor seu serviço de agendamento de consultas sem expor a aplicação. Uma aplicação web comum (baseada no protocolo HTTP) que permita acesso ao web service. Utilizar: Tecnologia de servidor web que ofereça integridade, escalabilidade, robustez, segurança, tolerância a falhas, bem como pertencer à categoria de softwares livres, para que a aplicação web possa ser executada de maneira estável. Tecnologia não proprietária para implementação do PSH, que ofereça suporte a execução dessa aplicação em ambientes diversos de maneira simples e barata. Utilizar Sistema Gerenciador de Banco de Dados (SGBD) livre para armazenar os dados a serem salvos pelo PSH. Utilizar tecnologia igualmente livre para criação do web service a ser 143 6 construído para integrar o PSH a aplicação web. 2.3 Tecnologias Escolhidas O objetivo deste item é descrever um pouco as escolhas tecnológicas que fizemos para a execução do projeto, e isso será feito de forma independente para cada tecnologia escolhida. Neste presente texto não será apresentado resultado prático de desenvolvimento, apesar dos autores se reservarem o direito de demonstrar através de fragmentos de código o quem pretendem executar depois maior escala. É possível que haja alterações futuramente, já a tecnologia de web services está em pleno desenvolvimento, bem como toda a tecnologia Java™, a qual é base para a maioria, senão todas, as implementações que serão realizadas. 2.3.1 Servidor Web Como foi apresentado antes, iremos desenvolver uma pequena aplicação web bastante simples que será a interface do usuário para acesso ao web service a ser desenvolvida, essa aplicação web poderá ser implementada com diferentes linguagens de programação, como por exemplo, PHP, mas nós iremos optar por desenvolver uma aplicação bastante simples em JSP (Java Server Pages). O importante é que desejamos que servidor web, no qual essa aplicação web ira executar ofereça alguns recursos que consideramos importantes a aplicações desta natureza. Em especial, que o servidor ofereça integridade, escalabilidade, robustez, segurança, tolerância a falhas, bem como pertencer à categoria de softwares livres, para que a aplicação web possa possuir alta disponibilidade, afinal, nada é pior que uma pagina web fora do ar. Para atender a esse requisito de aplicação iremos implantar no servidor da aplicação Web uma estrutura baseada no servidor Apache HTTP Server, junto com o Apache Tomcat, a qual pode ser configurada para executar em um ambiente de cluster oferecendo todas as qualidades especificadas acima. Não é objetivo desta seção apresentar como isso será feito, o que valerá um capítulo à parte no texto futuramente. 2.3.1.1 Servidor Apache HTTP Server 153 6 O servidor Apache é o mais bem sucedido servidor web livre. Foi criado em 1995 por Rob McCool, então funcionário do NCSA (National Center for Supercomputing Applications), da Universidade de Illinois.[1] Faz parte da Apache Software Foundation[2], a qual provem suporte para comunidade Apache de projetos de código livre. Sendo considerado por muitos seu principal projeto. É responsável por mais de uma dezena de projetos envolvendo tecnologias de transmissão via web, processamento de dados e execução de aplicativos distribuídos. O projeto do Apache HTTP Server é um esforço para desenvolver e manter um servidor HTTP open-source para modernos sistemas operacionais incluindo o Windows, Novell, Netware, OS/2 e diversos padrões de POSIX (UNIX, GNU, FreeBSD, etc). O objetivo deste projeto é fornecer um servidor seguro, eficiente e extensível que forneça a serviços que necessitem do protocolo HTTP um servidor de alto desempenho. O servidor Apache HTTP Server, hoje na versão 2.2, é compatível com o protocolo HTTP versão 1.1 especificado pelo documento RFC2616 [3] do W3C. Suas funcionalidades são mantidas através de uma estrutura de módulos, podendo inclusive o usuário escrever seus próprios módulos - utilizando a API do software. O Apache tem sido o mais popular servidor de Internet desde abril de 1996, e em novembro do ano de 2005 Necraft Web Server Survey encontrou mais de 70% dos web sites usando Apache.[4] 2.3.1.2 Apache Tomcat O Tomcat é um servidor de aplicação Java para web. É distribuído como software livre e desenvolvido como código aberto dentro do conceituado projeto Apache Jakarta e oficialmente endossado pela Sun como a Implementação de Referência (RI) para as tecnologias Java Servlet e Java Server Pages (JSP). O Tomcat é robusto e eficiente o suficiente para ser utilizado mesmo em um ambiente de produção. Em muitos lugares esta escrito que o Tomcat é um container para execução de Servlet e JSP, mas ele é muito mais que isso, ele implementa parte da plataforma J2EE que abrange as tecnologias de Servlet e JSP, incluindo tecnologias de apoio relacionadas como Realms e segurança, JNDI Resources e JDBC Datasources. O 163 6 Tomcat tem a capacidade de atuar como servidor web sob o protocolo http sozinho, ou pode funcionar integrado a um servidor web dedicado como o Apache HTTP Server ou o Microsoft IIS. A escolha do Tomcat deve-se ao fato da mesma ser implementação de referencia da tecnologia JSP, além disso, já vem integrado e ativado por default ao Servidor Apache HTTP Server, e para a nossa necessidade de alta disponibilidade, poder ser configurado como um cluster. Cluster hoje é um termo muito abusado na computação, e pode ser utilizado para vários fins, mas no nosso caso, um cluster de servidores Tomcat é uma estrutura onde as requisições HTTP são recebidas pelo Apache HTTP Server, e repassadas para várias instancias do Tomcat, as quais realizam replicações da seção http da requisição. O fato é que, um servidor web, pode falhar, por diversas razões, e um container JSP, pode falhar com muito maior probabilidade.Então a idéia será implementar essa arquitetura de cluster no servidor para que, no momento que um container falhar, o seu trabalho possa ser atendido em outro nó do cluster, como veremos futuramente na fase de implementação da aplicação Web e configuração do Servidor. 2.3.2 O PSH e a tecnologia Java O objetivo deste tópico é falar um pouco a respeito da tecnologia que decidimos utilizar para a construção do protótipo de sistema hospitalar (PSH), o qual deverá possuir apenas algumas funções básicas de um sistema real de um hospital. Funções estas que serão posteriormente definidas, mas que basicamente se resumirão a coletar dados sobre um usuário a fim de agendar marcação de consultas. Um sistema hospitalar real e completo, em geral possui tarefas muito avançadas para serem implementadas em um protótipo, e, portanto seria inviável construirmos um sistema completo de gerencia hospitalar. Nosso desejo é substituir esse protótipo PSH por um sistema real futuramente, mas para isso será necessário o patrocínio de algum município, ou até mesmo de uma instância maior, como por exemplo, um governo de estado, para que possamos ter acesso a um sistema real em produção. 173 6 Vamos falar nesta seção, um pouco sobre a tecnologia Java, a qual escolhemos para a implementação do protótipo por diversos motivos, dentre eles: Por ser amplamente difundida, já estando presente hoje em mais de 2,5 bilhões de dispositivos segundo números da Sun. Por ser linguagem utilizada em várias disciplinas do curso de Ciências da Computação na UFSC onde estamos desenvolvendo este documento. Por ser uma linguagem em constante evolução (O release final para a versão do novo Java seis, codinome Mustang, será lançada apenas 21 meses após a versão final do Java cinco, codinome Tiger ter sido lançada). Pelo gigantesco esforço da Sun Microsystems™ em popularizar e facilitar a cultura de web services, inclusive integrando ao próximo Java (Mustang) APIs para facilitar o desenvolvimento de services.Como por exemplo, a JSR-181: Metadados para Web Services, além de disponibilizar diversas outras APIs para download separadamente do JSE(Java Standard Edtion). Pela enorme disponibilidade de projetos opensource (de código livre) que utilizam a tecnologia e disponibilizam ferramentas e APIs que reduzem drasticamente o esforço de desenvolvimento. Pelas constantes melhorias de desempenho, possibilitando que as modernas JVM (Java Virtual Machines) com seus compiladores JIT (Just in Time Compiler) possam apresentar desempenho semelhante, e muitas vezes superior, ao de compiladores tidos como mais velozes, por exemplo, o GCC (GNU Compiler Collection), o qual compila diversas linguagens, inclusive Java, diretamente para linguagens de maquina, isso será explicado adiante. Enfim, por ser objeto de estudo de ambos os autores em projetos paralelos, e estudos específicos voltados à certificação na tecnologia. 183 6 Nós poderíamos escrever um trabalho completo de conclusão de curso apenas sobre esta tecnologia, mas tentaremos falar um pouco sobre o que é o Java sem se aprofundar demais nas especificações da linguagem. Vamos começar tentando respondendo a pergunta “O que diabos é Java?”.De uma forma prática podemos imaginar que Java é um computador, um computador virtual que só habita no mundo dos computadores reais como x86 ou Sparc´s. É a chamada JVM, ou seja, uma maquina virtual (embora hoje já existam implementações físicas dessa maquina). A JVM disponibiliza vários recursos, como por exemplo, tarefas de impressão, e renderização de telas gráficas de alta qualidade. Então alguém pode pensar “Esta maquina deve custar uma verdadeira fortuna”, mas eu te respondo agora que essa maquina tem um custo zero para a maioria das pessoas que a utilizam. A não ser no caso das pessoas que compram implementações desta maquina de outros fornecedores de JVM que não a Sun Microsystems, isso para sistemas específicos, a maioria das pessoas, podem ter em seu computador pessoal, em seu notebook, ou ainda em diversos outros dispositivos, uma implementação da JVM. Você pode realizar o download gratuito da JVM a partir do sitio Web da Sun. Por se tratar de uma maquina virtual, ou seja, fisicamente ela não existe (com raras exceções), a maquina virtual Java se torna bastante versátil por poder estar presente em dezenas de computadores de diferentes arquiteturas, com diferentes sistemas executando sobre a arquitetura e ainda assim executar programas escritos em Java. E nesse ponto vem a pergunta “Mas esse tal Java não era uma maquina virtual, como pode agora ser usado para escrever programação de computador?”.Então, nesse ponto, respondemos, Java não é uma linguagem de programação (como infelizmente muitos ainda pensam), menos ainda, uma maquina que nem existe no mundo real. Java é um conjunto de especificações, dezenas delas...Bem, pra falar a verdade são centenas de especificações que definem a linguagem de programação, o formato do arquivo java, o formato do arquivo class, uma API qualquer, ou mesmo a JVM. Essas Especificações conhecidas como JSR (Java Specification Requests) são textos que especificam o que é necessário para que um software implemente 193 6 aquela JSR.Uma lista completa com todas as JSR´s pode ser encontrada em http://www.jcp.org/en/jsr/all . Logo, por conseqüência natural, um programa que execute algum processo Java, especificado por uma JSR, deverá executar sobre esse computador virtual, a JVM, seja qual for à plataforma em que o mesmo se encontra atualmente, por exemplo, Unix ou Windows. Claro que isso em um mundo ideal, mas como as coisas idéias são difíceis de alcançar, ainda existem alguns cuidados que são necessários para que os programas executem em qualquer JVM. Algumas características da linguagem Java: POO - É uma linguagem de programação orientada a objetos(POO), implementando quase todos os recursos que se tem como consenso na comunidade de POO, apenas evitando aqueles que não foram julgados convenientes pelos engenheiros da Sun, em especial James Gosling, considerado pai da tecnologia Java. Garbage Collector - Possui um mecanismo chamado Garbage Collector que elimina a necessidade do programador ficar gerenciando a liberação da memória consumida pelos seus objetos que não serão mais utilizados. Na maioria das linguagens, como C esta tarefa é responsabilidade do programador. Threads - Java possui suporte nativo ao mecanismo de threads, o que significa que seu programa pode rodar vários processos paralelamente, ficando a cargo do programador permitir ou não que seu programa libere recursos para outros processos. Exceptions - o tratamento de erros no Java é feito por meio de exceções. Exceptions são objetos que são disparado sempre que um programa executa algo inesperado, como por exemplo, uma divisão por zero, o que na maioria das linguagens tradicionais como C, encerraria a execução com um erro fatal. Em Java o programador pode, através do conhecimento da exception disparada, tratar o erro corretamente. 203 6 Controlled Resources – O Controle de Recursos demonstra o grande esforço, desde o início, em tornar Java uma referencia em implementação segura. Para tanto, o acesso a recursos, como arquivos e rede, é enormemente controlado. Isso se faz necessário, principalmente pelas diversas formas que uma pessoa pode invocar um programa Java, sem ter nem mesmo o conhecimento de que aquilo é um programa. Java API - seguindo o paradigma da orientação a objetos de se reaproveitar tudo ao máximo, uma API (Application Programming Interface) do Java é bastante extensa e abrangente. Não perca seu tempo reinventando a roda, use as classes da API! Write once, run everywhere - O principio de que um programa Java, depois de compilado para a linguagem que a JVM interpreta, linguagem esta chamada Java bytecodes, os quais ficam guardados em arquivos de extensão class (que possuem sua própria especificação, como tudo em Java), deverão executar sem problemas em qualquer implementação de JVM (desde que essa implementação seja aceita pela Sun) sobre qualquer sistema.E este é o segredo da portabilidade de programas Java: a única parte que necessita ser portada é a JVM, e não o seu programa. Logo como foi apresentado, Java é uma plataforma tecnológica, a qual apresenta solução para dezenas de categorias de problemas computacionais, criando sistemas portáveis entre diferentes plataformas de sistemas. É possível construir aplicações Desktop, distribuídas em rede, seja esta rede uma Intranet ou mesmo a Internet, aplicações Web, aplicações para dispositivos portáteis como celulares e PDA´s, e no momento atual se encontra em pleno desenvolvimento. O que implica que a plataforma de desenvolvimento esta cada vez mais completa e funcional, solucionando de forma mais simples, cada vez mais e mais situações complexas no mundo da computação. 213 6 2.3.3 Resumo sobre o SGBD escolhido e o porquê da escolha Como um dos objetivos do projeto é utilizar software livre, foram pesquisados alguns SGBDs no mercado que atendem a este requisito. Dentre os bancos de dados pesquisados, os que mais se destacaram foram o Derby e o HSQLDB. 2.3.3.1 Derby Apache Derby é um banco de dados relacional escrito inteiramente em Java, e como tal, roda em qualquer JVM certificada, sendo assim, é independente de plataforma. Além disso, é um banco compacto, que suporta a maior parte das instruções SQL. Principais Características: Possui driver JDBC para conexão com aplicações Java™; Pode ser embutido em aplicações Java, rodando na mesma JVM da aplicação; Suporta o modo cliente/servidor, com várias conexões simultâneas; Está a pouco tempo no mercado, se comparado ao HSQLDB; A documentação é um tanto quanto escassa; Uma vez que os dois SGBDs possuem características muito parecidas, fomos obrigados a nos ater aos detalhes, afim de decidir positivamente sobre um dos dois. Em virtude da maior maturidade do HSQLDB, acabamos optando por utilizá-lo como SGBD da aplicação. 2.3.3.2 Hypersonic SQL Database (HSQLDB) O HSQLDB é um banco de dados relacional inteiramente escrito em Java, podendo operar embutido em uma aplicação, ou como um servidor de rede independente. Além de suportar a maior parte das funções SQL, incluindo triggers, integridade referencial, outer joins, visões, transações, entre outras. Sua arquitetura foi projetada para ser leve, com pouca demanda de processador, memória e armazenamento. Ele é voltado para uso embarcado, em aplicações desktop, ou dentro de um hardware especialmente projetado. Já foi, 223 6 inclusive, utilizado como parte do sistema de apuração de votos das eleições brasileiras, o que, sem dúvida atesta a sua credibilidade. Alguns fatores que contribuíram para a escolha do HSQLDB: É um SGBD com código aberto, escrito totalmente na linguagem Java™; Pode ser agregado ao pacote da aplicação. Ou seja, não necessita ser instalado e configurado separadamente no Sistema Operacional para entrar em funcionamento; É multiplataforma, ou seja, independe do Sistema Operacional; Possui driver JDBC para conexão com aplicações Java; Permite a manipulação de banco de dados em uma arquitetura clienteservidor, ou standalone. Benchmarks criados pelo projeto PolePosition (polepos.org) colocaram o HSQLDB, de modo geral, com performance superior a outros bancos de dados livres, entre eles o MySQL e o Apache Derby; O banco de dados em si, sem as ferramentas para administração, e o servidor web, pode ser compilado em um arquivo “.jar” com menos de 200 KB; Segundo o manual, apenas 170 KB de memória são necessários para rodar a engine do banco; Está consolidado no mercado, estando embutido em aplicações importantes como o Open Office; Possui documentação vasta e detalhada, inclusive em português; 2.3.3.2.1 Componentes do HSQLDB Apesar de ser uma ferramenta pequena, o HSQLDB engloba algumas funcionalidades interessantes, que serão brevemente descritas abaixo: Database Manager: Ferramenta gráfica para gerenciamento de banco de dados. Com ela é possível visualizar o esquema do banco de dados, conjunto de tabelas e submeter instruções SQL; Transfer Tool: Ferramenta que possibilita a transferência de esquemas SQL ou dados de uma fonte JDBC para outra. Muito útil quando se deseja migrar de um banco de dados para outro; 233 6 Query Tool: provê ao desenvolvedor uma interface para interação com o SGBD através de instruções SQL; SQL Tool: outra ferramenta que permite a construção e submissão de instruções SQL; 2.3.3.2.2 Modos de operação do HSQLDB Há quatro modos de operação do banco de dados, que determinam como aplicações-clientes se comunicam com o engine SQL: Standalone: O HSQLDB roda na mesma JVM que a aplicação. Containers web ou EJB podem usar o modo Standalone, visando maior segurança, uma vez que não é necessário abrir nenhuma porta TCP. Server: Modo preferencial para desenvolvimento, ou para uso como banco de dados departamental. Neste caso são aceitas conexões por uma porta TCP (9001 por padrão) através de um protocolo de aplicação do próprio HSQLDB. Assim, várias aplicações em JVMs diferentes podem acessar o banco de dados ao mesmo tempo. Web Server: Empregado quando se deseja utilizar uma conexão remota com o banco de dados. Neste modo são aceitas conexões TCP/IP encapsulando comandos SQL, sendo que os resultados são retornados pela mesma conexão. Servlet: Visa atender usuários de serviços de hospedagem compartilhada em sites web. Neste caso o servlet recebe comandos SQL como parte dos parâmetros da requisição HTTP, e devolve os resultados como resposta à requisição. 2.3.4 Resumo sobre a tecnologia escolhida para o desenvolvimento do web service e o porquê da escolha Ainda não está definida uma tecnologia para a implementação do web service. Como há várias opões no mercado, que atendem ao requisito de serem gratuitas, terá de ser feito um estudo mais aprofundado sobre o assunto para se poder chegar a um senso comum. Tal decisão deverá ser tomada com cuidado, uma vez que pode determinar os rumos de todo o trabalho. 243 6 Estamos no aguardo também, da chegada do Java 6.0, uma vez que ele trará algumas facilidades no que diz respeito à criação de web services. Apesar disso, algumas tecnologias já foram cogitadas, entre elas destacam se as plataformas: AXIS Desenvolvida pela Apache, a plataforma Axis é um projeto open source para um servidor e cliente SOAP, composta por vários subsistemas, ou módulos que trabalham conjuntamente, separando, assim, as responsabilidades. Isto permite que, nos casos em que não for necessário invocar todo o sistema, apenas alguns módulos atuem, economizando recursos do sistema. Basicamente, o Axis trabalha com processamento de mensagens. É muito comum esta plataforma ser considerada basicamente um SOAP engine – um framework para a construção de processadores de mensagens SOAP. Atualmente está implementado apenas na linguagem Java, mas uma versão para cliente C++ está em andamento [11]. JWSDP O Java Web Services Developer Pack (JWSDP) é um conjunto de ferramentas gratuitas que permite aos desenvolvedores Java implementarem web services ou aplicações web com XML. O Java WSDP engloba várias APIs que visam facilitar a construção de aplicações web. Entre elas incluem-se: Java Architecture for XML Binding, que como o próprio nome sugere, tem a funcionalidade de manipular arquivos XML; JavaServer Faces; Web Services Interoperability Sample Application; Web Services Security; JavaServer Pages Standard Tag Library (JSTL) e Java WSDP Registry Server; As ferramentas Ant Build Tool e Apache Tomcat container também fazem parte deste pacote distribuído pela Sun. O servidor de aplicação da Sun é o Sun ONE™ Application Server 7.0 [11]. GLUE A plataforma webMethods Glue™ é uma plataforma projetada para o desenvolvimento e distribuição de aplicações com serviços web.[FURTADO, 2005] 253 6 Projetado para simplificar a criação de aplicações utilizando web services, servlets e JSP e possui uma API para expor objetos Java como web services, a plataforma Glue pode ser configurada para para atuar em dois modos diferentes: Standalone e Hosted. No modo standalone, o Glue atua como um servidor de aplicações, já no modo hosted, pode se comunicar com outros servidores de aplicações e prover web services. Algumas características: Possui uma ferramenta de gerenciamento que roda em browser http, permite verificar o status de todas as aplicações que foram publicadas. Suporta hot-deployment de arquivos web.xml, o que permite editar tais arquivos enquanto o servidor está rodando e as novas configurações serão detectadas automaticamente; Suporta SSL sobre HTTP para comunicação segura, usando Java Secure Socket Extensions ; Suporta clusterização de servlets e JSPs; 3 VISÃO GERAL SOBRE WEB SERVICES De acordo com o W3C [1]: “There are many things that might be called "Web services" in the world at large. However, for the purpose of this Working Group and this architecture, and without prejudice toward other definitions, we will use the following definition: A Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAPmessages, typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards.” 1 Existem outras definições, mais simples, mas acreditamos que essa é a mais completa e aceita, tendo em vista o W3C(Word wide web consortium) ser 1 A tradução será omitida por motivos óbvios. Alterar depois. 263 6 amplamente respeitado na comunidade mundial de computação. A grande função de um WS é integrar sistemas escritos em diferentes linguagens, executando sobre diferentes plataformas de uma maneira padronizada e independente de fornecedores. No decorrer deste trabalho será apresentado mais sobre esta técnica, suas vantagens e desvantagens. Houve muita badalação há alguns anos sobre o XML (Extensible Markup Language) apontada por alguns entusiastas como solução final para todos os problemas de integração.Hoje este entusiasmo recai sobre a tecnologia de web services.Houve aqueles que não enxergam nada de novo no modelo proposto para services. Handerson Ferreira Gomes[HFG 2004], em seu pequeno artigo, “Integração de Sistemas? Há mais que Web Services.”, apresentado na revista Java Magazine, n° 15: “Ainda não me convenceram que de que seja possível que aplicações web services automaticamente localizem novos serviços na rede e reconheçam mensagens e seus formatos, integrando-se facilmente e, como num passe de mágica, concebendo uma nova aplicação”. O pequeno artigo citado expunha em uma página, uma solução baseada em URI/HTTP/XML, a qual, segundo ele poderia retirar boa parte da complexidade da tecnologia de web services com pouco investimento em servidores e treinamento de desenvolvedores e infra-estrutura. A realidade observada hoje, após curto período de tempo é que o mercado acreditou sim, na possibilidade de simplificar o trabalho daqueles que desejem, expor de maneira segura, alguns serviços já prestados por suas aplicações Desktop, na rede mundial de computadores. Nomes fortes da computação, como IBM, Oracle, Microsoft, Adobe, Xerox, SAP, Canoo, BEA Systens, Sun Microsystems trabalham junto a W3C em um forte empenho na definição de padrões e tecnologias para que a integração entre sistemas independentes deixe de ser uma experiência muitas vezes traumática nas diversas equipes de TI incumbidas de tal tarefa. 273 6 Dentre os padrões definidos por diversas equipes diferentes, além de contar com a colaboração de qualquer profissional da área que venha a ter interesse em colaborar com os projetos movidos pelo W3C, destaca-se a WSDL (Web Service Description Language). Uma linguagem para descrição de web services a ser utilizada como padrão pelos diversos fornecedores e consumidores de serviços.Uma lista completa com os desenvolvedores do projeto pode ser encontrado no sítio web http://www.w3.org/2002/ws/desc/#participants. Outro padrão mantido pelo W3C é o protocolo SOAP, atualmente na versão 1.2 o qual especifica um protocolo de uma maneira para a passagem de dados codificados em XML [Ethan, 2002]. Estes dois padrões serão melhores explicados posteriormente. A grande vantagem da web está em seu fácil acesso. E com o advento da computação móvel, os serviços poderão estar disponíveis em qualquer lugar. As possibilidades são infinitas. Desde de distribuidores deixando seus produtos a venda em forma de web services e mecanismos de busca, com enorme poder de busca, encontrando estes serviços e reunindo-os de forma fácil em termos de usabilidade para o usuário final, em uma gigantesca loja virtual, onde os consumidores poderiam encontrar qualquer item que desejarem com a vantagem de poder comparar o produto de diversos fornecedores em tempo real, serviços específicos de acesso restrito aos parceiros e colaboradores, como a compra de produtos por uma loja que mantém a política de não possuir estoque, serviços públicos como emissão de documentos ou declaração de impostos, ou mesmo fornecer informação ao usuário final, como um simples horário de ônibus na tela de seu celular. Grandes empresas detentoras de informação podem formar complexos esquemas de troca de informação para conhecer melhores os desejos e hábitos de uma população na qual possua interesse. É muito fácil perceber que há hoje no mundo enorme interesse nessa tecnologia, basta para isso visitar os sítios web de grandes fornecedores de software como a Sun Microsystems, IBM e Oracle. Então um Web service é um componente de software projetado para suportar interações maquina-maquina operando sob uma rede. Para tanto é necessária uma linguagem comum para definição de serviços na maquina que processa o serviço (WSDL), e um protocolo de comunicação para que outros sistemas possam interagir com o Web Service, o protocolo SOAP (Simple Object Access Protocol), o qual possui SOAP-messages as quais viajam por uma rede qualquer, privada ou não, de computadores em formato de Strings XML, utilizando-se do protocolo HTTP. 283 6 Figura 1. H. Voormann distribuída de maneira legal sobre a licença GNU. Na figura pode ainda ser visto a sigla UDDI (Universal Description, Discovery and Integration). As informações de um web service são publicadas usando este protocolo. E os aplicativos poderão acessar estas informações para determinar como utilizar os web services disponíveis em uma rede.O UDDI também receberá uma especial atenção posteriormente. 3.1 SOAP Simple Object Access Protocol O SOAP é a especificação de um protocolo de transmissão de dados codificados em XML. Define formas de simplificar a chamada remota de funções na Internet, permitindo que dois programas se comuniquem de forma muito semelhante à invocação de páginas Web. Foi submetido em 2003 pela IBM, Microsoft, Userland e DevelopMentor ao W3C que aceitou continuar o trabalho como mantenedor da especificação que hoje se encontra na versão 1.2. A atual versão é especificada em um documento produzido pelo XML Protocol Working Group que é também o responsável por futuras versões. Segundo a definição do W3C: 293 6 “SOAP Version 1.2 (SOAP) is a lightweight protocol intended for exchanging structured information in a decentralized, distributed environment. It uses XML technologies to define an extensible messaging framework providing a message construct that can be exchanged over a variety of underlying protocols. The framework has been designed to be independent of any particular programming model and other implementation specific semantics.” Os dois principais objetivos do projeto para o SOAP, segundo o W3C2 são simplicidade e extensibilidade [XMLP]. O projeto SOAP procura atingir esses objetivos e omitir, do framework de mensagens, características que sejam encontradas com freqüência em sistemas distribuídos. Tais características incluem, mas não se limitam a “confiabilidade”, “segurança”, “correlação” e “distribuição”, além das SOAP Message Exchange Patterns (MEPs) , ou em português “Padrões para troca de mensagens SOAP”.Sendo este último o principal foco do documento de especificação do protocolo SOAP.Outras características são deixadas para ser definida como extensões por outras especificações. A especificação do protocolo SOAP versão 1.2 consiste em três partes. À parte 1 define que o framework de mensagens SOAP consiste de3: O SOAP processing model, define as regras para o para o processamento de uma SOAP message.[5] 1. O SOAP Extensibility model define os conceitos de características SOAP e de módulos SOAP.[6] 2. O SOAP underlying protocol descreve as regras para definir a ligação com uma outra camada de protocolo subjacente que pode ser usada para trocar mensagens SOAP entre nodos SOAP.[7] 3. O construtor de mensagens SOAP define a estrutura de uma mensagem SOAP.[8] À parte 0 (zero) do protocolo, é um documento não normativo que tem a intenção de prover um tutorial de fácil entendimento sobre as características da 2 3 http://www.w3.org/TR/soap12-part1/#intro http://www.w3.org/TR/soap12-part1/#intro 303 6 especificação SOAP versão 1.2, e pode ser encontrada no sitio Web http://www.w3.org/TR/2003/REC-soap12-part0-20030624/ . À parte dois descreve um conjunto de tecnologias que podem ser usadas em conexão com o framework de mensagens SOAP e pode ser acessado a partir do sitio web http://www.w3.org/TR/2003/REC-soap12-part2-20030624/ . De uma maneira bastante resumida, o protocolo funciona assim: Uma mensagem SOAP é contida em um pacote. Dentro deste pacote existem duas seções adicionais: Uma seção de cabeçalho (header) e o corpo da mensagem (body). A seção header possui informações relevantes sobre a mensagem, por exemplo, pode conter a data de quando a mensagem foi emitida, ou informações necessárias à autenticação. Não é obrigatória, mas quando presente deve estar no topo da mensagem. As seções body contem a mensagem em si. Dois protocolos, a saber, SMTP e HTTP, são suportados pelo protocolo SOAP para o transporte de mensagens SOAP em uma rede, mas o protocolo HTTP tem ganhado maior aceitação já que hoje trabalha melhor com a infra-estrutura existente na Internet. Existem diversas outras tecnologias de distribuição e comunicação como CORBA (Common Object Request Broker Architecture), DCOM (Distributed Component Object Model), RMI (Remote Method Invocation), Mas os web services através do protocolo SOAP possuem uma grande vantagem, especificamente, ao utilizar o protocolo HTTP, as mensagens SOAP terão fácil acesso através de firewalls. Sendo está uma grande vantagem, já que os outros modelos de solução de integração citados geralmente terão suas mensagens barradas nos filtros dos firewalls, tecnologia já presente na maioria das maquinas ligadas a Internet. Não é objetivo deste documento tratar das características avançadas da especificação do protocolo SOAP, bem como não é o objetivo discutir implementações. Está seção visa apenas esclarecer algumas características do protocolo SOAP e no decorrer do texto, conforme venha a ser necessário, daremos maiores detalhes de implementação. Existem diversas alternativas ao uso do protocolo SOAP, deixamos aqui só para fins de registro algumas delas JSON, XINS, RST, XML-RPC, BEEP, entre outras. Estas tecnologias não serão objeto de estudo no presente documento. 313 6 3.2 UDDI (Universal Description, Discovery and Integration Service) O UDDI é uma plataforma independente baseada em XML, e tem como função registrar serviços na Internet, ou em outras palavras. “Fornece um mecanismo para a descoberta dinâmica de serviços na web. Utilizando-se a interface do UDDI, negócios podem se conectar dinamicamente a outros serviços fornecidos por parceiros externos. Um registro UDDI é similar a um registro CORBA, ou pode ser imaginado com um serviço DNS para uma aplicação de negócios”. [CM2005] Um registro UDDI possui dois tipos de clientes: negócios que querem publicar um serviço, como no caso da loja virtual que procura por serviços de vários fornecedores a fim de exibir os preços, e clientes que querem obter serviços de certo tipo, como quando uma empresa disponibiliza certas funções de seu sistema, como acesso através de web services, dado a certos colaboradores e parceiros, a serviços que estão disponíveis em seus sistemas. O UDDI é uma iniciativa aberta da industria, patrocinada pela OASIS ( http://www.oasis-open.org/home/index.php ) desenvolvido sobre o SOAP e assume que as requisições e respostas são objetos UDDI enviados como mensagens SOAP. Um registro de serviço UDDI é formado pro três componentes: Páginas Brancas – Fornecem o nome, endereço, telefone e outras informações de contato de um determinado negócio. São responsáveis pela publicação, ou seja, é como um fornecedor de serviço registra suas informações. Contêm a Informação do negócio, a qual é armazenada em um objeto BusinessEntity, o qual contém informações sobre os serviços, categorias, contatos, URLs e outros dados necessários para interagir com a empresa. Páginas Amarelas – Contêm informações que determinam a categoria do negócio. É responsável pela descoberta e mostra como uma aplicação descobre um serviço web em particular através dessas informações e fornece a informação do serviço, ou seja, descreve um grupo de serviços web. Estes estão contidos em um objeto BusinessService. 323 6 Páginas Verdes – Contêm as informações técnicas sobre um serviço Web. É responsável pela conexão e mostra como uma aplicação se conecta e interage com um serviço web após sua descoberta. As informações de conexão provem os detalhes técnicos necessários para invocar um serviço web. Isto inclui URLS, informações sobre os nomes dos métodos, tipos de argumentos e assim por diante. Estes dados são representados no objeto BindingTemplate. O UDDI é, normalmente, um dos padrões do núcleo core da tecnologia de implementação de Web services. Ele foi projetado para ser acessado através de mensagens SOAP e providenciar acesso aos documentos WSDL que descrevem o protocolo de ligação e os formatos das mensagens que são necessários para a interação com os serviços web listados em um diretório. 3.3 Web Service Description Language (WSDL) A Web Services Description Language (WSDL), conforme já informado no texto, é um formato publico de XML para a descrição de Web Services atualmente desenvolvida e mantida pelo W3C. É fruto de uma submissão de diversas empresas ao W3C (Ariba, IBM and Microsoft), as quais possuem os direitos sobre a versão corrente, o WSDL versão 1.1. [9] No entanto, já existe um release para uma versão 2.0 de maio de 2005 que se tornará uma recomendação do W3C assim que for formalmente aprovada[10]. A WSDL (pronuncia-se wiz-dell) descreve uma interface publica para um web service. É um documento baseado em XML que descreve o serviço e a forma como o mesmo se comunica. Ou seja, descreve o protocolo de ligação e os formatos de mensagens requeridos para a interação com os web services listados em um diretório de services. As operações suportadas e as mensagens são descritas de maneira abstrata. 333 6 A WSDL é freqüentemente combinada com o protocolo SOAP e com UDDI para prover web services na Internet. Dessa Maneira um programa cliente se conecta a um web service e pode ler seus arquivos WSDL a fim de determinar quais funções estão disponíveis no servidor. Alguns tipos especiais de dados são embarcados no arquivo WSDL na forma de um arquivo XML, o cliente pode então usar o protocolo SOAP para chamar uma dessas funções listadas no documento WSDL. Um documento WSDL define Services como coleções de pontos finais em uma rede, ou portos (do inglês Ports). Em WSDL uma definição abstrata de pontos finais e mensagens, é separada de sua implementação concreta na rede, ou das suas ligações aos dados. Isto permite o reuso de definições abstratas: mensagens, as quais são as descrições abstratas de como os dados podem ser trocados, e tipos de porto que são coleções abstratas de operações. O protocolo concreto, com os formatos específicos dos dados para um tipo de porto em particular, constitui uma ligação reutilizável. Um porto é definido como a associação de um endereço de rede com uma ligação re-usável, e uma coleção de portos define um serviço. Freqüentemente, um documento WSDL utiliza os seguintes elementos na definição de serviços de rede: Tipos – um container para tipos de dados usando em alguns tipos de sistemas, como em XSD (XML Schema Definition). Mensagem – Uma forma abstrata de definir como os dados serão comunicados. Operações – Uma descrição abstrata das ações suportadas pelo serviço. Tipos de Portos – um conjunto abstrato de operações suportado por um ou mais pontos finais. Ligação – um protocolo concreto com formato de dados específicos para um tipo de porto particular. Porto – Um ponto final único, definido com uma combinação de forma de ligação e um endereço na rede. Serviço – Uma coleção de endpoints que possuem relação. 343 6 Talvez, neste ponto, você leitor esteja muito confuso, mas com o passar do tempo, à medida que as implementações sejam realizadas e apresentadas, esperamos tornar mais claro a integração destes três padrões como a solução ideal para implementação do Web Service proposto neste trabalho. REFERÊNCIAS FURTADO, Carlos Alberto; BOTELHO, Maurício. Avaliação de Plataformas para o Desenvolvimento de Web Services. 2005. 200 p. Tese (Bacharelado em Sistemas de Informação) – Curso de Bacharelado em Sistemas de Informação, Universidade Federal de Santa Catarina, Florianópolis, 2005. 353 6 APACHE SOFTWARE FOUNDATION. Apache Derby Tutorial. Disponível em: <http://db.apache.org/derby/papers/DerbyTut/index.html>. Acesso em: 27 de Março de 2005. LOZANO, Fernando. O Novo HSQLDB. Java Magazine, Grajaú-RJ, n. 30, p. 18-22, 24-28, nov. 2005. LOZANO, Fernando; GALVÃO, Leonardo. Seção Cafeína, News e Bits. Java Magazine, Grajaú-RJ, n. 29, p. 6, out. 2005. CERAMI, Ethan – Web Services Essentials. Distributed Applications with XML-RPC, UDDI & WSDL. O´Reilly. Janeiro 2002. [1] WIKIPEDIA. Servidor Apache. Disponível em: <http://pt.wikipedia.org/wiki/Servidor_Apache>. Acesso em: 19 de Março de 2006. [2] < http://www.apache.org/>. Acesso em: 11 de Março de 2006. [3] Network Research Group. Hypertext Transfer Protocol -- HTTP/1.1. Disponível em: <http://www.w3.org/Protocols/rfc2616/rfc2616.html>. Acesso em: 13 de Março de 2006. [4] < http://httpd.apache.org/>. Acesso em: 22 de Janeiro de 2006. [5] W3C. SOAP Version 1.2 Part 1: Messaging Framework. Disponível em: <http://www.w3.org/TR/soap12-part1/#msgexchngmdl>. Acesso em: 19 de Fevereiro de 2006. [6] W3C. 3. SOAP Extensibility Model. Disponível em: <http://www.w3.org/TR/soap12-part1/#extensibility>. Acesso em: 11 de Março de 2006. [7] W3C. 4. SOAP Protocol Binding Framework. Disponível em: <http://www.w3.org/TR/soap12-part1/#transpbindframew >. Acesso em: 17 de Fevereiro de 2006. [8] W3C. 5. SOAP Message Construct. Disponível em: < http://www.w3.org/TR/soap12-part1/#soapenv >. Acesso em: 17 de Fevereiro de 2006. [9] W3C. Web Services Description Language (WSDL) 1.1. Disponível em: < http://www.w3.org/TR/wsdl >. Acesso em: 17 de Fevereiro de 2006. 363 6 [10] MILLER, John; VERMA, Kunal; RAJASEKARAN, Preeda.WSDL-S: A Proposal to W3C WSDL 2.0 Committee. Disponível em: <http://lsdis.cs.uga.edu/projects/wsdls/WSDL-S.pdf >. Acesso em: 18 de Fevereiro de 2006. [11] GIRALDI, Reubem Alexandre D’Almeida. FRAMEWORK PARA COORDENAÇÃO E MEDIAÇÃO DE WEB SERVICES MODELADOS COMO LEARNING OBJECTS PARA AMBIENTES DE APRENDIZADO NA WEB. 2004. 213 p. Dissertação (Obtenção do Grau de Mestrado) - Programa de Pós-graduação em Informática do Departamento de Informática do Centro Técnico e Científico. Rio de Janeiro, 2004. Glue user guide. Disponível em: <http://www1.webmethods.com/docs/glue/guide/index.html>. Acesso em: 18 de Fevereiro de 2005.