LUIZ WAGNER ARAÚJO NUNES

Tamanho: px
Começar a partir da página:

Download "LUIZ WAGNER ARAÚJO NUNES"

Transcrição

1 LUIZ WAGNER ARAÚJO NUNES IMPLEMENTAÇÃO DE UM WEB SERVICE PARA UMA LOCADORA DE VEÍCULOS - RELAÇÃO B2B Palmas

2 LUIZ WAGNER ARAÚJO NUNES IMPLEMENTAÇÃO DE UM WEB SERVICE PARA UMA LOCADORA DE VEÍCULOS - RELAÇÃO B2B Trabalho apresentado ao curso de Sistemas de Informação do Centro Universitário Luterano de Palmas como requisito parcial da disciplina de Trabalho de Conclusão de Curso em Sistemas de Informação, orientado pela professora Madianita Bogo Palmas

3 LUIZ WAGNER ARAÚJO NUNES IMPLEMENTAÇÃO DE UM WEB SERVICE PARA UMA LOCADORA DE VEÍCULOS - RELAÇÃO B2B Trabalho apresentado ao curso de Sistemas de Informação do Centro Universitário Luterano de Palmas como requisito parcial da disciplina de Trabalho de Conclusão de Curso em Sistemas de Informação, orientado pela professora Madianita Bogo BANCA EXAMINADORA Profª. M.Sc. Madianita Bogo Centro Universitário Luterano de Palmas Fabiana Ferreira Cardoso Centro Universitário Luterano de Palmas Prof. M.Sc. Ricardo Marx Costa Soares de Jesus Centro Universitário Luterano de Palmas

4 4 SUMÁRIO 1. INTRODUÇÃO REVISÃO DE LITERATURA Sistemas Distribuídos Modelo Cliente/Servidor RMI CORBA Web Service WSDL UDDI JWSDP JAX-RPC Desenvolvimento do Servidor Desenvolvimento do Cliente B2B Web Services em B2B MATERIAL E MÉTODOS Material Hardware Software Métodos RESULTADOS E DISCUSSÃO Domínio Comunicação das Aplicações Modelagem do Web Service Funcionalidades do Web Service Diagrama de Classes Considerações sobre o serviço Questão Legal do Serviço Implementação do Serviço Implementação do Cliente CONSIDERAÇÕES FINAIS REFERÊNCIAS BIBLIOGRÁFICAS ANEXOS ANEXO I: MODELAGEM DO WEB SERVICE ANEXO II: IMPLEMENTAÇÃO DO WEB SERVICE ANEXO III: IMPLEMENTAÇÃO DA APLICAÇÃO CLIENTE

5 5 LISTA DE FIGURAS Figura 1 - Estrutura do modelo Cliente/Servidor adaptada de Horstmann (2003) Figura 2 - Estrutura de comunicação do padrão CORBA, modificada de Riccioni (2000). 15 Figura 3 Exemplo de um documento WSDL Figura 4 Exemplo de Interface de um Web Service com JAX-RPC Figura 5 Exemplo de Classe de Implementação de um Web Service com JAX-RPC Figura 6 Documento XML utilizado pelo aplicativo wscompile Figura 7 Documento XML utilizado pelo aplicativo jar Figura 8 Documento XML utilizado pelo aplicativo wsdeploy Figura 9 Exemplo de Classe de Implementação de um Cliente JAX-RPC Figura 10 - Arquitetura de Comunicação da Aplicação Cliente com o Web Service Figura 11 Diagrama de Casos de Uso Figura 12 Diagrama de Classes do Web Service Figura 13 Implementação da Interface do Web Service Figura 14 Fragmento de Código do Arquivo veiculos.php

6 6 LISTA DE TABELAS Tabela 1: Pilha Básica de Web Services disponível em Hendricks (2002)... 17

7 7 LISTA DE ABREVIATURAS API Application Programming Interface B2B Business-to-business CORBA Common Object Request Broker Architecture ebxml Eletronic Business Extensible Markup Language FTP File Transfer Protocol HTTP HyperText Transfer Protocol HTTPS HyperText Transfer Protocol Secure IDL Interface Definition Language ISO International Organization for Standardization JWSDP Java Web Service Developer Pack NAICS North American Industry Classification System

8 8 ORB Object Request Broker RPC Remote Procedure Call SMTP Simple Mail Transfer Protocol SOAP Simple Object Access Protocol TCP/IP Transfer Control Protocol/Internet Protocol UDDI Universal Description, Discovery and Integration W3C World Wide Web Consortium WSDL Web Service Description Language XML Extensible Markup Language

9 9 RESUMO A crescente demanda na utilização da Internet para a comunicação entre empresas fez surgir uma nova modalidade de comércio eletrônico, denominada Business-to-business (B2B), na qual as empresas integram suas aplicações com o intuito de intercambiar as informações, possibilitando a realização dos processos de negócio. A tecnologia de Web Services surgiu com a promessa de permitir que aplicações desenvolvidas em plataformas e linguagens de programação distintas possam se integrar, garantindo a interoperabilidade entre as aplicações, o que é interessante quando se fala em comunicação entre aplicações de empresas distintas. O objetivo deste trabalho é realizar um estudo da tecnologia de Web Services analisando a sua utilização na modalidade de comércio eletrônico Business-tobusiness, realizando um estudo teórico dos conceitos relacionados ao tema e testes práticos da integração de aplicações desenvolvidas em linguagens distintas.

10 10 1. INTRODUÇÃO A Internet tem sido utilizada principalmente para o relacionamento entre pessoas e para o comércio eletrônico, em que as pessoas passaram a se relacionar com as empresas surgindo esta nova modalidade de comércio. Nos últimos anos, é notável também uma crescente utilização da Internet para a troca de informações entre empresas, as quais são tidas como parceiras comerciais, buscando a integração de suas aplicações para a manutenção desta forma de comunicação. Da parceria entre empresas surgiu a modalidade de comércio eletrônico denominada Business-to-business (B2B), definindo o comércio entre empresas realizado através da troca de informações pela Internet. Várias tecnologias surgiram para aprimorar e permitir mais facilidade na comunicação entre as aplicações das empresas, dentre elas o padrão RMI, o CORBA e a tecnologia de Web Services. A tecnologia de Web Services traz a promessa de permitir e facilitar a comunicação entre aplicações desenvolvidas em linguagens de programação e plataformas distintas, prometendo também possibilitar interoperabilidade entre tais aplicações, o que é interessante quando se fala em comunicação entre aplicações de empresas distintas. Com base neste cenário, em que é crescente a demanda pela integração de aplicações dado o surgimento desta nova modalidade de comércio eletrônico, pensou-se em desenvolver um estudo da tecnologia de Web Services e sua relação com o Business-to-business, uma vez que foi notado que é um assunto pouco discutido. O objetivo deste trabalho é estudar a tecnologia de Web Services, buscando levantar suas características, fazendo um breve estudo das demais tecnologias a fim de possibilitar um

11 11 melhor entendimento. É parte também deste trabalho o estudo das características da modalidade comércio eletrônico Business-to-business, buscando principalmente relacionála com a tecnologia de Web Services, fazendo um levantamento teórico e a implementação de um exemplo prático nesta avaliação. Este trabalho está estruturado da seguinte forma: a seção 2 apresenta um levantamento das características das aplicações distribuídas, mencionando os modelos e as tecnologias existentes, buscando maior destaque das características da tecnologia de Web Services, sobretudo da API JAX-RPC, que integra o JWSDP, descrevendo os passos básicos para a criação de uma aplicação Servidora e uma aplicação Cliente. Exibe também um levantamento a respeito do Business-to-business, buscando relacioná-lo com a tecnologia de Web Services. A seção 3 contém a relação do material empregado e descreve os métodos utilizados no desenvolvimento do trabalho. A seção 4 mostra os resultados e uma discussão a respeito do que foi encontrado na literatura e dos testes práticos realizados, quando possível, fazendo uma relação entre os mesmos. A seção 5 expõe as considerações finais, descrevendo as conclusões a respeito do estudo realizado, apontando a utilização em trabalhos futuros.

12 12 2. REVISÃO DE LITERATURA 2.1. Sistemas Distribuídos Um sistema distribuído pode ser definido como um conjunto de computadores interconectados em rede com o objetivo principal de compartilhar recursos de hardware e software. Para Casetti (1993) um sistema distribuído constitui-se de processadores autônomos conectados através de um subsistema de comunicação, que cooperam-se através de troca de mensagens. Uma das vantagens advindas da utilização de um sistema distribuído é o compartilhamento de recursos. Assim, os recursos mantidos por uma estação servidora poderão ser utilizados por estações clientes, que solicitam os recursos através de uma rede de comunicação. Como proteção à ocorrência de falhas, sistemas distribuídos podem ser implantados com grande vantagem sobre os sistemas centralizados. A redundância de recursos de hardware e de software pode imprimir mais confiabilidade ao sistema como um todo: caso partes do sistema venham a falhar, o restante do sistema é capaz de continuar o processamento, ao contrário de um sistema centralizado em que uma falha comprometeria todo o sistema. Por fim, como um sistema distribuído está disseminado em uma rede, sua abrangência é uma grande vantagem sobre um sistema centralizado, uma vez que pode atingir grandes distâncias geográficas. Tanenbaum (1992) menciona a capacidade de crescimento incremental dos sistemas distribuídos. A escalabilidade permite que novas unidades processadoras possam ser adicionadas, visando aumentar o poder de processamento do conjunto, sem que sejam

13 13 necessárias alterações na configuração do sistema e interrupções no funcionamento no momento das alterações. Um dos modelos de sistemas distribuídos mais difundidos e citados na literatura é o modelo Cliente/Servidor. A seção apresenta o conceito e descreve o funcionamento deste modelo Modelo Cliente/Servidor Segundo Riccioni (2000), o modelo Cliente/Servidor de computação distribuída é um modelo de gerenciamento de informação que divide o processamento entre um computador que requer um serviço e outro que devolve o serviço. Como em sistemas distribuídos não existe região de memória compartilhada, os processos se comunicam através de mecanismos de troca de mensagens. A programação de socket e a chamada de procedimento remoto (RPC Remote Procedure Call) são mecanismos utilizados nas trocas de mensagens. A Figura 1 ilustra a transmissão de mensagens no modelo Cliente/Servidor. Cliente Servidor solicitação resposta Figura 1 - Estrutura do modelo Cliente/Servidor adaptada de Horstmann (2003). Na estrutura apresentada na Figura 1, os retângulos identificados como Cliente e Servidor representam as aplicações Cliente e Servidor, respectivamente, dentro do modelo

14 14 Cliente/Servidor. De uma maneira simplificada, o Cliente envia uma mensagem de solicitação para o Servidor, que realiza o processamento e retorna uma mensagem de resposta para o Cliente. Com o advento do paradigma de orientação a objetos, foram idealizados objetos colaborativos localizados em ambientes remotos, capazes de interagir através de mecanismos de troca de mensagens. Com isso, surgiram os padrões RMI (Remote Method Invocation Invocação de Método Remoto) e CORBA (Common Object Request Broker Architecture Arquitetura de Agentes de Requisição de Objetos Comum). Esses padrões serão discutidos nas seções 2.2 e RMI O padrão RMI foi uma iniciativa da empresa Sun Microsystems. Escrito na linguagem de programação Java, esse padrão possibilita a comunicação entre objetos residentes em máquinas virtuais java (JVM Java Virtual Machine), que podem estar localizadas em computadores distintos ou não. Com o RMI, a invocação de métodos de um objeto remoto parece simples para o desenvolvedor. Os detalhes de comunicação ficam ocultos. Assim, o desenvolvedor tem a impressão de que está realizando a chamada de métodos de um objeto local. Ao invocar um método sobre um objeto remoto, o cliente RMI atua, na realidade, sobre um objeto local que se faz passar pelo objeto remoto. Esse objeto local é chamado stub. O stub age como um proxy do objeto remoto e esconde do cliente o uso dos serviços providos pelos protocolos de transporte. Por serem gerados por um compilador chamado rmic, os desenvolvedores de um programa RMI não têm que se preocupar em codificar os stubs (ALBUQUERQUE, 2001). Os serviços oferecidos pelo Servidor são descritos através de um arquivo Java que implementa uma interface. A interface contém a assinatura dos métodos disponibilizados pelo Servidor. Desta forma, o Cliente descobre os métodos analizando a interface do Serviço.

15 15 Apesar de escrito em Java, uma linguagem prometida para ser quase perfeita em termos de portabilidade, como leciona Riccioni (2000), o RMI é limitado exatamente em sistemas heterogêneos no tocante à interação com objetos desenvolvidos em outras linguagens. Ao contrário disto, o padrão CORBA promete possibilitar a integração entre aplicações heterogêneas. O padrão CORBA será discutido na seção seguinte CORBA Conforme citado por Horstmann (2003), o padrão CORBA permite a comunicação entre objetos escritos em diferentes linguagens de programação. (...) Ele define um mecanismo comum para troca de dados e descoberta de serviços. A especificação CORBA tem sido implementada por diversas linguagens de programação. Os programas Cliente e Servidor podem ser desenvolvidos em linguagens de programação distintas, como Java e C++, por exemplo. A especificação CORBA define um Agente de Requisição de Objetos (ORB Object Request Broker) que é responsável por intermediar a comunicação entre objetos remotos. 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 (RICCIONI, 2000). A Figura 2 apresenta a estrutura da comunicação do padrão CORBA. Cliente Servidor ORB Rede ORB Figura 2 - Estrutura de comunicação do padrão CORBA, modificada de Riccioni (2000). A estrutura de comunicação apresentada na Figura 2 pode ser entendida da seguinte forma: primeiramente o Cliente obtém uma referência ao objeto remoto, através do ORB, e então

16 16 faz a invocação de um método do objeto remoto. Em seguida, O ORB converte os parâmetros do método em um formato independente de plataforma, e envia-os através da rede ao ORB do Servidor. O ORB do Servidor recebe os parâmetros e decodifica-os, repassando a chamada do método ao Servidor. Após o processamento da chamada, o Servidor envia a resposta com os parâmetros ao ORB, que faz a codificação e envia ao ORB do Cliente. Por fim, o ORB do Cliente decodifica os parâmetros de saída e repassa-os ao Cliente. A padronização do protocolo de comunicação e do formato das mensagens em um sistema distribuído é um ponto importante para a interação entre objetos distribuídos, principalmente na interação entre objetos heterogêneos. O formato e o modo de transmissão das mensagens devem possibilitar que o objeto do Cliente possa enviar as mensagens de forma que o objeto do Servidor possa recebê-las e processá-las. A definição do formato das mensagens e dados para a comunicação entre ORB s é papel do Protocolo Inter-ORB Geral (GIOP). A forma de transmissão das mensagens numa rede TCP/IP é papel do Protocolo Inter-ORB Internet (IIOP). A descrição do objeto Servidor, que atenderá às requisições dos objetos Clientes, está contida em um documento que apresenta a assinatura dos métodos disponibilizados pelo objeto Servidor e os tipos de dados que podem ser enviados e recebidos através das mensagens. A linguagem utilizada para desenvolvimento deste documento é a linguagem de definição de interface (IDL Interface Definition Language). Um documento IDL é bem semelhante a uma interface definida na linguagem de programação Java, e possui a extensão.idl. No tocante à interação entre aplicações comerciais na Internet, visando a integração de parceiros comerciais, uma nova tecnologia surgiu buscando proporcionar maior interoperabilidade entre as aplicações. A tecnologia de Web Services têm recebido muitos incentivos por parte de grandes empresas como Microsoft e IBM. Na seção 2.4 será apresentada a tecnologia de Web Services.

17 Web Service Um Web Service representa uma aplicação auto-descritiva que é capaz de responder a solicitações de outras aplicações, independentemente da linguagem e da plataforma em que estas foram desenvolvidas, fazendo uso de tecnologias padrão, tais como os protocolos da Internet, como HTTP, e a linguagem XML. Além da capacidade de responder a solicitações, um Web Service também pode fazer solicitações a outros Web Services, exercendo assim o papel de aplicação cliente ou consumidora. Conceitualmente, a estrutura de um Web Service pode ser representada na forma de uma pilha. De acorco com Hendricks (2002), a pilha é formada por 4 camadas. A tabela 1 apresenta as camadas associando-as às respectivas tecnologias. Tabela 1: Pilha Básica de Web Services disponível em Hendricks (2002). Publicação e Descoberta do Serviço UDDI (Service Publication/Discovery) Descrição do Serviço (Service WSDL Description) Troca de Mensagens XML SOAP (XML SOAP Messaging) Rede de Transporte (Transport Network) HTTP, SMTP, FTP, HTTPS over TCP/IP Um Web Service pode ter seus dados publicados em um registro de negócios, tais como o registro UDDI (Universal Description, Discovery and Integration Descrição, Descoberta e Integração Universais). A especificação UDDI padroniza um modelo de repositório de registro de Web Services públicos e dos negócios que os representam. Através do registro clientes e parceiros de negócios podem integrar suas aplicações buscando as descrições dos Web Services registrados. Além da especificação UDDI, mencionada por Hendricks (2002), a especificação ebxml também padroniza um modelo de repositório. Mais abrangente do que a especificação UDDI, ela é dirigida a registros de negócios, cujas empresas podem possuir Web Services implementados. A especificação UDDI será apresentada com maior profundidade na seção

18 18 Um diferencial importante dos Web Services sobre as demais tecnologias de sistemas distribuídos é a forma de descrição. A descrição de um Web Service apresenta os métodos disponibilizados, os parâmetros de entrada e saída e a localização e o nome do serviço. Para a descrição é utilizado um documento escrito na Linguagem de Descrição de Web Services (WSDL Web Services Description Language). Este documento é um documento XML cujo esquema segue as regras da WSDL. A WSDL será discutida com mais detalhes na seção As mensagens trocadas entre o Web Service e os Clientes são convertidas nos formatos definidos pelo protocolo escolhido para a comunicação. Dentre os protocolos está o protocolo SOAP (Simple Object Access Protocol Protocolo Simples de Acesso ao Objeto), o qual acondiciona a mensagem em um documento XML. O protocolo SOAP pode ser utilizado no mecanismo de troca de mensagens baseado em RPC ou baseado em troca de documentos. Por fim, as mensagens são transportadas fazendo uso de um dos protocolos de Internet, como por exemplo, HTTP, SMTP etc. Segundo Hendricks (2002), o mais utilizado é o protocolo HTTP (Hypertext Transfer Protocol Protocolo de Transferência de Hipertexto). O uso destes protocolos, e principalmente do HTTP, é devido ao fato de que os mesmos geralmente são utilizados por várias aplicações e, além disso, comumente estão habilitados nos firewalls, o que facilita a utilização da tecnologia de Web Services. Neste trabalho, o Web Service desenvolvido utiliza a API JAX-RPC, integrante do JWSDP, a qual utiliza o protocolo SOAP para troca de mensagens e o protocolo HTTP para o transporte WSDL A sigla WSDL é utilizada para referenciar o documento que descreve um Web Service. Este documento, que é um documento XML, tem por finalidade apresentar os detalhes do Web Service. Ao contrário do que é utilizado nos padrões RMI e CORBA, o documento WSDL é mais complexo devido aos detalhes que especifica, como endereço real do serviço, definição da estrutura das mensagens de solicitação e resposta de cada uma das operações

19 19 disponibilizadas pelo Web Service etc. A sua estrutura é constituída de 5 elementos básicos: types, message, porttype, binding e service (TODD, 2003). A escrita de um documento WSDL pode ser uma tarefa bastante complexa, a depender da quantidade de operações disponibilizadas pelo Web Service, dos parâmetros de entrada e saída, e dos tipos de dados utilizados nas mensagens. Normalmente, os aplicativos que possibilitam o desenvolvimento de Web Services disponibilizam ferramentas capazes de gerar este documento com base na interface desenvolvida e na localização e no nome que referencia o serviço. A Figura 3 apresenta um exemplo de um documento WSDL.

20 20 Figura 3 Exemplo de um documento WSDL. O documento apresentado na Figura 3 foi gerado com o aplicativo wscompile, o qual integra a API JAX-RPC. Para isso, foram utilizados como base um arquivo XML de configuração e o arquivo de interface do serviço compilado. O documento representa a descrição do Web Service denominado Hello, o qual possui apenas uma operação denominada sayhello, que recebe um parâmetro do tipo String e retorna uma String como resposta. 1. <?xml version="1.0" encoding="utf-8"?> 2. <definitions xmlns=" xmlns:tns="urn:foo" xmlns:xsd=" xmlns:soap=" name="hello" targetnamespace="urn:foo"> 3. <types /> 4. <message name="helloif_sayhello"> 5. <part name="string_1" type="xsd:string" /> 6. </message> 7. <message name="helloif_sayhelloresponse"> 8. <part name="result" type="xsd:string" /> 9. </message> 10. <porttype name="helloif"> 11. <operation name="sayhello" parameterorder="string_1"> 12. <input message="tns:helloif_sayhello" /> 13. <output message="tns:helloif_sayhelloresponse" /> 14. </operation> 15. </porttype> 16. <binding name="helloifbinding" type="tns:helloif"> 17. <soap:binding transport=" style="rpc" /> 18. <operation name="sayhello"> 19. <soap:operation soapaction="" /> 20. <input> 21. <soap:body encodingstyle=" use="encoded" namespace="urn:foo" /> 22. </input> 23. <output> 24. <soap:body encodingstyle=" use="encoded" namespace="urn:foo" /> 25. </output> 26. </operation> 27. </binding> 28. <service name="hello"> 29. <port name="helloifport" binding="tns:helloifbinding"> 30. <soap:address location=" xmlns:wsdl=" /> 31. </port> 32. </service> 33. </definitions>

21 21 De acordo com W3C (2001), o elemento raiz do documento WSDL é o elemento definitions. O elemento types contém as definições dos tipos de dados que serão enviados e recebidos através das mensagens processadas pelo Web Service. Este elemento é especificado quando é preciso utilizar tipos de dados complexos, definidos pelo desenvolvedor. Quando são utilizados somente tipos de dados padronizados pelo W3C, este elemento não precisa ser especificado. No exemplo apresentado na Figura 4, o elemento types não contém valor declarado, o que indica que os dados contidos nas mensagens de solicitação e de resposta conterão somente valores padrão definidos. O elemento message define, para cada mensagem, qual o tipo de dado de cada parâmetro ou retorno. Para cada operação disponibilizada pelo Web Service, devem ser criados dois elementos message, um para a mensagem de requisição e outro para a respectiva mensagem de resposta. O tipo de dado pode ser um valor padrão ou qualquer tipo definido no elemento types. No exemplo da Figura 3, o elemento message cujo atributo name contém o valor HelloIF_sayHello representa a mensagem de solicitação do método sayhello(string nome). O sub-elemento part define o tipo de dado do parâmetro e a ordem em que aparecerá, que neste caso é o primeiro parâmetro de entrada, e é do tipo String. O valor String_1 do atributo name do elemento part denota o tipo de dado e a ordem do parâmetro. O valor xsd:string do atributo type do elemento part define que o tipo de dado do parâmetro é o tipo string definido no namespace O elemento message cujo atributo name contém o valor HelloIF_sayHelloResponse define a mensagem de resposta do método sayhello(string nome). O valor do atributo name do sub-elemento part agora contém o valor result, o que completa o sentido de que a mensagem é de resposta, conduzindo o resultado da operação processada pelo método do Web Service. O valor xsd:string do atributo type do elemento part define que o tipo de dado da resposta é o tipo string definido no namespace

22 22 O elemento porttype descreve os métodos que serão disponibilizados pelo Web Service. A finalidade básica deste elemento é indicar, para cada método do Web Service, qual elemento message definirá o formato da mensagem de solicitação e qual definirá o formato da mensagem de resposta. O sub-elemento operation indica a operação que está sendo definida. O sub-elemento input, do elemento operation, referencia o elemento message que descreverá o formato da mensagem de solicitação, e o sub-elemento output referencia o elemento message que descreverá o formato da mensagem de resposta. O elemento binding apresenta a informação do protocolo que será utilizado no transporte das mensagens. Pelo menos um elemento binding é requerido. De acordo com WSDL (2001), a linguagem WSDL é extensível a ponto de permitir a adoção de outros formatos de mensagem e protocolos de rede, além de SOAP 1.1, HTTP GET/POST e MIME, por exemplo. O protocolo SOAP é mais utilizado com o protocolo HTTP. No entanto, podem ser utilizados vários outros protocolos, como SMTP, FTP etc. A API JAX-RPC adota o protocolo SOAP como padrão para definição do formato das mensagens e HTTP para o transporte. No documento da Figura 4, o protocolo de transporte é indicado pelo atributo transport do sub-elemento soap:binding, que contém o valor De acordo com W3c (2002), o SOAP pode utilizar mensagens orientadas a documento ou orientadas a procedimentos (RPC), o que é definido através do atributo style do elemento soap:binding, sendo que o valores podem ser rpc ou document. O valor é opcional, mas, quando não indicado, será considerado o valor document. De acordo com Todd (2003), o elemento service contém o endereço real do Web Service. Assim, para cada elemento binding haverá a indicação de um endereço real através do elemento service UDDI W3C (2002) afirma que a tarefa de publicação e descrição de Web Services é essencial dentro da arquitetura básica de Web Services. Neste contexto, o padrão UDDI merece destaque por ser o mais utilizado. Oasis (2004) declara que o objetivo da especificação é

23 23 definir um conjunto de serviços com suporte à descrição e descoberta de negócios, organizações, e outros fornecedores de Web Services, dos Web Services que eles disponibilizam e das interfaces técnicas que podem ser utilizadas para acessar estes Serviços. A estrutura de armazenamento objetiva facilitar a localização das informações. De acordo com Todd (2003), UDDI permite realizar buscas por negócios e serviços de diferentes maneiras, tais como: localização de negócios por tipo de negócio (Yellow Pages Páginas Amarelas); localização de negócios por nomes, endereços, entre outras informações (White Pages Páginas Brancas); e localização de informações sobre os serviços que um negócio oferece (Green Pages Páginas Verdes). Ainda segundo Todd (2003), UDDI define não somente uma estrutura para organização de informações, mas também um XML Schema para definição da estrutura de armazenamento, uma API com métodos que permitem publicar serviços e métodos para acessar serviços, uma especificação para replicação de informações entre registros e uma especificação para operadores de registro definindo, dentre outras, questões como segurança. As informações que são submetidas a um registro UDDI são armazenadas na forma de um documento XML, o qual segue o XML Schema descrito pela especificação. De acordo com Chappell (2002), o XML Schema define os seguintes elementos básicos: businessentity: é o elemento que contém as informações que definem um determinado negócio. Dentre estas, estão informações de contato e nome do negócio. Este elemento contém também sub-elementos que armazenam informações referentes aos serviços oferecidos pelo negócio. businessservice: é o elemento que contém a definição de um determinado serviço, contendo informações como nome, descrição e mais informações, como ponto de acesso, por exemplo, armazenadas em seus sub-elementos. bindingtemplate: este elemento contém a informação do endereço real do serviço, a qual está armazenada no sub-elemento accesspoint.

24 24 tmodel: este elemento é um dos sub-elementos do elemento bindingtemplate, que representa uma especificação técnica dentro do contexto de um registro UDDI. A informação contida neste elemento poderia auxiliar companhias a determinar se um Web Service é compatível com seus requisitos de negócio. categorybag: este elemento contém informações de categorização para o serviço. Dentre as várias categorizações citadas estão a NAICS North American Industry Classification System Sistema de Classificação da Indústria Norte Americana e ISO 3166, que é um sistema de classificação geográfica padronizado pela International Organization for Standardization Organização de Padronização Internacional. publisherassertion: este elemento contém informação sobre relacionamento de elementos businessentity. As APIs para publicação e descoberta de serviços, definidas pela especificação UDDI, permitem que empresas possam publicar informações sobre seus negócios e serviços, e que clientes e parceiros possam localizar estas informações. A API de consulta referencia um URL de um determinado registro de negócios e não necessita de acesso autenticado para sua utilização. Ao contrário, a API de publicação utiliza o protocolo HTTPS e requer que o negócio utilize um nome de usuário e uma senha para as operações de inserção, alteração e remoção de informações. No pacote de APIs Java para desenvolvimento de Web Services JWSDP (Java Web Service Developer Pack), a API JAX-R permite a manipulação de registros XML, permitindo a realização de operações de gerenciamento e consulta. A API JAX-RPC permite a construção de Web Services e clientes que usam chamadas de procedimento remoto (RPC) e XML. A versão mais recente do JWSDP é a versão 2.0, a qual apresenta a API JAX-WS em substituição à API JAX-RPC. O JWSDP será apresentado em mais detalhes na seção

25 JWSDP O JWSDP é formado por um conjunto de APIs de código fonte aberto, desenvolvidas na linguagem Java, permitindo a construção, teste e publicação de Web Services e aplicações, utilizando a pilha de protocolos apresentada na Seção 2.4. No desenvolvimento deste trabalho foi utilizada a versão 1.6 do JWSDP. Nele estão contidas APIs para desenvolvimento de Web Services, aplicações Web, dentre outras aplicações. Destacam-se neste pacote as APIs JAXB (Java Architecture for XML Binding Arquitetura Java para Mapeamento XML), JAXP (Java API for XML Processing API Java para Processamento de XML), JAX-RPC (Java API for XML-based RPC API Java para RPC baseado em XML) e JAXR (Java API for XML Registries API Java para Registros XML). O JWSDP é mantido em contínua evolução, e recentemente, no decorrer deste trabalho, foi publicada a versão 2.0. Nesta nova versão, a API JAX-RPC foi renomeada para API JAX- WS (Java API for XML Web Services API Java para Web Services em XML). A API JAX-RPC será apresentada em mais detalhes na Seção JAX-RPC JAX-RPC é uma API para construção de Web Services e clientes usando mecanismos de RPC baseados em XML. Sun (2003) destaca que a API é independente do protocolo usado na representação das mensagens de requisição e de resposta às chamadas de procedimento remoto, suportando protocolos baseados em XML. No entanto, apesar de especificar a independência quanto ao protocolo de representação das mensagens, o projeto da API foi direcionado para o protocolo SOAP, implementando o suporte ao mesmo no pacote javax.xml.rpc.soap. O protocolo SOAP é um protocolo para intercâmbio de informação em ambiente descentralizado e distribuído, baseado em XML. Como mecanismo de transporte, JAX-RPC utiliza o protocolo HTTP. Para a descrição das informações do Serviço, a API utiliza a linguagem WSDL. Simplicidade e Interoperabilidade são características destacadas na especificação da API. A simplicidade está relacionada à maneira de como o desenvolvedor realiza a codificação do

26 26 Cliente ou do Servidor para a realização da comunicação. Os detalhes de como as mensagens são codificadas, transmitidas e recebidas não são motivo de preocupação, já que isto fica transparente ao desenvolvedor. A interoperabilidade relaciona-se com a capacidade atribuída ao Cliente e ao Servidor de realizar comunicação independentemente da linguagem ou plataforma que utilizem. A restrição a esta característica é que as partes envolvidas na comunicação devem utilizar mecanismos de RPC baseados em XML. O Serviço em JAX-RPC é desenvolvido e publicado em container de servlet. O JWSDP 1.6 dá suporte aos produtos Sun Java System Application Server Platform Edition 8.1 e Tomcat 5.0 para Java WSDP. A especificação da API declara somente este modelo de desenvolvimento do Serviço. Na seção serão apresentados os passos básicos para o desenvolvimento do Servidor. Será apresentado nas Seções e a implementação de um Web Service denominado Ola e de um Cliente, utilizando a API JAX-RPC, com a finalidade de demonstrar os passos básicos para a utilização da API e demonstrar a forma de comunicação realizada entre as aplicações Desenvolvimento do Servidor JAX-RPC possibilita o desenvolvimento do Servidor de duas formas. Na primeira forma, pode-se desenvolver o Servidor partindo-se de um documento WSDL existente e utilizando uma ferramenta para realizar o mapeamento da WSDL para Java. O aplicativo wscompile, que integra a API JAX-RPC, possibilita a realização da tarefa de mapeamento e geração das classes do Servidor a partir da WSDL. É a forma mais complexa, já que a codificação da WSDL não é uma ação simples, como foi descrito na Seção A segunda forma, que será descrita nessa seção, é codificando a interface e a classe que implementa a interface. JAX-RPC é bastante semelhante ao RMI no tocante à implementação do Servidor. Além disso, as chamadas aos métodos do Serviço pelo cliente são realizadas como se o Cliente estivesse executando métodos de um objeto local, facilitando o desenvolvimento.

27 27 Nessa aplicação o Serviço resume-se a um método que retorna ao cliente a mensagem Olá <nome >, sendo que o nome é o parâmetro passado pelo cliente na chamada do método. O primeiro passo para o desenvolvimento do servidor é criar a interface com a assinatura do método. A Figura 4 apresenta a interface de um Web Service, desenvolvido a partir dos exemplos contidos em Sun (2005). 1. package ola; import java.rmi.*; 4. java.util.*; public interface OlaIF extends Remote{ 7. public String dizerola(string nome) throws RemoteException; 8. Figura 4 Exemplo de Interface de um Web Service com JAX-RPC. A interface apresentada na Figura 4 contém a assinatura do método denominado dizerola, o qual recebe um parâmetro do tipo String e retorna uma String como resultado. A interface deve estender a interface Remote do pacote java.rmi e os métodos precisam declarar que podem lançar uma exceção remota do tipo RemoteException, quando a chamada a um método falhar. Os parâmetros dos métodos e o tipos de dados de retorno devem respeitar os tipos de dados suportados pela API, conforme apresentados em Sun (2003). A implementação do Servidor é realizada como uma classe comum, implementando a interface do Serviço. A classe deve implementar os métodos declarados na interface e deve possuir um construtor padrão, como mostra o trecho em negrito, na figura 5. Além disso, atributos e métodos de acesso local podem ser adicionados ao código da classe, a critério do desenvolvedor. O Servidor pode implementar ainda a interface ServiceLifecycle, que possibilita a realização de operações de gerenciamento de sessão. A Figura 5 contém um exemplo de uma classe que implementa a interface apresentada na Figura 4.

28 28 1. package ola; 2. import java.rmi.*; 3. import java.util.*; 4. import javax.xml.rpc.*; public class OlaImpl implements OlaIF{ 7. public OlaImpl(){ 8. public String dizerola(string nome){ 9. return Olá +nome; Figura 5 Exemplo de Classe de Implementação de um Web Service com JAX-RPC. A classe OlaImpl, apresentada na Figura 5, implementa o método remoto dizerola declarado na interface OlaIF, mostrado na figura 4, e um construtor padrão. Além do pacote java.rmi a classe deve importar o pacote javax.xml.rpc que contém as classes necessárias para a implementação do Servidor. Como pode ser notado, esta classe não implementa a interface ServiceLifecycle. Um ponto importante a ser analisado no momento da criação do Servidor é quanto aos tipos de dados dos parâmetros e dos dados de retorno dos métodos remotos. Como já mencionado, os tipos de dados devem ser os tipos declarados pela especificação da API. No entanto, podem ser utilizados tipos definidos pelo desenvolvedor, que são implementados em classes cujos atributos, parâmetros e retorno de métodos devem ser declarados com tipos dentre os definidos na especificação. A API, através do aplicativo wscompile, realiza o mapeamento dos tipos de dados do Servidor para os tipos definidos pela especificação da linguagem WSDL, criando o arquivo WSDL referente ao Serviço, visando a padronização e assim permitindo a interoperabilidade entre as aplicações Clientes e o Servidor. Para que o Serviço seja publicado e assim disponibilizado aos Clientes, é necessário criar a WSDL e os arquivos WAR. Estas tarefas são utilizadas através dos aplicativos wscompile, jar e wsdeploy, sendo que estes aplicativos necessitam de documentos XML que devem

29 29 conter uma estrutura específica para cada aplicativo. A Figura 6 apresenta um documento XML utilizado pelo aplicativo wscompile. 1. <?xml version="1.0" encoding="utf-8"?> 2. <configuration xmlns=" 3. <service name="teste" targetnamespace="urn:foo" typenamespace="urn:foo" 4. packagename="ola"> 5. <interface name="ola.olaif"/> 6. </service> 7. </configuration> Figura 6 Documento XML utilizado pelo aplicativo wscompile. No documento XML apresentado na Figura 6, o atributo packagename do elemento service contém o nome do pacote onde estão as classes compiladas do Servidor. O atributo name do elemento interface contém o nome da interface. Além de criar a WSDL para o Serviço, o aplicativo também gera um arquivo modelo que contém o mapeamento dos tipos de dados do Serviço para os tipos de dados suportados pela API. Este arquivo modelo será utilizado pelo aplicativo jar. Para a geração do arquivo com a extensão.war, é necessário inicialmente executar o aplicativo jar, o qual utiliza um documento XML denominado jaxrpc-ri. A Figura 7 apresenta um documento XML utilizado pelo aplicativo jar.

30 30 1. <?xml version="1.0" encoding="utf-8"?> 2. <webservices xmlns=" version="1.0" 3. targetnamespacebase="urn:foo" typenamespacebase="urn:foo" 4. urlpatternbase="/ws"> 5. <endpoint name="ola" display-name="servico Web Ola" 6. description="web Service usando JAX-RPC." 7. interface="ola.olaif" model="/web-inf/model.gz" 8. implementation="ola.olaimpl"/> 9. <endpointmapping endpointname="ola" urlpattern="/ola"/> 10. </webservices> Figura 7 Documento XML utilizado pelo aplicativo jar. No documento XML apresentado na Figura 7, o atributo name do elemento endpoint contém o nome do Serviço, o qual é referenciado pelo atributo endpointname do elemento endpointmapping. O atributo interface do elemento endpoint contém o nome do pacote e da interface, e o atributo implementation contém o nome do pacote e da classe que implementa o Servidor. O atributo urlpattern do elemento endpointmapping especifica a String que será incorporada ao url gerado pelo container Web. Para a tarefa final de criação do arquivo.war para publicação no container Web, é utilizado o aplicativo wsdeploy, o qual necessita de um documento XML denominado web que contenha os dados que serão publicados. A Figura 8 apresenta um documento XML utilizado pelo aplicativo. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " <web-app> <display-name>servico Web Ola</display-name> <description>web Service usando JAX-RPC.</description> <session-config> <session-timeout>60</session-timeout> </session-config> </web-app> Figura 8 Documento XML utilizado pelo aplicativo wsdeploy.

31 31 No documento XML apresentado na Figura 8, o elemento display-name contém o nome que será apresentado na tela de visualização das aplicações do container Web. O elemento description contém a descrição. Os aplicativos devem ser executados seqüencialmente, começando pelo wscompile, e em seguida o aplicativo jar e depois wsdeploy. Mais detalhes da execução destes aplicativos e dos comandos podem ser encontrados em Nunes (2005). Uma vez que o Serviço esteja publicado, é possível criar aplicações Clientes. Na seção seguinte serão apresentados os passos básicos para a criação de um programa Cliente Desenvolvimento do Cliente Segundo Sun (2005), existem várias formas de se desenvolver um Cliente JAX-RPC. Dentre elas podemos citar o Cliente de Stub Estático, o Cliente de Proxy Dinâmico, o Cliente de Interface de Invocação Dinâmica e o Cliente de Aplicação. A diferença básica entre cada um dos métodos de desenvolvimento consiste no momento em que são obtidos os objetos que referenciam o Serviço. Sun (2005) apresenta detalhes da criação destes modelos, sendo que nesse trabalho é abordado o modelo mais simples, o Cliente de Stub Estático, o qual será apresentado nesta Seção. Neste modelo a referência ao Serviço é uma classe Stub que é obtida em tempo de desenvolvimento através do aplicativo wscompile, o qual constrói também arquivos serializadores e tipos de valores. Para criar as classes utilizadas na aplicação cliente é necessário, apenas, que se tenha a localização da WSDL do servidor. O objeto Stub que contém a referência age como um proxy para o Serviço remoto. Assim, as chamadas ao Serviço são realizadas através do objeto local, utilizando o objeto Stub. A Figura 9 apresenta um exemplo de Cliente de Stub Estático para o Servidor definido na Seção

32 32 1. import javax.xml.rpc.stub; 2. import ola.*; public class ClienteOla{ 5. public ClienteOla(String endereco){ 6. try{ 7. Stub stub = (Stub) (new Ola_Impl().getOlaIFPort()); 8. String prop = javax.xml.rpc.stub.endpoint_address_property; 9. stub.setproperty(prop,endereco); 10. OlaIF ola = (OlaIF) stub; 11. System.out.println(ola.dizerOla( Luiz )); 12. catch(exception ex){ 13. ex.printstacktrace(); public static void main(string args[]){ 18. if (args[0]!= null){ 19. ClienteOla clienteola = new ClienteOla(args[0]); System.exit(0); Figura 9 Exemplo de Classe de Implementação de um Cliente JAX-RPC. A classe ClienteOla, apresentada na Figura 9, implementa um Cliente JAX-RPC do Serviço apresentado na Figura 5. Os trechos relacionados à comunicação com o servidor estão em negrito no código. A classe deve importar o pacote javax.xml.rpc.stub, a fim de poder instanciar um objeto Stub, definido no pacote. Como se trata de um Cliente de Stub Estático, ele deve importar também o pacote que contém as classes compiladas com base na especificação do Servidor. Dentre as classes que o aplicativo wscompile gera está a classe Ola que é uma interface que estende a interface Service do pacote javax.xml.rpc. A classe Ola_Impl implementa a interface Ola, que contém o método getolaifport, que retorna um objeto Stub que referencia o Serviço. Após a obtenção do Stub, é necessário configurar a propriedade ENDPOINT_ADDRESS_PROPERTY, a qual armazenará o endereço do Serviço, através do método _setproperty do objeto Stub. Por fim, é necessário converter o objeto Stub para

33 33 um objeto do tipo da interface do Servidor, através de uma operação de casting, permitindo a chamada de métodos remotos. A linha 10 do exemplo apresentado na Figura 5 demonstra esta operação. Como é possível notar, o aplicativo wscompile adota uma nomenclatura na geração das classes. Para interface que extende a interface Service é atribuído um nome com a nomenclatura <nome_do_serviço>. Para a classe que a implementa é atribuído um nome na forma <nome_do_serviço>_impl, e para o método que retorna um objeto Stub a forma é get<nome_do_serviço>ifport. Como já foi comentado, as tarefas de desenvolvimento do Serviço e do Cliente não correspondem apenas às tarefas descritas nesta Seção. A API JAX-RPC faz uso dos aplicativos wscompile, wsdeploy e jar para concluir as tarefas mencionadas, os quais fazem uso de arquivos XML para obter os dados de configuração necessários à execução dos aplicativos. Além dos arquivos XML apresentados nas Figuras 6, 7 e 8, para compilação do cliente é utilizado também o arquivo apresentado na Figura 9. Mais detalhes sobre a utilização dos aplicativos podem ser encontrados em Nunes (2005) e na Seção B2B A sigla B2B, derivada da expressão Business-to-Business (Negócio-a-Negócio), representa a modalidade de negócio eletrônico realizado entre empresas, tidas como parceiras comerciais umas das outras. Uma definição para o termo é apresentada por Silvestre (2004): nesse modelo as partes são duas organizações que interligam-se, geralmente em uma relação de fornecedor ou usuário de produtos, serviços ou informação. A interligação de empresas, nessa modalidade negócio eletrônico, permite a troca de informações, muitas vezes confidenciais, onde apenas o suficiente para a realização de negócios é disponibilizado. Amor (2000) enumera várias justificativas para a adoção do negócio eletrônico, tais como: a busca pela expansão do alcance de mercado; tornar-se mais visível ao mercado alvo; entregar resposta mais rapidamente aos clientes e parceiros; disponibilizar novos serviços;

34 34 fortalecer o relacionamento entre parceiros comerciais; e reduzir custos nas operações e, conseqüentemente em produtos e serviços. O surgimento da tecnologia de Web Services proporcionou que empresas com diferentes sistemas informatizados pudessem interligá-los, obtendo mais agilidade na realização de processos de negócios e reduzindo custos das operações, antes realizadas de forma manual, envolvendo métodos de comunicação muitas vezes ultrapassados e consumindo os valiosos recursos humanos. Na seção 2.6 serão apresentados mais detalhes relativos à tecnologia de Web Services e o B2B Web Services em B2B A adoção de padrões da Internet pela tecnologia de Web Services possibilita a integração de aplicações heterogêneas permitindo que empresas possam ampliar seus serviços. Sistemas que anteriormente não poderiam ser integrados devido a questões tecnológicas ou de custos agora, interligados, permitem que empresas possam intercambiar informações formando um modelo de negócio eletrônico vantajoso para ambos. Com isso fica fortalecida a parceria entre as empresas, que antes tinham que realizar suas interações de outras formas. Os processos de negócios agora podem (e até devem) ser repensados com o intuito de avaliar as vantagens da informatização. Processos de negócios que antes eram realizados da forma tradicional, consumindo recursos humanos e meios de comunicação dispendiosos, agora podem ser conduzidos de forma ágil, com menor probabilidade de erros e com baixo custo. Pode-se citar como exemplo o serviço de reserva de veículos oferecido por uma locadora de veículos, o qual seria realizado através da integração do sistema informatizado da locadora com o de um hotel. No ato da realização de uma reserva junto ao hotel, um hóspede poderia solicitar a reserva de um veículo, o que seria realizado automaticamente pelo funcionário na interface do sistema do hotel, facilitando a manipulação pelo funcionário, agilizando o processo de reserva, prestando um serviço de maior qualidade ao hóspede, e economizando recursos e tempo na realização da transação.

35 35 Nesta negociação, a integração dos sistemas e a parceria entre as empresas ficariam transparentes para o hóspede, que conduziria as negociações com o hotel. Posteriormente, de acordo com as questões contratuais mantidas pelas empresas parceiras, os acertos seriam realizados, quando o hotel repassaria os valores referentes à locação do veículo à locadora. Nota-se, nesta rápida exposição, que a integração dos sistemas proporciona a expansão dos serviços prestados pelo hotel aos seus clientes, sem significar aumento nos preços. Quanto à locadora, a parceria representa uma expansão de mercado. No tocante ao aspecto tecnológico, outros padrões como RMI e CORBA também poderiam ser empregados, observando-se as limitações de cada um, a depender das características dos sistemas a serem interligados, tais como plataformas, linguagens em que foram desenvolvidos e custos envolvidos na operação de integração, como contratação de uma equipe de desenvolvimento e treinamento de pessoal. Neste contexto, a tecnologia de Web Services não parece ter surgido para substituir as tecnologias existentes, mas sim proporcionar um maior poder de escolha por parte das empresas no momento da integração dos sistemas. Observando o que foi citado logo acima, o que vai determinar que uma tecnologia seja utilizada em contrapartida a outra são as características de cada um dos sistemas.

36 36 3. MATERIAL E MÉTODOS 3.1. Material O material utilizado compreende equipamentos de hardware e softwares, além do material bibliográfico discriminado no capítulo referente às referências bibliográficas. Os equipamentos de hardware serão apresentados na Seção Os softwares utilizados serão discriminados na Seção Hardware O trabalho não necessitou de equipamentos de hardware especiais para o desenvolvimento. Os equipamentos compreendem dois microcomputadores, cujas configurações serão a seguir discriminadas: Microcomputador tipo desktop, com processador Pentiun III com freqüência de 1.0 Gigahertz, com 256 MB de memória RAM, com disco rígido de 20 GB, com unidade leitora/gravadora de CD/DVD, com unidade leitora/gravadora de disquetes de 1.44 MB. O acesso à internet foi realizado através de conexão banda larga, utilizando um modem D-Link 500G. Este conjunto de hardware foi utilizado na fase de desenvolvimento e testes das aplicações e, principalmente, no desenvolvimento desta Revisão de Literatura, apresentando desempenho satisfatório na execução das atividades, sem a necessidade de quaisquer adaptações ou substituições de peças e equipamentos.

37 37 Microcomputador tipo desktop, com processador Pentiun III com freqüência de 1.0 Gigahertz, com 256 MB de memória RAM, com disco rígido de 20 GB, com unidade leitora de CD, com unidade leitora/gravadora de disquetes de 1.44 MB, nas dependências do complexo de informática do CEULP/ULBRA. Este conjunto de hardware foi utilizado principalmente para a realização de pesquisas na Internet, auxiliando no desenvolvimento desta Revisão de Literatura, e apresentou também desempenho satisfatório na execução das atividades, sem a necessidade de quaisquer adaptações ou substituições de peças e equipamentos Software Os equipamentos de hardware discriminados na Seção utilizaram a plataforma Windows, o primeiro com o Sistema Operacional Windows XP Professional Service Pack 2, e o segundo com o Sistema Operacional Windows 2000 Professional. Para o desenvolvimento desta Revisão de Literatura, foi utilizado o aplicativo Microsoft Word 2003 como editor de texto, e o Adobe Acrobat Reader 7.0 para leitura de documentos diversos. O navegador Web Microsoft Internet Explorer Versão 6.0 foi utilizado para a realização de buscas na Internet, leitura de documentos e tutoriais, e no desenvolvimento e testes das aplicações. O desenvolvimento da modelagem do Web Service foi realizado com o auxílio do aplicativo Rational Rose versão Na edição das classes Java e dos arquivos XML foram utilizados o Jcreator LE versão , cuja versão é freeware, e o Bloco de Notas versão 5.1. Para as tarefas de compilação e execução foi utilizado o JDK 5.0 (Java 2 Platform Standard Edition Development Kit 5.0 Update 5), associado ao JWSDP versão 1.6. O container Web utilizado foi o Tomcat 5.0 para JWSDP para a publicação do Serviço. Na edição da aplicação Cliente foi utilizada a Linguagem PHP, cuja instalação foi realizada com pacote da versão Como editor das páginas PHP foi utilizado o Macromedia Dreamweaver 8. Como servidor Web foi utilizado o Internet Information Services versão 5.

38 38 Como sistema gerenciador de banco de dados foi utilizado o MySQL versão 4, auxiliado pelo aplicativo de consulta MySQL Query Browser versão para Windows, utilizados tanto no desenvolvimento do Servidor quanto na aplicação Cliente Métodos A fase inicial do trabalho constituiu-se de buscas e leituras de textos, tutoriais e documentos na Internet e consultando livros diversos, os quais são citados no capítulo de referências bibliográficas, buscando o entendimento dos conceitos da tecnologia de Web Services, da API JAX-RPC e dos aplicativos necessários para o desenvolvimento das aplicações. O estudo da especificação técnica da API JAX-RPC foi de extrema importância para o desenvolvimento do trabalho, destacando-se como o principal documento de referência. Passada a fase inicial, passou-se a definição do domínio e à modelagem do Web Service. Posteriormente, iniciou-se a codificação das classes Java, acompanhando rigorosamente a modelagem desenvolvida. Para a definição da aplicação Cliente, buscou-se levantar as linguagens que oferecessem suporte à tecnologia de Web Services, destacando-se a linguagem PHP devido à quantidade de material de referência e tutoriais encontrados com extrema facilidade na Internet. Foi escolhida uma linguagem distinta da implementação do servidor para mostrar a interoperabilidade. Terminadas as etapas de desenvolvimento das aplicações, passou-se à fase de testes, na qual foi possível constatar o funcionamento das aplicações. Questionamentos surgiram a respeito do real destaque da tecnologia de Web Services na integração de aplicações. Por fim, passou-se à conclusão deste relatório, já com as devidas conclusões a respeito do tema proposto, anotando-se as dificuldades encontradas e os pontos positivos e negativos da utilização da tecnologia empregada.

39 39 4. RESULTADOS E DISCUSSÃO 4.1. Domínio Na definição do domínio buscou-se colocar em discussão um tema que refletisse mais adequadamente o assunto proposto neste estudo, que é a relação entre B2B e Web Services, e não apenas um exemplo comum como os encontrados nos diversos tutoriais e documentos sobre a tecnologia de Web Services, que, na maioria das vezes, não reflete as situações do mundo real. Também se buscou um tema de acordo com as características da modalidade de negócio eletrônico B2B, tentando levantar e discutir questões a respeito das vantagens e desvantagens da integração de aplicações entre parceiros comerciais. Neste trabalho foi desenvolvido um Web Service de uma locadora de veículos, onde é possível receber solicitação de reservas de veículos, além de operações como alteração e cancelamento de reserva, busca de veículos disponíveis para reserva e busca das reservas realizadas pelos Clientes, neste caso, empresas parceiras. A definição de um Web Service disponibilizado por uma locadora de veículos foi devido ao fato deste ramo comercial oferecer um tipo de serviço que é utilizado por vários segmentos, sendo viável buscar parcerias através da utilização da tecnologia de Web Services. As operações relativas à reserva de veículos foram tidas como as mais relevantes, por isso foram disponibilizadas pelo Web Service implementado aos seus parceiros comerciais. Não foram desenvolvidas funcionalidades de gerenciamento de usuários e tampouco de veículos, sendo que os dados necessários às operações de reserva foram inseridos

40 40 manualmente no banco de dados. Isso se deve ao fato do trabalho enfocar a comunicação entre aplicações de empresas distintas. Os clientes do serviço podem ser aplicações Web, aplicativos Desktop, ou outro Web Service. Neste trabalho, para a aplicação Cliente foi idealizada uma aplicação Web de um hotel que realizaria o papel de parceiro comercial, porém, vários outros segmentos poderiam usar esse serviço, como, por exemplo, uma empresa de turismo. A aplicação Web do hotel é integrada ao Web Service da locadora, buscando disponibilizar aos seus hóspedes um serviço diferenciado, facilitando a realização do processo de negócio entre as empresas parceiras, proporcionando aos funcionários mais facilidade na realização de suas atividades. As reservas de veículos seriam integradas à aplicação Web do hotel. Para a implementação do Servidor foi utilizada a API JAX-RPC, que integra o JWSDP. A utilização da linguagem Java deve-se ao fato de ser uma linguagem portável e devido ao fato de existirem estudos anteriores sobre o desenvolvimento de Web Services em Java. A linguagem utilizada para a implementação do cliente foi a PHP e não o Java, que é a linguagem do servidor, visando demonstrar a interoperabilidade dos Web Services, sendo que foi comprovado que existe independência de plataforma e de linguagem de programação. A linguagem PHP gratuita foi escolhida por ser simples, no tocante à instalação e configuração, e por oferecer uma vasta bibliografia em português, não tendo sido realizados testes comparativos com outras linguagens para essa escolha. Neste trabalho não foram levadas em consideração questões relacionadas à segurança na comunicação das aplicações, haja vista que se notou que o trabalho se estenderia a um nível bastante elevado, e que o tempo disponível não proporcionaria a obtenção de resultados satisfatórios. Porém, é importante mencionar que para colocar o serviço em uso, seria interessante acrescentar a segurança na comunicação Comunicação das Aplicações A comunicação da aplicação cliente com o Web Service é realizada de forma transparante para o usuário da aplicação do hotel. A Figura 10 apresenta os detalhes da comunicação.

41 41 Figura 10 - Arquitetura de Comunicação da Aplicação Cliente com o Web Service Como pode ser visto na Figura 10, o usuário interage com a aplicação do hotel através do navegador, que realiza uma requisição HTTP para o servidor Web, no caso o IIS. Quando a página solicitada necessita realizar uma chamada ao Web Service, o Cliente PHP solicita o documento WSDL, que é devolvido pelo Servidor. De posse do documento WSDL, o Cliente PHP realiza um chamada a um método do Web Service, que processa a chamada e envia o retorno. A comunicação nas chamadas e retorno de métodos do Web Service são realizadas através do protocolo SOAP sobre HTTP. Ao final da realização das operações solicitadas pelo usuário, uma resposta HTTP é enviada ao navegador e o resultado é exibido ao usuário.

42 Modelagem do Web Service A modelagem apresentada neste trabalho compreende apenas às funcionalidades desenvolvidas no Web Service, no tocante à locadora de veículos, não sendo realizada a modelagem das funcionalidades do hotel, já que esta foi implementada apenas para demonstrar a utilização do serviço. Nas Seções e são apresentados e discutidos apenas os principais diagramas da modelagem, sendo que a modelagem completa está disponível no Anexo I Funcionalidades do Web Service As funcionalidades modeladas são relacionadas às reservas de veículos, as quais seriam disponibilizadas aos funcionários do hotel através da aplicação Web do hotel. São elas: Buscar Veículos: buscar a relação dos veículos disponíveis para reserva; Reservar Veículo: permitir a reserva de um veículo por um determinado cliente; Buscar Reservas: buscar os dados das reservas, de acordo com os parâmetros desejados, tais como: identificador do cliente, senha, lista com os identificadores das reservas, período de realização das reservas (data inicial e data final do período) e status; Alterar Reserva: permitir a alteração da data de retirada e de devolução do veículo; Cancelar Reserva: permitir o cancelamento de uma determinada reserva. A Figura 11 apresenta o diagrama de casos de uso. Como pode ser observado na Figura 10, em todas as funcionalidades o ator representa a empresa Cliente.

43 43 Buscar Veiculos Reservar Veiculos Buscar Reservas Cliente Alterar Reserva Cancelar Reserva Figura 11 Diagrama de Casos de Uso Diagrama de Classes Com base no diagrama de caso de uso, apresentado na Figura 10, e no desenvolvimento de cada uma das funcionalidades, foram definidas as classes necessárias à implementação do Web Service. A Figura 12 apresenta o diagrama de classes do Web Service.

44 44 Reserva idreserva : int datareserva : java.util.date dataretirada : java.util.date dataprevdevolucao : java.util.date datadevolucao : java.util.date quilometragemretirada : int quilometragemdevolucao : int status : String valorquilometro : float valordiaria : float idveiculo : int idcliente : int criarreserva() adicionarreserva() buscarreservas() buscarreserva() alterarreserva() cancelarreserva() 0..* possui 1 possui 0..* 1 Veiculo idveiculo : int modelo : String marca : String cor : String ano : int numportas : int numpassageiros : int categhabilitacao : char quilometragematual : int valorquilometro : float valordiaria : float status : String buscarveiculos() alterarveiculo() Veiculo() Veiculos buscarveiculos() alterarveiculo() Reservas Cliente (from Use Case View) idcliente : int senha : String nome : String responsavel : String status : String buscarcliente() reservarveiculo() buscarreservas() alterarreserva() cancelarreserva() Clientes buscarcliente() Figura 12 Diagrama de Classes do Web Service. No diagrama apresentado na Figura 12, a classe Cliente representa a empresa Cliente, a qual foi definida como o ator no diagrama de casos de uso apresentado na Figura 10. A classe Veiculo define os dados de cada veículo que serão armazenados no sistema, e que são relevantes no conjunto das operações. A classe Reserva define os dados das reservas

45 45 realizadas e que também são relevantes no conjunto das atividades. Além dos dados, representados pelos atributos das classes, são definidos também os métodos de cada classe, necessários na realização das operações. Não foram representados neste diagrama os métodos de acesso aos atributos das classes devido à quantidade de atributos existentes. Além das classes que definem as entidades do sistema, foram representadas também as classes que, no desenvolvimento da modelagem, tornaram-se necessárias. As classes Clientes, Veiculos e Reservas definem classes com métodos estáticos que servem de classes controladoras e que, desta forma, ficam isoladas no diagrama. Na Seção 4.5 será descrita a implementação do Serviço Considerações sobre o serviço No serviço implementado, em cada solicitação ao Web Service deve ser realizada a autenticação do Cliente, necessitando assim que os dados de identificação da empresa Cliente sejam encaminhados juntos com os demais dados de cada solicitação. Devido às características da aplicação, a operação de autenticação dos Clientes deve ficar transparente aos usuários das aplicações Clientes. Como o código da aplicação não fica à vista do usuário, os dados de autenticação podem ficar embutidos no código. Além disso, observou-se que o reenvio destes dados em cada solicitação não acarreta aumento significativo no tempo de execução da solicitação. Em uma situação em que o Servidor atendesse a um número maior de solicitações, a manutenção de sessões poderia sobrecarregar a memória do Servidor. Uma alternativa para esta situação seria a adoção do monitoramento de sessão com a definição de sessões com tempo reduzido, e sempre com o reenvio dos dados de identificação do Cliente. A manutenção de sessões permitiria maior agilidade na execução da funcionalidade, evitando que a toda solicitação fosse realizada a verificação dos dados do Cliente na base de dados do sistema. O reenvio dos dados permitirá a verificação imediata dos dados no caso de tempo de sessão expirado. De qualquer forma, ficou definido neste trabalho não adotar o gerenciamento de sessão por esta ser a maneira mais complexa de ser implementada.

46 46 Na modelagem, ficou definido que deveria existir um status relacionado ao cliente: ativo, para o cliente que está em dia com as suas obrigações; e inativo, para os clientes que possuem alguma pendência. Em todas as funcionalidades, com exceção da ação de busca de reservas, o cliente deve estar com status definido como ativo, proporcionando à locadora de veículos que somente esses possam solicitar a execução das funcionalidades. Quanto à funcionalidade de busca de reservas, ela ficaria ativa até mesmo aos Clientes com status definido como inativo, proporcionando aos mesmos que solicitassem ao sistema, através desta funcionalidade, os dados relativos às reservas realizadas, possibilitando um acompanhamento completo. Neste trabalho, a locadora de veículos não tem a responsabilidade de armazenar os dados pessoais dos condutores dos veículos, ficando esta tarefa a cargo de cada Cliente. Dentro de um contexto do mundo real, por questões contratuais, inclusive a respeito da necessidade de realização de seguros dos veículos, poderia ser necessária a manutenção pela locadora dos dados dos condutores, o que significaria a necessidade de envio destes dados no ato da solicitação da reserva, o que alteraria a estrutura do Web Service. Não foi implementada uma funcionalidade para confirmação de reservas, uma vez que se buscou analisar apenas questões de comunicação, e não o desenvolvimento completo de um sistema para uma locadora de veículos. Finalizada a modelagem do Web Service, passou-se à fase de codificação das classes da interface e da implementação do Serviço, que é apresentada na seção 4.5. Por fim, foi implementado um cliente para testar o serviço, um trecho do código é apresentado na seção 4.6. O código completo do cliente será apresentado no Anexo III Questão Legal do Serviço O trabalho desenvolvido buscou abordar questões tecnológicas para a modalidade de comércio eletrônico business-to-business, não fazendo parte do foco abordar questões legais a respeito, uma vez que envolve vários fatores. Além disso, no que diz respeito a legislação, não existe uma definição em relação aos B2B no Brasil, nem a respeito de empresas do mesmo país nem em relação a empresas atuando em países distintos, o que

47 47 complicaria um pouco mais a questão legal. No entanto, passou-se a uma rápida análise desse assunto em relação ao comércio eletrônico, que foi descrita baseada em leituras em grupos de discussão e em sites de economia, sem grande relevância científica. As funcionalidades disponibilizadas pela locadora de veículos às empresas Clientes através do Web Service não configura comercialização de produto ou serviço através de meio eletrônico. O que se entende é que é apenas uma forma de comunicação e solicitação de serviço, tal como ocorre com o telefone ou outro meio de comunicação. O serviço prestado pela locadora às empresas Clientes não ocorre de fato no meio eletrônico, ficando este meio apenas como forma de solicitação, no qual a entrega do veículo se dá pessoalmente. Passando-se a analisar a situação em que a contratação ocorreria de forma virtual, em que as empresas Clientes contratariam com a locadora de veículos através de contrato disponibilizado por meio eletrônico, e não pessoalmente, é necessário buscar uma análise para o assunto no tocante a questões legais quanto ao contrato firmado. A busca por ambas as partes em exigir o cumprimento do contrato pode ser uma tarefa difícil, principalmente quando se tratar de empresas situadas em países distintos. Por fim, mesmo quando o contrato é firmado pessoalmente, observa-se que a confirmação de uma determinada reserva poderia ser um dos pontos mais relevantes nesta discussão caso não seja adotado um sistema confiável de confirmação de reserva, seja qual for o meio de comunicação Implementação do Serviço Conforme mencionado na Seção , o Servidor pode ser implementado de duas formas. Neste trabalho, a implementação foi realizada codificando-se a interface e a classe de implementação do Servidor. A interface do Serviço define os métodos que serão disponibilizados às aplicações Clientes. A Figura 13 apresenta o código da interface do Serviço.

48 48 1. package locadora; 2. import java.rmi.*; 3. import java.rmi.remoteexception; 4. import java.util.*; 5. public interface LocadoraIF extends Remote{ 6. public Object[] buscarveiculos(int idcliente, String senha) throws RemoteException; public boolean reservarveiculo(int idcliente, String senha, int idveiculo, Date dataretirada, Date dataprevdevolucao) throws RemoteException; public Object[] buscarreservas(int idcliente, String senha, Object[] listidreservas, Date datainicialreservas, Date datafinalreservas, String status) throws RemoteException; public boolean alterarreserva(int idcliente, String senha, int idreserva, Date dataretirada, Date dataprevdevolucao) throws RemoteException; public boolean cancelarreserva(int idcliente, String senha, int idreserva) throws RemoteException; 15. Figura 13 Implementação da Interface do Web Service. A codificação da interface apresentada na Figura 13 segue a especificação das funcionalidades do sistema. Considerando-se as características da aplicação, em todos os métodos definidos na interface, o identificador e a senha do Cliente são obrigatórios, com o intuito de permitir a autenticação do Cliente em cada solicitação às funcionalidades do Web Service. Através do método buscarveiculos o Cliente solicita a lista dos veículos disponíveis para reserva. O método tem como parâmetros apenas os dados de identificação do Cliente. A lista é um array de objetos da classe Veiculo definida na modelagem. Com o método reservarveiculo o Cliente pode solicitar a reserva de um determinado veículo, informando, além dos dados de identificação, o identificador do veículo, a data pretendida para retirada e a data provável para devolução. Caso a operação seja realizada com sucesso, o método retornará o identificador da reserva, para controle do Cliente. Caso ocorra falha na operação será retornado o valor -1.

49 49 O método buscarreservas possibilita que o Cliente possa obter relatórios de suas reservas, através de uma lista de reservas que é retornada. Como parâmetros o método possui os dados de identificação do Cliente, uma lista de identificadores de reservas especificados através do parâmetro listidreservas, um intervalo de datas de realização das reservas especificado através dos parâmetros datainicialreservas e datafinalreservas. O último parâmetro é o status das reservas. Assim, o Cliente pode buscar as reservas que realizou tendo como base uma lista de identificadores de reservas, ou tendo como base um intervalo de datas da realização das reservas e o status. O método alterarreserva possibilita que o Cliente possa alterar a data de retirada e a data de devolução de uma determinada reserva. Além dos dados de identificação do Cliente, o método possui como parâmetros o identificador da reserva a ser alterada, a nova data de retirada e a nova data de devolução do veículo. Como resultado o método retorna um valor booleano especificando o valor verdadeiro (true) no caso de sucesso e o valor falso (false) para o caso de falha. O método cancelarreserva possibilita que o Cliente possa cancelar uma determinada reserva. Como resultado o método retorna um valor booleano especificando o valor verdadeiro (true) no caso de sucesso e o valor falso (false) para o caso de falha Implementação do Cliente Conforme foi mencionado na Seção 4.1, o cliente foi desenvolvido na linguagem PHP, a fim de demonstrar a interoperabilidade da tecnologia de Web Services. A implementação do Cliente corresponde a uma aplicação Web de um hotel, em que está disponível aos funcionários as funcionalidades para a realização de reserva de veículos aos hóspedes, fazendo uso das funcionalidades do Web Service. Foram implementadas somente as funcionalidades da aplicação Cliente que utilizam os métodos do Web Service, porém, em um caso real essa funcionalidade seria parte do sistema de gerenciamento do Hotel. Assim como no servidor, os dados necessários à realização das operações foram inseridos manualmente no banco de dados, para simplificar a implementação e deixar o foco do trabalho na comunicação entre as aplicações.

50 50 Na linguagem PHP, versão 5, a biblioteca de funções necessária para a criação de aplicações Clientes de Web Services e Servidores já está incorporada, necessitando apenas que seja feita a habilitação da biblioteca. Mais detalhes de configuração podem ser encontados em Php (2006). A implementação de um Cliente de um Web Service baseado em SOAP na linguagem PHP é bastante simplificada. Uma vez que se tenha habilitado a biblioteca php_soap.dll no arquivo de configuração php.ini, no diretório de instalação da linguagem, é possível instanciar um objeto da classe SoapClient, necessitando saber apenas a localização da WSDL do Serviço. A Figura 14 apresenta um trecho de código do arquivo veiculos.php, através do qual é realizada a busca dos veículos da locadora que estão disponíveis para reserva. 1. <?php 2. $client = new SoapClient(" 3. $veiculos = ($client->buscarveiculos(1,"senha1")); 4. if (count($veiculos)<=0){ 5. echo("não existem veículos disponíveis para reserva!"); 6. else{ 7. //apresenta um formulário para fornecimento dos dados para a reserve. 8. //trecho omitido devido à extensão do código ?> Figura 14 Fragmento de Código do Arquivo veiculos.php. Na Figura 14 foi apresentado somente um fragmento do código do arquivo veículos.php devido à sua extensão. O arquivo na íntegra pode ser encontrado no Anexo III. Neste fragmento, observa-se que à variável $client é atribuído o objeto da classe SoapClient obtido através da instanciação da classe, tendo como parâmetro o endereço da WSDL do Serviço. Após a instanciação do objeto, é possível realizar chamadas a qualquer método implementado pelo Web Service. O código em negrito representa estas operações. A chamada ao método buscarveiculos do Web Service, apresentada na linha 3 do fragmento de código da Figura 14, tem como parâmetros o identificador do Cliente, neste

51 51 caso a empresa parceira, e a senha. Como retorno, será atribuído à variável $veiculos um array com os dados dos veículos que estão disponíveis para reserva. Analisando o trecho apresentado nota-se a facilidade da codificação de um Cliente de um Web Service baseado em RPC, no qual as chamadas aos métodos remotos são realizadas da mesma forma que seriam feitas às chamadas aos métodos de um objeto local. No entanto, dificuldades podem ser observadas a respeito dos tipos de dados dos parâmetros e dos métodos de retorno. Apesar de todo o estudo da especificação da API JAX-RPC a respeito do mapeamento de dados, e da realização de testes com pequenas aplicações, foi observado que as diferenças entre as linguagens pode dificultar a integração das aplicações. Ainda a respeito do mapeamento de dados, pode-se citar como exemplo a dificuldade encontrada neste trabalho a respeito dos dados do tipo Data, onde a adoção das classes java.util.date e java.sql.date dificultou o desenvolvimento do trabalho, não permitindo que tanto um Cliente na própria linguagem java como o Cliente na linguagem PHP pudessem realizar chamadas aos métodos remotos. Assim, foi definido que os dados do tipo Data seriam representados como String no Servidor, com a forma AAAA-MM-DD para facilitar a inserção no banco de dados. Na busca por alternativas para o problema, foram realizadas consultas a diversos fóruns de discussão sobre o assunto, além de um exaustivo estudo da especificação da API da documentação das classes, sendo que a alternativa adotada foi a mais fácil de ser implementada, senão a única encontrada, uma vez que testes com outras alternativas não obtiveram êxito. Além da dificuldade nos tipos de dados que representam Data, foi notada também uma dificuldade na adoção dos tipos dos parâmetros e dos dados de retorno dos métodos remotos do Web Service. A utilização de classes definidas no desenvolvimento para estes dados não foi possível, embora a API defina que classes que não integram a API possam ser empregadas, desde que atendidos os requisitos quanto aos tipos de dados dos atributos, dos parâmetros e dos dados de retorno dos métodos. No caso dos métodos remotos buscarveiculos e buscarreservas, são retornados arrays de objetos da classe java.util.object, uma vez que as classes Veiculo e Reserva não puderam ser empregadas.

52 52 Feitas as adequações para sanar as dificuldades acima citadas, observou-se, no entanto, que deste ponto em diante a implementação do cliente foi realizada com certa facilidade, especialmente na linguagem PHP. Ressalte-se também que o fato da linguagem PHP disponibilizar funções nativas, tanto para criação de Web Services e Clientes quanto para acesso ao Sistema Gerenciador de Banco de Dados MySQL possibilitou otimizar o desenvolvimento da aplicação.

53 53 5. CONSIDERAÇÕES FINAIS O desenvolvimento do trabalho permitiu o levantamento das características da tecnologia de Web Services bem como da modalidade de comércio eletrônico Business-to-business (B2B), possibilitando uma avaliação mais concisa a respeito das tecnologias atuais utilizadas na integração de aplicações, bem como o levantamento das vantagens advindas da utilização do comércio eletrônico, sobretudo naquela modalidade. Foi possível notar a importância do emprego da tecnologia de Web Services na realização de processos de negócio. A informatização das empresas, associada à redução nos custos dos equipamentos, permitiu a automatização dos processos de negócio, tornando mais ágil, mais eficiente e menos dispendiosa a sua execução. Nota-se também a importância da utilização da tecnologia pelas empresas com a finalidade de expandir seus mercados consumidores, abrangendo regiões geográficas e faixas de mercado antes inatingíveis. Uma questão que não pode deixar de ser citada é a respeito da importância da busca de padronização no desenvolvimento de tecnologias, sobretudo a respeito da integração de aplicações desenvolvidas em plataformas e linguagens de programação diferentes. O padrão XML facilita o trabalho de padronização, possibilitando a criação de novos padrões, como é o caso, por exemplo, da linguagem WSDL e do protocolo SOAP. Em relação a B2B é importante citar que existem poucas informações no que diz respeito à legislação, sendo que nesse trabalho não foi abordada a relação legal entre as empresas. Desta forma, esse trabalho apontou a viabilidade em se utilizar os Web Services na ligação entre aplicações de empresas distintas e mostrou que, realmente, existe portabilidade na

54 54 utilização dessa tecnologia, já que cliente e servidor foram implementados em linguagens diferentes. No que diz respeito à comunicação entre aplicações cliente e servidor implementados em linguagens distintas, vale ressaltar que, apesar da portabilidade ser garantida pelas características dos Web Services, podem existir alguns problemas relacionados às características próprias das linguagens, como, por exemplo, os tipos de dados manipulados pelas mesmas. Baseando-se nos estudos realizados nesse trabalho uma questão que não pode ser definida é qual a melhor tecnologia de comunicação, RMI, CORBA ou Web Services, já que a escolha depende muito do problema que se quer resolver e, nesse trabalho, foi analisada apenas uma situação, não sendo realizado um estudo comparativo entre as mesmas. Para a situação apresentada, a princípio, a melhor escolha é o Web Service, por dois motivos: a facilidade da implementação do cliente, já que só é necessário conhecer a localização da WSDL; e a troca de dados XML. Em relação ao RMI, pode-se acrescentar, ainda, que a interoperabilidade é mais uma vantagem de se utilizar Web Services. Individualmente, é perceptível o grande valor trazido pelo desenvolvimento deste trabalho, evidenciando um notável aprendizado a respeito da tecnologia e dos aspectos relativos ao comércio eletrônico, o qual seguramente pode ser empregado no desenvolvimento de outros estudos e servir de base para outros trabalhos. Como trabalhos futuros, pode-se pensar o estudo de aspectos relativos à segurança de Web Services, uma vez que esta é uma questão essencial, principalmente quando se está abordando questões comerciais, como é o caso do Business-to-business.

55 55 6. REFERÊNCIAS BIBLIOGRÁFICAS (ALBUQUERQUE, 2001) ALBUQUERQUE, Fernando. TCP/IP Internet Programação de Sistemas Distribuídos HTML, JavaScript e Java. Rio de Janeiro: Axcel Books, (AMOR, 2000) (CASETTI, 1993) (CHAPPELL, 2002) AMOR, Daniel. A Evolução do E-Business: Vivendo e Trabalhando em um Mundo Interconectado. São Paulo: Makron Books, CASETTI, Orestes et al. Paradigmas para Construção de Sistemas Distribuídos. Brasília: Disponível em Acesso em 29/04/2006. CHAPPELL, David A. et al. Java Web Services. California: O Reilly & Associates, (COULOURIS, 2001) COULOURIS, George et al. Distributed Systems Concepts and Design, 3ª Edição, Adison Wesley, Pearson Education. HENDRICKS, Mack et al. Profissional Java Web Services. (HENDRICKS, 2002) Rio de Janeiro: Alta Books, (HORSTMANN, 2003) HORSTMANN, Cay S. et al. Core Java 2 Volume II Recursos Avançados. São Paulo: Pearson Education do Brasil, (NUNES, 2005) NUNES, Luiz W. A. Análise da Utilização da API JAX-R para Acesso a Registros XML f. Trabalho de Estágio (Estágio Supervisionado como Requisito Parcial da Disciplina de Sistemas de Informação I) Centro Universitário Luterano de Palmas, Universidade Luterana do Brasil, Palmas, 2005.

56 56 (OASIS, 2004) (PHP, 2006) OASIS, Organization for the Advancement of Structured Information Standards. UDDI Spec TC. Disponível em < Acesso em: 30 jun PHP, Linguagem PHP. Manual do PHP. Disponível em < Acesso em: 03 jul (RICCIONI, 2000) RICCIONI, Paulo Roberto. Introdução a Objetos Distribuídos com CORBA, Visual Books: (SILBERSCHATZ, 2004) (SILVESTRE, 2004) (SUN, 2003) (SUN,2005) (TODD, 2003) (W3C, 2001) (W3C, 2002) SILBERSCHATZ, Abraham et al. Sistemas Operacionais com Java, 6ª Edição. Rio de Janeiro: Campus, SILVESTRE, Larissa Jácome Barros. A Utilização do Padrão XML no Gerenciamento de Processos de Negócios f. Monografia (Pós-Graduação em Gestão em Novas Tecnologias) Centro Universitário Luterano de Palmas, Universidade Luterana do Brasil, Palmas, SUN, Sun Microsystems. Java API for XML-Based RPC Specification 1.1. Califórnia, Disponível em < Acesso em 30 jun SUN, Sun Microsystems. J2EE 1.4 Tutorial. Disponível em < Acesso em 30 jun TODD, Nick et al. Java Server Pages O Guia do Desenvolvedor. Rio de Janeiro: Campus, W3C, World Wide Web Consortium. Web Services Description Language. Disponível em < Acesso em: 31 jul W3C, World Wide Web Consortium. Web Services Architecture. Disponível em < /#whatisws>. Acesso em: 30 jun

57 ANEXOS 57

58 58 ANEXO I: MODELAGEM DO WEB SERVICE CASOS DE USO EXPANDIDO Caso de Uso: Atores: Finalidade: Visão Geral: Tipo: Pré-condições: Pós-condições: Ação do Ator 1. Este caso de uso começa quando o cliente solicita os veículos disponíveis para reserva. Seqüências Alternativas: Buscar Veículos Cliente Buscar a relação de veículos disponíveis para reserva. O cliente solicita a relação de veículos disponíveis. Primário O cliente deve possuir status ativo. Não tem. Seqüência Típica de Eventos Resposta do Sistema 2. O sistema verifica o status do cliente, busca e retorna uma lista com os dados dos veículos. 2. O sistema retorna mensagem de erro informando que o status do cliente está inativo. 2. O sistema retorna mensagem de erro informando a inexistência de veículos disponíveis para reserva.

59 59 Caso de Uso: Atores: Finalidade: Visão Geral: Tipo: Pré-condições: Pós-condições: Seqüência Típica de Eventos Ação do Ator 1. Este caso de uso começa quando o cliente identifica o veículo, informa o período desejado para locação, e confirma a operação. Seqüências Alternativas: Reservar Veículo Cliente Permitir a reserva de um veículo por um determinado cliente. O cliente identifica o veículo, informa a data de retirada e a data de devolução. Primário O cliente deve possuir status ativo. O veículo deve estar disponível para reserva. É criado um objeto do conceito Reserva associado ao objeto do conceito Cliente e ao objeto do conceito Veículo. O atributo status do objeto do conceito Veículo é configurado como reservado. Resposta do Sistema 2. O sistema verifica o status do cliente, confirma a disponibilidade do veículo e retorna mensagem de confirmação, contendo o identificador da Reserva. 2. O sistema retorna mensagem de erro informando que o status do cliente está inativo. 2. O sistema retorna mensagem de erro informando que o veículo está indisponível para reserva.

60 60 Caso de Uso: Atores: Finalidade: Visão Geral: Tipo: Pré-condições: Pós-condições: Ação do Ator 1. Este caso de uso começa quando o cliente informa os parâmetros desejados e confirma a operação. Seqüências Alternativas: Buscar Reservas Cliente Permitir a busca dos dados das reservas, de acordo com os parâmetros desejados. O cliente solicita as reservas de acordo com os seguintes parâmetros: identificador do cliente, senha, identificadores das reservas, período da realização das reservas (data inicial e data final do período) e status. Primário Não tem. Não tem. Seqüência Típica de Eventos Resposta do Sistema 2. O sistema identifica o cliente, busca e retorna os dados das reservas de acordo com os parâmetros. 2. O sistema retorna mensagem de erro, informando que o cliente não foi identificado. 2. O sistema retorna mensagem de erro informando que não foram encontradas ocorrências de acordo com os parâmetros informados.

61 61 Caso de Uso: Atores: Finalidade: Visão Geral: Tipo: Pré-condições: Pós-condições: Ação do Ator 1. O cliente informa o novo período e solicita alteração. Seqüências Alternativas: Alterar Reserva Cliente Permitir alteração em uma determinada reserva. O cliente identifica a reserva e informa o novo período da locação. Primário A reserva deve estar com status a retirar e o cliente deve estar com status ativo. É alterado o período desejado para locação. Seqüência Típica de Eventos Resposta do Sistema 2. O sistema verifica o status do cliente, realiza a alteração e retorna mensagem de confirmação. 2. O sistema retorna mensagem de erro informando que o status do cliente está inativo. 2. O sistema retorna mensagem de erro informando que a reserva não existe. 2. O sistema retorna mensagem de erro informando que a reserva não permite alteração.

62 62 Caso de Uso: Cancelar Reserva Atores: Cliente Finalidade: Permitir o cancelamento de uma determinada reserva. Visão Geral: O cliente identifica a reserva e solicita o cancelamento. Tipo: Primário Pré-condições: A reserva deve estar com status a retirar e o cliente deve possuir com status ativo. Pós-condições: O status da reserva é configurado para cancelada. O atributo status do objeto do conceito Veículo é definido como disponível. Seqüência Típica de Eventos Ação do Ator Resposta do Sistema 1. Este caso de uso começa quando o cliente solicita o cancelamento de uma determinada reserva. 2. O sistema verifica o status do cliente, confere o status da reserva e altera para cancelada. Seqüências Alternativas: 2. O sistema retorna mensagem de erro informando que o status do cliente está inativo. 2. O sistema retorna mensagem de erro informando que a reserva não existe. 2. O sistema retorna mensagem de erro informando que a reserva não pode ser cancelada.

63 63 DIAGRAMAS DE CASOS DE USO Buscar Veiculos Reservar Veiculos Buscar Reservas Cliente Alterar Reserva Cancelar Reserva

64 64 MODELO CONCEITUAL Veiculo idveiculo modelo marca cor ano numportas numpassageiros categhabilitacao quilometragematual valorquilometro valordiaria status possui 1 0..* Reserva idreserva datareserva dataretirada dataprevdevolucao datadevolucao quilometragemretirada quilometragemdevolucao status valorquilometro valordiaria idveiculo idcliente 0..* possui 1 Cliente (from Use Case View) idcliente senha nome responsavel status

65 65 DIAGRAMAS DE SEQÜÊNCIAS Buscar Veículos : Cliente buscarveiculos(idcliente,senha) Sistema Reservar Veículo : Cliente reservarveiculo(idcliente,senha,idveiculo,dataretirada,dataprevdevolucao) Sistema

66 66 Buscar Reservas : Cliente Sistema buscarreservas(dadosdebusca) dadosdebusca: idcliente, senha, listidreservas, datainicialreservas, datafinalreservas, status. Alterar Reserva : Cliente Sistema alterarreserva(idcliente,senha,idreserva,dataretirada,dataprevdevolucao)

67 67 Cancelar Reserva : Cliente Sistema cancelarreserva(idcliente,senha,idreserva)

68 68 CONTRATOS Buscar Veículos Contrato: Nome: Parâmetros: Responsabilidades: Exceções: Saída: Pré-condições: Pós-condições: Buscar Veículos buscarveiculos(parâmetros) Cliente: idcliente senha Buscar os dados dos veículos cujo status é disponível. Cliente com status inativo. Não tem. Não tem. Não tem. Reservar Veículo Contrato: Nome: Parâmetros: Responsabilidades: Exceções: Saída: Pré-condições: Pós-condições: Reservar Veículo reservarveiculo(parâmetros) Cliente: idcliente senha Veiculo: idveiculo Reserva: dataretirada dataprevdevolucao Realizar a reserva de um determinado veículo. Veículo já reservado. Não tem. O cliente deve possuir status ativo. É criado um objeto do conceito Reserva relacionado ao objeto do conceito Veículo e ao objeto do conceito Cliente. O atributo status do objeto do conceito Veículo é configurado como reservado.

69 69 Buscar Reservas Contrato: Nome: Parâmetros: Responsabilidades: Exceções: Saída: Pré-condições: Pós-condições: Buscar Reservas buscarreservas(parâmetros) Cliente: idcliente senha Reservas: listidreservas (lista com valores para o atributo idreserva das reservas a consultar) datainicialreservas datafinalreservas status Buscar os dados das reservas realizadas, de acordo com os critérios desejados. Não tem. Não tem. O cliente deve ser identificado. Não tem. Alterar Reserva Contrato: Nome: Parâmetros: Responsabilidades: Exceções: Saída: Pré-condições: Pós-condições: Alterar Reserva alterarreserva(parâmetros) Cliente: idcliente senha Reserva: idreserva dataretirada dataprevdevolucao Alterar a data de retirada e/ou a data de previsão para devolução de uma determinada reserva. Reserva com status retirado. Não tem. O cliente deve possuir status ativo. São alterados os valores dos atributos dataretirada e dataprevdevolucao do objeto do conceito Reserva.

70 70 Cancelar Reserva Contrato: Nome: Parâmetros: Cancelar Reserva cancelarreserva(parâmetros) Cliente: idcliente senha Reserva: idreserva Responsabilidades: Permitir o cancelamento de uma determinada reserva. Exceções: Reserva com status diferente de a retirar. Saída: Pré-condições: Pós-condições: Não tem. O cliente deve possuir status ativo. O valor do atributo status do objeto do conceito Reserva é definido como cancelada. O valor do atributo status do objeto do conceito Veículo é definido como disponível.

71 71 DIAGRAMAS DE COLABORAÇÃO Buscar Veículos 3: cliente := buscarcliente(idcliente,senha) Cliente Clientes 2: cliente := buscarcliente(idcliente,senha) 1: buscarveiculos(idcliente,senha) Sistema : Cliente 4: [cliente.getstatus() == "ativo"] listaveiculos := buscarveiculos() Veiculo Veiculos 5: listaveiculos := buscarveiculos()

72 72 Reservar Veículo 6: [veiculo.getstatus() == "disponivel"] alterarveiculo(status) Veiculo Veiculos Cliente 5: veiculo := buscarveiculo(idveiculo) 4: [cliente.getstatus() == "ativo"] alterarveiculo(idveiculo,status) 3: cliente := buscarcliente(idcliente,senha) 1: reservarveiculo(idcliente,senha,idveiculo,dataretirada,dataprevdevolucao) 2: cliente := buscarcliente(idcliente,senha) Sistema Clientes : Cliente 7: reservarveiculo(idcliente,idveiculo,dataretirada,dataprevdevolucao) 9: [reserva!= null] idreserva := adicionarreserva(reserva) 8: criarreserva(idcliente,idveiculo,dataretirada,dataprevdevolucao) reserva: Reserva Reservas Reserva

73 73 Buscar Reservas Cliente Clientes 3: cliente := buscarcliente(idcliente,senha) 2: cliente := buscarcliente(idcliente,senha) 1: buscarreservas(idcliente,senha,listidreservas,datainicialreservas,datafinalreservas,status) Sistema : Cliente 4: [cliente!= null] reservas := buscarreservas(idcliente,listidreservas,datainicialreservas,datafinalreservas,status) 5: reservas := buscarreservas(idcliente,listidreservas,datainicialreservas,datafinalreservas,status) Reserva Reservas

74 74 Alterar Reserva Cliente Clientes 3: cliente := buscarcliente(idcliente,senha) 2: cliente := buscarcliente(idcliente,senha) 1: alterarreserva(idcliente,senha,idreserva,dataretirada,dataprevdevolucao) Sistema : Cliente 4: [cliente.getstatus() == "ativo"] alterarreserva(idcliente,idreserva,dataretirada,dataprevdevolucao) 5: reserva := buscarreserva(idreserva) Reserva Reservas 6: [reserva.getstatus() == "a retirar" && reserva.getidcliente() == idcliente] alterarreserva(idreserva,dataretirada,dataprevdevolucao)

75 75 Cancelar Reserva Cliente Clientes Veiculo 3: cliente := buscarcliente(idcliente,senha) 2: cliente := buscarcliente(idcliente,senha) 8: alterarveiculo(reserva.getidveiculo(),status) 1: cancelarreserva(idcliente,senha,idreserva) Sistema 7: alterarveiculo(reserva.getidveiculo(),status) Veiculos : Cliente 4: [cliente.getstatus() == "ativo] reserva:= cancelarreserva(idcliente,idreserva) 5: reserva := buscarreserva(idreserva) Reserva Reservas 6: [reserva.getstatus() == "a retirar" && reserva.getidcliente() == idcliente] cancelarreserva(idreserva)

76 76 DIAGRAMA DE CLASSES Reserva idreserva : int datareserva : java.util.date dataretirada : java.util.date dataprevdevolucao : java.util.date datadevolucao : java.util.date quilometragemretirada : int quilometragemdevolucao : int status : String valorquilometro : float valordiaria : float idveiculo : int idcliente : int criarreserva() adicionarreserva() buscarreservas() buscarreserva() alterarreserva() cancelarreserva() 0..* possui 1 possui 0..* 1 Veiculo idveiculo : int modelo : String marca : String cor : String ano : int numportas : int numpassageiros : int categhabilitacao : char quilometragematual : int valorquilometro : float valordiaria : float status : String buscarveiculos() alterarveiculo() Veiculo() Veiculos buscarveiculos() alterarveiculo() Reservas Cliente (from Use Case View) idcliente : int senha : String nome : String responsavel : String status : String buscarcliente() reservarveiculo() buscarreservas() alterarreserva() cancelarreserva() Clientes buscarcliente()

77 77 ANEXO II: IMPLEMENTAÇÃO DO WEB SERVICE CLASSE CLIENTE package locadora; import java.sql.*; import java.sql.sqlexception; public class Cliente{ public Cliente(){ public void setidcliente(int idcliente){ this.idcliente = idcliente; public int getidcliente(){ return this.idcliente; public void setsenha(string senha){ this.senha = senha; public String getsenha(){ return this.senha; public void setnome(string nome){ this.nome = nome; public String getnome(){ return this.nome; public void setresponsavel(string responsavel){ this.responsavel = responsavel; public String getresponsavel(){ return this.responsavel;

78 78 public void setstatus(string status){ this.status = status; public String getstatus(){ return this.status; public Cliente buscarcliente(int idcliente, String senha){ this.conexao = new Conexao(); try{ if (this.conexao.conecta()){ this.resultset = conexao.consulta("select * FROM cliente WHERE idcliente = "+idcliente+" AND senha = '"+senha+"';"); if (this.resultset!= null){ if (this.resultset.next()){ this.setidcliente(this.resultset.getint(1)); this.setsenha(this.resultset.getstring(2)); this.setnome(this.resultset.getstring(3)); this.setresponsavel(this.resultset.getstring(4)); this.setstatus(this.resultset.getstring(5)); this.conexao.desconecta(); this.conexao = null; return this; return null; catch(sqlexception ex){ return null; private int idcliente; private Conexao conexao; private ResultSet resultset; private String senha, nome, responsavel, status;

79 79 CLASSE VEICULO package locadora; import java.util.*; import java.sql.*; import java.sql.sqlexception; public class Veiculo{ public Veiculo(){ public void setidveiculo (int idveiculo){ this.idveiculo = idveiculo; public int getidveiculo(){ return this.idveiculo; public void setano(int ano){ this.ano = ano; public int getano(){ return this.ano; public void setnumportas(int numportas){ this.numportas = numportas; public int getnumportas(){ return this.numportas; public void setnumpassageiros(int numpassageiros){ this.numpassageiros = numpassageiros; public int getnumpassageiros(){ return this.numpassageiros; public void setquilometragematual(int quilometragematual){ this.quilometragematual = quilometragematual;

80 80 public int getquilometragematual(){ return this.quilometragematual; public void setmodelo(string modelo){ this.modelo = modelo; public String getmodelo(){ return this.modelo; public void setmarca(string marca){ this.marca = marca; public String getmarca(){ return this.marca; public void setcor(string cor){ this.cor = cor; public String getcor(){ return this.cor; public void setstatus(string status){ this.status = status; public String getstatus(){ return this.status; public void setcateghabilitacao(string categhabilitacao){ this.categhabilitacao = categhabilitacao; public String getcateghabilitacao(){ return this.categhabilitacao; public void setvalorquilometro(float valorquilometro){

81 81 this.valorquilometro = valorquilometro; public float getvalorquilometro(){ return this.valorquilometro; public void setvalordiaria(float valordiaria){ this.valordiaria = valordiaria; public float getvalordiaria(){ return this.valordiaria; public ArrayList buscarveiculos(){ this.conexao = new Conexao(); try{ if (this.conexao.conecta()){ this.resultset = this.conexao.consulta("select * FROM veiculo WHERE status = 'disponivel';"); if (this.resultset!= null){ ArrayList veiculos = new ArrayList(); while (this.resultset.next()){ veiculos.add(this.resultset.getint(1)); veiculos.add(this.resultset.getstring(2)); veiculos.add(this.resultset.getstring(3)); veiculos.add(this.resultset.getstring(4)); veiculos.add(this.resultset.getint(5)); veiculos.add(this.resultset.getint(6)); veiculos.add(this.resultset.getint(7)); veiculos.add(this.resultset.getstring(8)); veiculos.add(this.resultset.getint(9)); veiculos.add(this.resultset.getfloat(10)); veiculos.add(this.resultset.getstring(11)); veiculos.add(this.resultset.getfloat(12)); this.conexao.desconecta(); this.conexao = null; return veiculos; return null; catch(sqlexception ex){ return null;

82 82 public boolean alterarveiculo(int idveiculo, String status){ this.conexao = new Conexao(); if (this.conexao.conecta()){ boolean result = this.conexao.atualiza("update veiculo SET status = '"+status+"' WHERE idveiculo = "+idveiculo+";"); this.conexao.desconecta(); this.conexao = null; return result; return false; private int idveiculo, ano, numportas, numpassageiros, quilometragematual; private String modelo, marca, cor, status, categhabilitacao; private float valorquilometro, valordiaria; private ResultSet resultset; private Conexao conexao;

83 83 CLASSE RESERVA package locadora; import java.util.*; import java.util.stringtokenizer; import java.sql.*; import java.sql.sqlexception; public class Reserva{ public Reserva(){ public Reserva(int idcliente, int idveiculo, String dataretirada, String dataprevdevolucao){ this.idcliente = idcliente; this.idveiculo = idveiculo; this.dataretirada = dataretirada; this.dataprevdevolucao = dataprevdevolucao; public void setidreserva(int idreserva){ this.idreserva = idreserva; public int getidreserva(){ return this.idreserva; public void setquilometragemretirada(int quilometragemretirada){ this.quilometragemretirada = quilometragemretirada; public int getquilometragemretirada(){ return this.quilometragemretirada; public void setquilometragemdevolucao(int quilometragemdevolucao){ this.quilometragemdevolucao = quilometragemdevolucao; public int getquilometragemdevolucao(){ return this.quilometragemdevolucao; public void setidveiculo(int idveiculo){ this.idveiculo = idveiculo;

84 84 public int getidveiculo(){ return this.idveiculo; public void setidcliente(int idcliente){ this.idcliente = idcliente; public int getidcliente(){ return this.idcliente; public void setdatareserva(string datareserva){ this.datareserva = datareserva; public String getdatareserva(){ return this.datareserva; public void setdataretirada(string dataretirada){ this.dataretirada = dataretirada; public String getdataretirada(){ return this.dataretirada; public void setdataprevdevolucao(string dataprevdevolucao){ this.dataprevdevolucao = dataprevdevolucao; public String getdataprevdevolucao(){ return this.dataprevdevolucao; public void setdatadevolucao(string datadevolucao){ this.datadevolucao = datadevolucao; public String getdatadevolucao(){ return this.datadevolucao;

85 85 public void setstatus(string status){ this.status = status; public String getstatus(){ return this.status; public void setvalorquilometro(float valorquilometro){ this.valorquilometro = valorquilometro; public float getvalorquilometro(){ return this.valorquilometro; public void setvalordiaria(float valordiaria){ this.valordiaria = valordiaria; public float getvalordiaria(){ return this.valordiaria; public int adicionarreserva(reserva reserva){ this.conexao = new Conexao(); String sql = "INSERT INTO reserva (datareserva,dataretirada,dataprevdevolucao,status,valorquilometro,valordiaria,id Veiculo,idCliente) "; sql += " VALUES (NOW(),'"+reserva.getDataRetirada()+"','"+reserva.getDataPrevDevolucao()+"','a retirar',2.0,100.00,"+reserva.getidveiculo()+","+reserva.getidcliente()+");"; if (this.conexao.conecta()){ boolean result = this.conexao.atualiza(sql); this.conexao.desconecta(); Reserva r = this.buscarreserva(0,reserva.getidcliente(),reserva.getidveiculo(),reserva.getdatare tirada(),reserva.getdataprevdevolucao()); if (r!= null){ return r.getidreserva(); return -1;

86 public ArrayList buscarreservas(int idcliente,int idreservabusca, String datainicialreservas, String datafinalreservas, String status){ this.conexao = new Conexao(); String sql = ""; if (idreservabusca<=0){ sql += "SELECT * FROM reserva WHERE idcliente = "+idcliente+" AND datareserva >= '"+datainicialreservas+"'"; sql += " AND datareserva <= '"+datafinalreservas+"' AND status = '"+status+"';"; else{ sql = "SELECT * FROM reserva WHERE idcliente = "+idcliente+" AND idreserva = "+idreservabusca+";"; if (this.conexao.conecta()){ this.resultset = this.conexao.consulta(sql); try{ if (this.resultset!= null){ ArrayList reservas = new ArrayList(); while (this.resultset.next()){ reservas.add(this.resultset.getint(1)); java.sql.date aux = this.resultset.getdate(2); if (aux!=null){ reservas.add(aux.tostring()); else{ reservas.add(" "); aux = this.resultset.getdate(3); if (aux!=null){ reservas.add(aux.tostring()); else{ reservas.add(" "); aux = this.resultset.getdate(4); if (aux!=null){ reservas.add(aux.tostring()); else{ reservas.add(" "); aux = this.resultset.getdate(5); if (aux!=null){ reservas.add(aux.tostring()); else{ reservas.add(" "); 86

87 87 return null; reservas.add(this.resultset.getint(6)); reservas.add(this.resultset.getint(7)); reservas.add(this.resultset.getstring(8)); reservas.add(this.resultset.getfloat(9)); reservas.add(this.resultset.getfloat(10)); reservas.add(this.resultset.getint(11)); reservas.add(this.resultset.getint(12)); this.conexao.desconecta(); return reservas; return null; catch(sqlexception ex){ ex.printstacktrace(); return null; public Reserva buscarreserva(int idreserva, int idcliente, int idveiculo, String dataretirada, String dataprevdevolucao){ this.conexao = new Conexao(); if (this.conexao.conecta()){ if (idreserva >0){ this.resultset = this.conexao.consulta("select * FROM reserva WHERE idreserva = "+idreserva+";"); else{ this.resultset = this.conexao.consulta("select * FROM reserva WHERE idcliente = "+idcliente+" and idveiculo = "+idveiculo+" and dataretirada = '"+dataretirada+"' and dataprevdevolucao = '"+dataprevdevolucao+"' and status = 'a retirar';"); try{ this.resultset.getdate(2); if (this.resultset!= null){ if (this.resultset.next()){ this.setidreserva(this.resultset.getint(1)); java.sql.date aux = if (aux!=null){ this.setdatareserva(aux.tostring()); else{ this.setdatareserva(" ");

88 88 aux = this.resultset.getdate(3); if (aux!=null){ this.setdataretirada(aux.tostring()); else{ this.setdataretirada(" "); aux = this.resultset.getdate(4); if (aux!=null){ this.setdataprevdevolucao(aux.tostring()); else{ this.setdataprevdevolucao(" "); aux = this.resultset.getdate(5); if (aux!=null){ 00"); this.setdatadevolucao(aux.tostring()); else{ this.setdatadevolucao(" this.setquilometragemretirada(this.resultset.getint(6)); this.setquilometragemdevolucao(this.resultset.getint(7)); this.setstatus(this.resultset.getstring(8)); this.setvalorquilometro(this.resultset.getfloat(9)); this.setvalordiaria(this.resultset.getfloat(10)); this.setidveiculo(this.resultset.getint(11)); this.setidcliente(this.resultset.getint(12)); this.conexao.desconecta(); this.conexao = null; return this; return null; catch(sqlexception ex){ return null; return null;

89 89 public boolean alterarreserva(int idreserva, String dataretirada, String dataprevdevolucao){ this.conexao = new Conexao(); if (this.conexao.conecta()){ boolean result = this.conexao.atualiza("update reserva SET dataretirada = '"+dataretirada+"', dataprevdevolucao = '"+dataprevdevolucao+"' WHERE idreserva = "+idreserva+";"); this.conexao.desconecta(); this.conexao = null; return result; return false; public boolean cancelarreserva(int idreserva){ this.conexao = new Conexao(); if (this.conexao.conecta()){ boolean result = this.conexao.atualiza("update reserva SET status = 'cancelada' WHERE idreserva = "+idreserva+";"); this.conexao.desconecta(); this.conexao = null; return result; return false; private int idreserva, quilometragemretirada, quilometragemdevolucao, idveiculo, idcliente; private String datareserva, dataretirada, dataprevdevolucao, datadevolucao; private String status; private float valorquilometro, valordiaria; private Conexao conexao; private ResultSet resultset; /*public static void main(string args[]){ try{ Reserva r = new Reserva(); ArrayList result = r.buscarreservas(1,null," "," ","a retirar"); if (result!=null){ Object[] resultado = result.toarray(); for (int i=0;i<resultado.length;i++){ System.out.println(resultado[i]);

90 90 */ else{ System.out.println("Erro"); catch(exception ex){ ex.printstacktrace();

91 91 CLASSE CLIENTES package locadora; public class Clientes{ public static Cliente buscarcliente(int idcliente, String senha){ Cliente cliente = new Cliente(); return cliente.buscarcliente(idcliente,senha); CLASSE VEICULOS package locadora; import java.util.*; public class Veiculos{ public static ArrayList buscarveiculos(){ Veiculo veiculo = new Veiculo(); return veiculo.buscarveiculos(); public static boolean alterarveiculo(int idveiculo, String status){ Veiculo veiculo = new Veiculo(); return veiculo.alterarveiculo(idveiculo,status);

92 92 CLASSE RESERVAS package locadora; import java.util.*; public class Reservas{ public static int reservarveiculo(int idcliente, int idveiculo, String dataretirada, String dataprevdevolucao){ Reserva reserva = new Reserva(idCliente,idVeiculo,dataRetirada,dataPrevDevolucao); return reserva.adicionarreserva(reserva); public static ArrayList buscarreservas(int idcliente, int idreserva, String datainicialreservas, String datafinalreservas, String status){ Reserva reserva = new Reserva(); return reserva.buscarreservas(idcliente,idreserva,datainicialreservas,datafinalreservas,s tatus); public static boolean alterarreserva(int idcliente, int idreserva, String dataretirada, String dataprevdevolucao){ Reserva reserva = new Reserva(); reserva.buscarreserva(idreserva,0,0,"",""); if (reserva.getstatus().equals("a retirar") && (reserva.getidcliente() == idcliente)){ return reserva.alterarreserva(idreserva,dataretirada,dataprevdevolucao); return false; public static Reserva cancelarreserva(int idcliente, int idreserva){ Reserva reserva = new Reserva(); reserva.buscarreserva(idreserva,0,0,"",""); if (reserva.getstatus().equals("a retirar") && (reserva.getidcliente() == idcliente)){ reserva.cancelarreserva(idreserva); return reserva; return null;

93 93 CLASSE CONEXAO package locadora; import java.sql.*; import java.sql.sqlexception; public class Conexao{ private String driver = "sun.jdbc.odbc.jdbcodbcdriver"; private String url = "jdbc:odbc:"; private String username; private String password; private Connection con; private Statement st; private boolean conectado = false; public Conexao(){ this.url = this.url + "locadora"; this.username = "webservice"; this.password = "webservicelocadora"; public boolean conecta(){ if (!this.conectado){ try{ Class.forName(driver); this.con = DriverManager.getConnection(url,userName,password); this.st = this.con.createstatement(); this.conectado = true; catch(exception ex){ return false; return true; public boolean desconecta(){ if (this.conectado){ try{ this.st.close(); this.con.close(); this.conectado = false; catch(sqlexception ex){

94 94 return true; return false; public boolean atualiza(string q){ try{ this.st.executeupdate(q); return true; catch(sqlexception ex){ return false; public ResultSet consulta(string q){ try{ return this.st.executequery(q); catch(sqlexception ex){ return null;

95 95 INTERFACE LOCADORAIF package locadora; import java.rmi.*; import java.rmi.remoteexception; import java.util.*; public interface LocadoraIF extends Remote{ public Object[] buscarveiculos(int idcliente, String senha) throws RemoteException; public int reservarveiculo(int idcliente, String senha, int idveiculo, String dataretirada, String dataprevdevolucao) throws RemoteException; public Object[] buscarreservas(int idcliente, String senha, int idreserva, String datainicialreservas, String datafinalreservas, String status) throws RemoteException; public boolean alterarreserva(int idcliente, String senha, int idreserva, String dataretirada, String dataprevdevolucao) throws RemoteException; public boolean cancelarreserva(int idcliente, String senha, int idreserva) throws RemoteException;

96 96 CLASSE LOCADORAIMPL package locadora; import java.rmi.*; import java.rmi.remoteexception; import java.util.*; public class LocadoraImpl implements LocadoraIF{ public LocadoraImpl(){ public Object[] buscarveiculos(int idcliente, String senha) throws RemoteException{ Cliente cliente = Clientes.buscarCliente(idCliente,senha); if (cliente!= null){ if (cliente.getstatus().equals("ativo")){ return Veiculos.buscarVeiculos().toArray(); return null; public int reservarveiculo(int idcliente, String senha, int idveiculo, String dataretirada, String dataprevdevolucao) throws RemoteException{ Cliente cliente = Clientes.buscarCliente(idCliente,senha); if (cliente!= null){ if (cliente.getstatus().equals("ativo")){ if (Veiculos.alterarVeiculo(idVeiculo,"reservado")){ return Reservas.reservarVeiculo(idCliente,idVeiculo,dataRetirada,dataPrevDevolucao); return -1; public Object[] buscarreservas(int idcliente, String senha, int idreserva, String datainicialreservas, String datafinalreservas, String status) throws RemoteException{ Cliente cliente = Clientes.buscarCliente(idCliente,senha); if (cliente!= null){ return Reservas.buscarReservas(idCliente,idReserva,dataInicialReservas,dataFinalReservas,status).toArray(); return null;

97 public boolean alterarreserva(int idcliente, String senha, int idreserva, String dataretirada, String dataprevdevolucao) throws RemoteException{ Cliente cliente = Clientes.buscarCliente(idCliente,senha); if (cliente!= null){ if (cliente.getstatus().equals("ativo")){ return Reservas.alterarReserva(idCliente,idReserva,dataRetirada,dataPrevDevolucao); return false; public boolean cancelarreserva(int idcliente, String senha, int idreserva) throws RemoteException{ Cliente cliente = Clientes.buscarCliente(idCliente,senha); if (cliente!= null){ if (cliente.getstatus().equals("ativo")){ Reserva reserva = Reservas.cancelarReserva(idCliente,idReserva); if (reserva!= null){ return Veiculos.alterarVeiculo(reserva.getIdVeiculo(),"disponível"); return false; 97

98 98 ARQUIVOS XML UTILIZADOS PELOS APLICATIVOS WSCOMPILE, JAR E WSDEPLOY Config-interface.xml 1. <?xml version="1.0" encoding="utf-8"?> 2. <configuration xmlns=" 3. <service name="locadora" targetnamespace="urn:foo" typenamespace="urn:foo" 4. packagename="locadora"> 5. <interface name="locadora.locadoraif"/> 6. </service> 7. </configuration> Jaxrpc-ri.xml 1. <?xml version="1.0" encoding="utf-8"?> 2. <webservices 3. xmlns=" 4. version="1.0" 5. targetnamespacebase="urn:foo" 6. typenamespacebase="urn:foo" 7. urlpatternbase="/ws"> 8. <endpoint 9. name="locadora" 10. display-name="servico Locadora" 11. description="web Service de uma Locadora de Veiculos usando JAX-RPC." 12. interface="locadora.locadoraif" 13. model="/web-inf/model.gz" 14. implementation="locadora.locadoraimpl"/> 15. <endpointmapping 16. endpointname="locadora" 17. urlpattern="/locadora"/> 18. </webservices>

99 99 Web.xml 1. <?xml version="1.0" encoding="utf-8"?> 2. <!DOCTYPE web-app 3. PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 4. " 5. <web-app> 6. <display-name>servico Locadora</display-name> 7. <description>web Service de uma Locadora de Veiculos usando 8. JAX-RPC.</description> 9. <session-config> 10. <session-timeout>60</session-timeout> 11. </session-config> 12. </web-app>

100 100 ANEXO III: IMPLEMENTAÇÃO DA APLICAÇÃO CLIENTE INDEX.PHP <html> <head> <title>hotel - Página Inicial</title> </head> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"> <table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php?flag=hospedagem">reservar Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php?flag=veiculo">reservar Veículo</a></h5></td> <td height="42"><h5><a href="buscar_reserva_apto.php?flag=buscaa">buscar Reserva Apto</a></h5></td> <td height="42"><h5><a href="buscar_reserva_veiculo.php?flag=buscav">buscar Reserva Veiculo</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php?flag=cliente">cadastrar Cliente</a></h5></td> </table> </td> <td width="645"> </td> </table> </center> </body> </html> RESERVA_HOSPEDAGEM.PHP

101 101 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>hotel - Reservar Hospedagem</title> <style type="text/css"> <!--.style1 {font-family: Verdana, Arial, Helvetica, sans-serif --> </style> </head> <body> <center> <table width="791" height="550" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"> <table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php?flag=hospedagem">reservar Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php?flag=veiculo">reservar Veículo</a></h5></td> <td height="42"><h5><a href="buscar_reserva_apto.php?flag=buscaa">buscar Reserva Apto</a></h5></td> <td height="42"><h5><a href="buscar_reserva_veiculo.php?flag=buscav">buscar Reserva Veiculo</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php?flag=cliente">cadastrar Cliente</a></h5></td> </table> <td width="645"> <h2 align="center">reserva DE HOSPEDAGEM</h2><br><br> <form id="form1" name="form1" method="post" action="buscar_idcliente.php?flag=hospedagem"> <label>cpf do Cliente:

102 <input type="text" name="cpf" tabindex="0" /> </label> <label>localizar <input type="submit" name="submit" value="submit" tabindex="1" /> </label> </form> <p align="center"><a href="cadastrar_cliente.php?flag=cliente">cliente Não Cadastrado? Cadastrar</a></p> </td> </table> </center> </body> </html> 102

103 103 BUSCAR_IDCLIENTE.PHP <?php $host="localhost"; $user="aplicacaoweb"; $password="aplicacaowebhotel"; $database="hotel"; mysql_connect($host,$user,$password); mysql_select_db($database); $sql=stripslashes("select idcliente from cliente where cpf = \"".$_POST['cpf']."\""); $result=mysql_query($sql); if (!$result){ echo("<a href=\"javascript:window.location='index.php'\">página Inicial</a>"); else{ $quantlinhas = mysql_num_rows($result); if ($quantlinhas>0){ $id=mysql_result($result,0); $id=(int)$id; $flag=$_get['flag']; if (!strcmp($flag,"hospedagem")){?> <script language="javascript"> <?php echo("window.location=\"inserir_reserva_hospedagem.php?idcliente=".$id."\"");?> </script> <?php else{ if (!strcmp($flag,"veiculo")){?> <script language="javascript"> <?php echo("window.location=\"veiculos.php?idcliente=".$id."\"");?> </script> <?php else{ if (!strcmp($flag,"buscaa")){?> <script language="javascript"> <?php echo("window.location=\"reservasa.php?idcliente=".$id."\"");?> </script> <?php else{ if (!strcmp($flag,"buscav")){?>

104 104 <script language="javascript"> <?php echo("window.location=\"reservasv.php?idcliente=".$id."\"");?> </script> <?php else{?> <script language="javascript"> <?php echo("window.location=\"index.php\"");?> </script> <?php else{?> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><center><h2>hotel</h2></center></td> <td width="136"><table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php">reserva de Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php">reserva de Veículos</a></h5></td> <td height="42"><h5><a href="buscar_reserva.php?flag=busca">buscar Reserva</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php">cadastrar Cliente</a></h5></td> </table></td> <td width="645"><?php

105 echo("<center><h2>reserva DE HOSPEDAGEM</h2></center><br>"); echo("<center>cliente não cadastrado!</center><br>"); echo("<center><a href=\"javascript:window.location='cadastrar_cliente.php?flag=cliente'\">cadastrar Cliente</a></center>");?></td> </table> </center> </body> <?php?> 105

106 106 INSERIR_RESERVA_HOSPEDAGEM.PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>hotel - Página Inicial</title> <style type="text/css"> <!--.style1 {font-family: Verdana, Arial, Helvetica, sans-serif --> </style> </head> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"> <table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php?flag=hospedagem">reservar Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php?flag=veiculo">reservar Veículo</a></h5></td> <td height="42"><h5><a href="buscar_reserva_apto.php?flag=buscaa">buscar Reserva Apto</a></h5></td> <td height="42"><h5><a href="buscar_reserva_veiculo.php?flag=buscav">buscar Reserva Veiculo</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php?flag=cliente">cadastrar Cliente</a></h5></td> </table> </td> <td width="645"> <form id="form1" name="form1" method="post" action="inserir_hospedagem.php?idcliente=<?php echo ($_GET['idCliente']);?>">

107 107 <table border="1"><td><p align="left"><label>data de Chegada:</label></p></td><td><p align="left"><input type="text" name="datachegada" tabindex="0" /></p></td> <td><p align="left"><label>data de Saída:</label></p></td><td><p align="left"><label><input type="text" name="datasaida" tabindex="1" /></td> <td><p align="left"><label>quantidade de Adultos:</label></p></td><td><p align="left"><label><input type="text" name="numadultos" tabindex="2" /></td> <td><p align="left"><label>quantidade de Crianças (< 2 anos):</label></p></td><td><p align="left"><label><input type="text" name="numcriancas" tabindex="3" /></td> <td><p align="center"><label><input name="tipoapartamento" type="radio" value="1" /></label></p></td><td><p align="left"><label>suíte de Luxo - Ideal para 2 Adultos</label></p></td> <td><p align="center"><label><input name="tipoapartamento" type="radio" value="2" /></label></p></td><td><p align="left"><label>suíte de Luxo - Ideal para Casal</label></p></td> <td><p align="center"><label><input name="tipoapartamento" type="radio" value="3" tabindex="4" /></label></p></td><td><p align="left"><label>suíte de Luxo - Ideal para Casal e 1 Criança (< 2 anos)</label></td> <td><p align="center"><label><input name="tipoapartamento" type="radio" value="4" tabindex="5" /></label></p></td><td><p align="left"><label>suíte de Luxo - Ideal para Casal e 1 Criança (> 2 anos)</label> </td> <td><p align="center"><label><input name="tipoapartamento" type="radio" value="5" /></label></p></td><td><p align="left"><label>suíte Standard - Ideal para 2 Adultos</label></td> <td><p align="center"><label><input name="tipoapartamento" type="radio" value="6" /></label></p></td><td><p align="left"><label>suíde Standard - Ideal para Casal</label></td> <td><p align="center"><label><input name="tipoapartamento" type="radio" value="7" tabindex="6" /></label></p></td><td><p align="left"><label>suíte Standard - Ideal para 2 Adultos e 1 Crinça (< 2 anos)</label></td> <td><p align="center"><label><input name="tipoapartamento" type="radio" value="8" /></label></p></td><td><p align="left"><label>suíte Standard - Ideal para 2 Adultos e 1 Criança (> 2 anos)</label></td> <td> </td><td><input type="submit" name="submit" value="concluir" /></td> </form> </td> </table> </center> </body> </html>

108 108 INSERIR_HOSPEDAGEM.PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>untitled Document</title> </head> <body> <?php $host="localhost"; $user="aplicacaoweb"; $password="aplicacaowebhotel"; $database="hotel"; $idhost=mysql_connect($host,$user,$password); if ($idhost){ $iddb=mysql_select_db($database,$idhost); $sql=stripslashes("insert into reservaapto values (null,".$_get['idcliente'].",\"".$_post['tipoapartamento']."\",now(),\"".$_post['data Chegada']."\",\"".$_POST['dataSaida']."\",150,".$_POST['numAdultos'].",".$_POST['num Criancas'].",'reservada')"); $result=mysql_query($sql); if ($result>0){ echo "<h3>reserva realizada!</h3>"; else{ echo ("<h3>reserva não realizada!</h3>"); echo(mysql_error($idhost));?> </body> </html>

109 109 RESERVA_VEICULO.PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>hotel - Reserva de Veículo</title> <style type="text/css"> <!--.style1 {font-family: Verdana, Arial, Helvetica, sans-serif --> </style> </head> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"> <table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php?flag=hospedagem">reservar Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php?flag=veiculo">reservar Veículo</a></h5></td> <td height="42"><h5><a href="buscar_reserva_apto.php?flag=buscaa">buscar Reserva Apto</a></h5></td> <td height="42"><h5><a href="buscar_reserva_veiculo.php?flag=buscav">buscar Reserva Veiculo</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php?flag=cliente">cadastrar Cliente</a></h5></td> </table> <td width="645"> <h2 align="center">reserva DE VEÍCULO</h2><br><br> <form id="form1" name="form1" method="post" action="buscar_idcliente.php?flag=veiculo">

110 <label>cpf do Cliente: <input type="text" name="cpf" tabindex="0" /> </label> <label>localizar <input type="submit" name="submit" value="submit" tabindex="1" /> </label> </form> <p align="center"><a href="cadastrar_cliente.php?flag=cliente">cliente Não Cadastrado? Cadastrar</a></p> </td> </table> <center> </body> </html> 110

111 111 VEICULOS.PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>untitled Document</title> </head> <body> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"><table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php">reserva de Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php">reserva de Veículos</a></h5></td> <td height="42"><h5><a href="buscar_reserva.php?flag=busca">buscar Reserva</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php">cadastrar Cliente</a></h5></td> </table></td> <td width="645"> <?php $client = new SoapClient(" $veiculos = ($client->buscarveiculos(1,"senha1")); if (count($veiculos)<=0){ echo("não existem veículos disponíveis para reserva!"); else{ echo("<form id='form1' name='form1' method='post' action='inserir_reserva_veiculo.php?idcliente=".$_get['idcliente']."'>"); echo("<table border='1'><td></td><td></td>");

112 112 echo("<td>data de Chegada:</td><td><input type='text' name='dataretirada' tabindex='0' /></td>"); echo("<td>data de Saída:</td><td><input type='text' name='dataprevdevolucao' tabindex='1' /></td>"); for ($i=0;$i<count($veiculos);$i=$i+12){ echo("<td><input name='idveiculo' type='radio' value='".$veiculos[0]."'/></td><td>"); echo("<table><td><p align='left'>modelo:</p></td><td><p align='left'>".$veiculos[$i+1]."</p></td>"); echo("<td><p align='left'>marca:</p></td><td><p align='left'>".$veiculos[$i+2]."</p></td>"); echo("<td><p align='left'>cor:</p></td><td><p align='left'>".$veiculos[$i+3]."</p></td>"); echo("<td><p align='left'>ano:</p></td><td><p align='left'>".$veiculos[$i+4]."</p></td>"); echo("<td><p align='left'>portas:</p></td><td><p align='left'>".$veiculos[$i+5]."</p></td>"); echo("<td><p align='left'>passageiros:</p></td><td><p align='left'>".$veiculos[$i+6]."</p></td>"); echo("<td><p align='left'>habilitação:</p></td><td><p align='left'>".$veiculos[$i+7]."</p></td>"); echo("<td><p align='left'>valor Quilômetro Adicional:</p></td><td><p align='left'>".$veiculos[$i+9]."</p></td>"); echo("<td><p align='left'>valor Diária:</p></td><td><p align='left'>".$veiculos[$i+11]."</p></td></table></td>"); echo("<td> </td><td><input type='submit' name='submit' value='concluir' /></td></table></form>");?> </td> </table> </center> </body> </body> </html>

113 113 INSERIR_RESERVA_VEICULO.PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>hotel - Página Inicial</title> <style type="text/css"> <!--.style1 {font-family: Verdana, Arial, Helvetica, sans-serif --> </style> </head> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"><table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php?flag=hospedagem">reservar Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php?flag=veiculo">reservar Veículo</a></h5></td> <td height="42"><h5><a href="buscar_reserva.php?flag=busca">buscar Reserva</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php?flag=cliente">cadastrar Cliente</a></h5></td> </table></td> <td width="645"> <?php $client = new SoapClient(" $aux = (int) $_POST['idVeiculo']; $reserva = $client- >reservarveiculo(1,"senha1",$aux,$_post['dataretirada'],$_post['dataprevdevolucao']);

114 114 if ($reserva>0){ echo("reserva Realizada!"); $host="localhost"; $user="aplicacaoweb"; $password="aplicacaowebhotel"; $database="hotel"; $idhost=mysql_connect($host,$user,$password); if ($idhost){ $iddb=mysql_select_db($database,$idhost); $reserva = (int) $reserva; $id = $_GET['idCliente']; $id = (int) $id; $insercao = "insert into reservaauto values (".$reserva.",".$id.",'a retirar')"; $query = mysql_query($insercao,$idhost); if ($query>0){ echo "<br>banco de dados do cliente ok."; else{ echo "<br>banco de dados do cliente não atualizado. Erro: ".mysql_error($idhost); else{ echo("reserva Não Realizada!");?> </td> </table> </center> </body> </html>

115 115 BUSCAR_RESERVA_APTO.PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>hotel - Reserva de Veículo</title> <style type="text/css"> <!--.style1 {font-family: Verdana, Arial, Helvetica, sans-serif --> </style> </head> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"> <table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php?flag=hospedagem">reservar Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php?flag=veiculo">reservar Veículo</a></h5></td> <td height="42"><h5><a href="buscar_reserva_apto.php?flag=buscaa">buscar Reserva Apto</a></h5></td> <td height="42"><h5><a href="buscar_reserva_veiculo.php?flag=buscav">buscar Reserva Veiculo</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php?flag=cliente">cadastrar Cliente</a></h5></td> </table> <td width="645"> <h2 align="center">busca DE RESERVA DE APARTAMENTO</h2><br><br> <form id="form1" name="form1" method="post" action="buscar_idcliente.php?flag=buscaa">

116 <label>cpf do Cliente: <input type="text" name="cpf" tabindex="0" /> </label> <label>localizar <input type="submit" name="submit" value="submit" tabindex="1" /> </label> </form> <p align="center"><a href="cadastrar_cliente.php?flag=cliente">cliente Não Cadastrado? Cadastrar</a></p> </td> </table> <center> </body> </html> 116

117 117 RESERVASA.PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>untitled Document</title> </head> <body> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"><table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php">reserva de Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php">reserva de Veículos</a></h5></td> <td height="42"><h5><a href="buscar_reserva.php?flag=busca">buscar Reserva</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php">cadastrar Cliente</a></h5></td> </table></td> <td width="645"> <?php $host="localhost"; $user="aplicacaoweb"; $password="aplicacaowebhotel"; $database="hotel"; mysql_connect($host,$user,$password); mysql_select_db($database); $consulta_reserva_apto="select cliente.nome, tipoapartamento.descricao, reservaapto.datareserva, reservaapto.datachegada, reservaapto.datasaida, reservaapto.valordiaria, reservaapto.numadultos, reservaapto.numcriancas from cliente,

118 118 reservaapto, tipoapartamento where cliente.idcliente=".$_get['idcliente']." and cliente.idcliente = reservaapto.idcliente and reservaapto.idtipoapto = tipoapartamento.idtipo and (not reservaapto.status='finalizada')"; $sql=stripslashes($consulta_reserva_apto); $result=mysql_query($sql); if (!$result){ echo("erro na consulta!"); echo("<a href=\"javascript:window.location='index.php'\">página Inicial</a>"); else{ $quantlinhas = mysql_num_rows($result); if ($quantlinhas>0){ $id=mysql_fetch_row($result); echo("<form id='form1' name='form1' method='post' action=''>"); echo("<table border='1'> <td></td><td><center><h3>reservas Localizadas</h3></center></td>"); while ($id){ echo("<td>nome:</td><td>".$id[0]."</td>"); echo("<td>apartamento:</td><td>".$id[1]."</td>"); echo("<td>data da Reserva:</td><td>".$id[2]."</td>"); echo("<td>data de Chegada:</td><td>".$id[3]."</td>"); echo("<td>data de Saída:</td><td>".$id[4]."</td>"); echo("<td>valor da Diária:</td><td>".$id[5]."</td>"); echo("<td>número de Adultos:</td><td>".$id[6]."</td>"); echo("<td>número de Crianças:</td><td>".$id[7]."</td>"); $id=mysql_fetch_row($result); echo("<td> </td><td><input type='submit' name='submit' value='concluir' /></td></table></form>"); else{ echo("nenhuma reserva encontrada!");?> </td> </table> </center> </body> </body> </html>

119 119 BUSCAR_RESERVA_VEICULO.PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>hotel - Reserva de Veículo</title> <style type="text/css"> <!--.style1 {font-family: Verdana, Arial, Helvetica, sans-serif --> </style> </head> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"> <table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php?flag=hospedagem">reservar Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php?flag=veiculo">reservar Veículo</a></h5></td> <td height="42"><h5><a href="buscar_reserva_apto.php?flag=buscaa">buscar Reserva Apto</a></h5></td> <td height="42"><h5><a href="buscar_reserva_veiculo.php?flag=buscav">buscar Reserva Veiculo</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php?flag=cliente">cadastrar Cliente</a></h5></td> </table> <td width="645"> <h2 align="center">busca DE RESERVA DE VEÍCULO</h2><br><br> <form id="form1" name="form1" method="post" action="buscar_idcliente.php?flag=buscav">

120 <label>cpf do Cliente: <input type="text" name="cpf" tabindex="0" /> </label> <label>localizar <input type="submit" name="submit" value="submit" tabindex="1" /> </label> </form> <p align="center"><a href="cadastrar_cliente.php?flag=cliente">cliente Não Cadastrado? Cadastrar</a></p> </td> </table> <center> </body> </html> 120

121 121 RESERVASV.PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>untitled Document</title> </head> <body> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"><table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php">reserva de Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php">reserva de Veículos</a></h5></td> <td height="42"><h5><a href="buscar_reserva.php?flag=busca">buscar Reserva</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php">cadastrar Cliente</a></h5></td> </table></td> <td width="645"> <?php $host="localhost"; $user="aplicacaoweb"; $password="aplicacaowebhotel"; $database="hotel"; mysql_connect($host,$user,$password); mysql_select_db($database); $consulta_reserva_auto="select idreservaauto from reservaauto where idcliente =".$_GET['idCliente']." and status='a retirar'"; $sql=stripslashes($consulta_reserva_auto);

122 122 $result=mysql_query($sql); if (!$result){ echo("erro na consulta!"); echo("<a href=\"javascript:window.location='index.php'\">página Inicial</a>"); else{ $quantlinhas = mysql_num_rows($result); if ($quantlinhas>0){ $id=mysql_fetch_row($result); while($id){ $client = new SoapClient(" $reservas = ($client- >buscarreservas(1,"senha1",$id[0],"","","a retirar")); if (count($reservas)<=0){ echo("não existem reservas a retirar!"); else{ echo("<table border='1'> <td></td><td><center><h3>reservas de Veículos Localizadas</h3></center></td>"); for ($i=0;$i<count($reservas);$i+=12){ $idreserva=$reservas[$i]; echo("<td>data da Reserva:</td><td>".$reservas[$i+1]."</td>"); $dataretirada=$reservas[$i+2]; echo("<td>data Retirada:</td><td>".$dataRetirada."</td>"); $dataprevdevolucao=$reservas[$i+3]; echo("<td>data Prevista para Devolução:</td><td>".$dataPrevDevolucao."</td>"); echo("<td>data de Devolução:</td><td>".$reservas[$i+4]."</td>"); echo("<td>quilometragem Retirada:</td><td>".$reservas[$i+5]."</td>"); echo("<td>quilometragem Devolução:</td><td>".$reservas[$i+6]."</td>"); echo("<td>status:</td><td>".$reservas[$i+7]."</td>"); echo("<td>valor do Quilometro:</td><td>".$reservas[$i+8]."</td>"); echo("<td>valor da Diária:</td><td>".$reservas[$i+9]."</td>"); echo("<td>identificador do Veículo:</td><td>".$reservas[$i+10]."</td>"); echo("<td>identificador do Cliente:</td><td>".$reservas[$i+11]."</td>"); echo("<td><a href='cancelar_reserva.php?idreserva=".$idreserva."'>cancelar</a></td><td><a href='alterar_reserva.php?idreserva=".$idreserva."&dataretirada=".$dataretirada."&da taprevdevolucao=".$dataprevdevolucao."'>alterar</a></td>");

123 123?> else{ echo("</table>"); $id=mysql_fetch_row($result); echo("nenhuma reserva encontrada!"); </td> </table> </center> </body> </body> </html><!doctype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>untitled Document</title> </head> <body> </body> </html>

124 124 CANCELAR_RESERVA.PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>untitled Document</title> </head> <body> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"><table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php">reserva de Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php">reserva de Veículos</a></h5></td> <td height="42"><h5><a href="buscar_reserva.php?flag=busca">buscar Reserva</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php">cadastrar Cliente</a></h5></td> </table></td> <td width="645">?> <?php $client = new SoapClient(" $cancelar = ($client->cancelarreserva(1,"senha1",$_get['idreserva'])); if (!$cancelar){ echo("não foi possível cancelar a reserva!"); else{ echo("reserva cancelada!");

125 125 </td> </table> </center> </body> </body> </html>

126 126 ALTERAR_RESERVA.PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>untitled Document</title> </head> <body> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"><table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php">reserva de Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php">reserva de Veículos</a></h5></td> <td height="42"><h5><a href="buscar_reserva.php?flag=busca">buscar Reserva</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php">cadastrar Cliente</a></h5></td> </table></td> <td width="645"> <form name="form1" method="post" action="alterar_reserva_ws.php?idreserva=<?php echo($_get['idreserva'])?>"> <label>data de Retirada: </label><input type="text" name="dataretirada" value=<?php echo($_get['dataretirada'])?> /> <label>data Prevista Para Devolução: </label><input type="text" name="dataprevdevolucao" value=<?php echo($_get['dataprevdevolucao'])?> /> <input type="submit" name="submit" value="alterar"/> </form> </td> </table>

127 </center> </body> </body> </html> 127

128 128 ALTERAR_RESERVA_WS.PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>untitled Document</title> </head> <body> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"><table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php">reserva de Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php">reserva de Veículos</a></h5></td> <td height="42"><h5><a href="buscar_reserva.php?flag=busca">buscar Reserva</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php">cadastrar Cliente</a></h5></td> </table></td> <td width="645"> <?php $client = new SoapClient(" $alterar = ($client- >alterarreserva(1,"senha1",$_get['idreserva'],$_post['dataretirada'],$_post['datapre vdevolucao'])); if (!$alterar){ echo("não foi possível alterar a reserva!"); else{ echo("reserva alterada!");

129 129?> </td> </table> </center> </body> </body> </html>

130 130 CADASTRAR_CLIENTE.PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>hotel - Cadastrar Cliente</title> <style type="text/css"> <!--.style1 {font-family: Verdana, Arial, Helvetica, sans-serif --> </style> </head> <body> <center> <table width="791" height="587" border="0"> <td colspan="2"><h3><h2>hotel</h3></td> <td width="136"> <table width="137" height="222" border="0"> <td height="48"><h5><a href="reserva_hospedagem.php?flag=hospedagem">reservar Hospedagem</a></h5></td> <td height="43"><h5><a href="reserva_veiculo.php?flag=veiculo">reservar Veículo</a></h5></td> <td height="42"><h5><a href="buscar_reserva_apto.php?flag=busca">buscar Reserva Apto</a></h5></td> <td height="42"><h5><a href="buscar_reserva_veiculo.php?flag=busca">buscar Reserva Veiculo</a></h5></td> <td height="42"><h5><a href="cadastrar_cliente.php?flag=cliente">cadastrar Cliente</a></h5></td> </table> <td width="645"> <h2>cadastro DE CLIENTE</h2><br><br> <form id="form1" name="form1" method="post" action=""> <table>

131 131 <td>cpf:</td><td><input type="text" name="cpf" tabindex="0" /></td> <td>nome:</td><td><input type="text" name="nome" tabindex="1" /></td> <td> </td><td><input type="text" name=" " tabindex="3" /></td> <td>endereço:</td><td><input type="text" name="endereco" tabindex="4" /></td> <td>complemento:</td><td><input type="text" name="complemento" tabindex="5" /></td> <td>cidade:</td><td><input type="text" name="cidade" tabindex="6" /></td> <td>uf:</td><td><input type="text" name="uf" tabindex="7" /></td> <td>cep:</td><td><input type="text" name="cep" tabindex="8" /></td> <td>bairro:</td><td><input type="text" name="bairro" tabindex="9" /></td> <td>telefone:</td><td><input type="text" name="telefone" tabindex="10" /></td> <td> </td><td><input type="submit" name="submit" value="confirmar" tabindex="11" /></td> </table> </form> </td> </table> </center> </body> </html>

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares [email protected] Aula 13 Web Services Web Services

Leia mais

UNIVERSIDADE. Sistemas Distribuídos

UNIVERSIDADE. Sistemas Distribuídos UNIVERSIDADE Sistemas Distribuídos Ciência da Computação Prof. Jesus José de Oliveira Neto Web Services Web Services Existem diferentes tipos de comunicação em um sistema distribuído: Sockets Invocação

Leia mais

3 Serviços na Web (Web services)

3 Serviços na Web (Web services) 3 Serviços na Web (Web services) 3.1. Visão Geral Com base na definição do Word Wide Web Consortium (W3C), web services são aplicações autocontidas, que possuem interface baseadas em XML e que descrevem

Leia mais

Serviços Web: Arquitetura

Serviços Web: Arquitetura Sistemas Distribuídos Mauro Lopes Carvalho Silva Professor EBTT DAI Departamento de Informática Campus Monte Castelo Instituto Federal de Educação Ciência e Tecnologia do Maranhão Objetivos Nesta aula

Leia mais

Invocação de Métodos Remotos

Invocação de Métodos Remotos Invocação de Métodos Remotos Java RMI (Remote Method Invocation) Tópicos Tecnologia RMI Introdução Modelo de camadas do RMI Arquitetura Fluxo de operação do RMI Passos para implementação Estudo de caso

Leia mais

Introdução a Web Services

Introdução a Web Services Introdução a Web Services Mário Meireles Teixeira DEINF/UFMA O que é um Web Service? Web Service / Serviço Web É uma aplicação, identificada por um URI, cujas interfaces podem ser definidas, descritas

Leia mais

Web Services. Integração de aplicações na Web. Sistemas Distribuídos

Web Services. Integração de aplicações na Web. Sistemas Distribuídos Web Services Integração de aplicações na Web Integração de Aplicações na Web Interoperação entre ambientes heterogêneos desafios diversidade de componentes: EJB, CORBA, DCOM... diversidade de linguagens:

Leia mais

Universidade Federal de Juiz de Fora Ciência da Computação Sistemas Distribuídos Professor Ciro Barbosa

Universidade Federal de Juiz de Fora Ciência da Computação Sistemas Distribuídos Professor Ciro Barbosa Universidade Federal de Juiz de Fora Ciência da Computação Sistemas Distribuídos Professor Ciro Barbosa Web Service Plínio Antunes Garcia Sam Ould Mohamed el Hacen Sumário Introdução conceitual O Web Service

Leia mais

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva 1. O que são Serviços Web (Web Services)? Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva A ideia central dos Web Services parte da antiga necessidade

Leia mais

3 SCS: Sistema de Componentes de Software

3 SCS: Sistema de Componentes de Software 3 SCS: Sistema de Componentes de Software O mecanismo para acompanhamento das chamadas remotas se baseia em informações coletadas durante a execução da aplicação. Para a coleta dessas informações é necessário

Leia mais

UNIVERSIDADE. Sistemas Distribuídos

UNIVERSIDADE. Sistemas Distribuídos UNIVERSIDADE Sistemas Distribuídos Ciência da Computação Prof. Jesus José de Oliveira Neto Web Services (continuação) WSDL - Web Service Definition Language WSDL permite descrever o serviço que será oferecido

Leia mais

Programação Cliente em Sistemas Web

Programação Cliente em Sistemas Web Programação Cliente em Sistemas Web WEBSERVICES Cap 18. - Sistemas distribuídos e serviços web em Deitel, H.M, Sistemas Operacionais, 3 ª edição, Pearson Prentice Hall, 2005 Fonte: Rodrigo Rebouças de

Leia mais

INTEGRAÇÃO DE APLICAÇÕES UTILIZANDO WEB SERVICE 1. Kellen Kristine Perazzoli 2 ; Manassés Ribeiro 3

INTEGRAÇÃO DE APLICAÇÕES UTILIZANDO WEB SERVICE 1. Kellen Kristine Perazzoli 2 ; Manassés Ribeiro 3 INTEGRAÇÃO DE APLICAÇÕES UTILIZANDO WEB SERVICE 1 Kellen Kristine Perazzoli 2 ; Manassés Ribeiro 3 INTRODUÇÃO Atualmente empresas de diversos portes estão encontrando nos web services soluções para seus

Leia mais

CONCEITOS INICIAIS. Agenda A diferença entre páginas Web, Home Page e apresentação Web;

CONCEITOS INICIAIS. Agenda A diferença entre páginas Web, Home Page e apresentação Web; CONCEITOS INICIAIS Agenda A diferença entre páginas Web, Home Page e apresentação Web; O que é necessário para se criar páginas para a Web; Navegadores; O que é site, Host, Provedor e Servidor Web; Protocolos.

Leia mais

Adriano Reine Bueno Rafael Barros Silva

Adriano Reine Bueno Rafael Barros Silva Adriano Reine Bueno Rafael Barros Silva Introdução RMI Tecnologias Semelhantes Arquitetura RMI Funcionamento Serialização dos dados Criando Aplicações Distribuídas com RMI Segurança Exemplo prático Referências

Leia mais

2 Conceitos relativos a Web services e sua composição

2 Conceitos relativos a Web services e sua composição 15 2 Conceitos relativos a Web services e sua composição A necessidade de flexibilidade na arquitetura das aplicações levou ao modelo orientado a objetos, onde os processos de negócios podem ser representados

Leia mais

Kassius Vargas Prestes

Kassius Vargas Prestes Kassius Vargas Prestes Agenda 1. Introdução Web Services 2. XML, SOAP 3. Apache Tomcat 4. Axis 5. Instalação Tomcat e Axis 6. Criação de um Web Service 7. Criação de um cliente Baixar http://www.inf.ufrgs.br/~kvprestes/webservices/

Leia mais

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve - 981648-9

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve - 981648-9 Laboratório de Computação VI JAVA IDL Fabricio Aparecido Breve - 981648-9 O que é Java IDL? Java IDL é uma tecnologia para objetos distribuídos, ou seja, objetos em diferentes plataformas interagindo através

Leia mais

Serviços Web: Introdução

Serviços Web: Introdução Sistemas Distribuídos Mauro Lopes Carvalho Silva Professor EBTT DAI Departamento de Informática Campus Monte Castelo Instituto Federal de Educação Ciência e Tecnologia do Maranhão Objetivos Nesta aula

Leia mais

Web Services. (Introdução)

Web Services. (Introdução) Web Services (Introdução) Agenda Introdução SOA (Service Oriented Architecture) Web Services Arquitetura XML SOAP WSDL UDDI Conclusão Introdução Comunicação distribuída Estratégias que permitem a comunicação

Leia mais

Intranets. FERNANDO ALBUQUERQUE Departamento de Ciência da Computação Universidade de Brasília 1.INTRODUÇÃO

Intranets. FERNANDO ALBUQUERQUE Departamento de Ciência da Computação Universidade de Brasília 1.INTRODUÇÃO Intranets FERNANDO ALBUQUERQUE Departamento de Ciência da Computação Universidade de Brasília 1.INTRODUÇÃO As intranets são redes internas às organizações que usam as tecnologias utilizadas na rede mundial

Leia mais

Integração de sistemas utilizando Web Services do tipo REST

Integração de sistemas utilizando Web Services do tipo REST Integração de sistemas utilizando Web Services do tipo REST Jhonatan Wilson Aparecido Garbo, Jaime Willian Dias Universidade Paranaense (Unipar) Paranavaí PR Brasil [email protected] [email protected]

Leia mais

Introdução ao Modelos de Duas Camadas Cliente Servidor

Introdução ao Modelos de Duas Camadas Cliente Servidor Introdução ao Modelos de Duas Camadas Cliente Servidor Desenvolvimento de Sistemas Cliente Servidor Prof. Esp. MBA Heuber G. F. Lima Aula 1 Ciclo de Vida Clássico Aonde estamos? Page 2 Análise O que fizemos

Leia mais

Web services. Um web service é qualquer software que está disponível através da Internet através de uma interface XML.

Web services. Um web service é qualquer software que está disponível através da Internet através de uma interface XML. Web services Um web service é qualquer software que está disponível através da Internet através de uma interface XML. XML é utilizado para codificar toda a comunicação de/para um web service. Web services

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Faculdades SENAC Análise e Desenvolvimento de Sistemas 28 de abril de 2010 Principais suportes de Java RMI (Remote Method Invocation), da Sun Microsystems DCOM (Distributed Component Object Model), da

Leia mais

SISTEMAS DISTRIBUIDOS

SISTEMAS DISTRIBUIDOS 1 2 Caracterização de Sistemas Distribuídos: Os sistemas distribuídos estão em toda parte. A Internet permite que usuários de todo o mundo acessem seus serviços onde quer que possam estar. Cada organização

Leia mais

www.f2b.com.br 18/04/2006 Micropagamento F2b Web Services Web rev 00

www.f2b.com.br 18/04/2006 Micropagamento F2b Web Services Web rev 00 www.f2b.com.br 18/04/2006 Micropagamento F2b Web Services Web rev 00 Controle de Revisões Micropagamento F2b Web Services/Web 18/04/2006 Revisão Data Descrição 00 17/04/2006 Emissão inicial. www.f2b.com.br

Leia mais

Estudo comparativo das API s JAX-RPC e JAXM na construção de Web Services

Estudo comparativo das API s JAX-RPC e JAXM na construção de Web Services Estudo comparativo das API s JAX-RPC e JAXM na construção de Web Services Danielle Corrêa Ribeiro 1, Elizabeth Mª Martinho da Silva 1, Francisco A. S. Júnior 1, Thatiane de Oliveira Rosa 1, Madianita Bogo

Leia mais

PROGRAMAÇÃO SERVIDOR WEBSERVICES EM SISTEMAS WEB. Prof. Dr. Daniel Caetano 2012-1

PROGRAMAÇÃO SERVIDOR WEBSERVICES EM SISTEMAS WEB. Prof. Dr. Daniel Caetano 2012-1 PROGRAMAÇÃO SERVIDOR EM SISTEMAS WEB WEBSERVICES Prof. Dr. Daniel Caetano 2012-1 Objetivos Compreender o que é um WebService e sua utilidade Compreender a lógica de funcionamento de um WebService Capacitar

Leia mais

CAPÍTULO 2. Este capítulo tratará :

CAPÍTULO 2. Este capítulo tratará : 1ª PARTE CAPÍTULO 2 Este capítulo tratará : 1. O que é necessário para se criar páginas para a Web. 2. A diferença entre páginas Web, Home Page e apresentação Web 3. Navegadores 4. O que é site, Host,

Leia mais

Sistemas Distribuídos Arquiteturas Middlewares

Sistemas Distribuídos Arquiteturas Middlewares Sistemas Distribuídos Arquiteturas s Arquitetura Arquitetura de um sistema é sua estrutura em termos dos componentes e seus relacionamentos Objetivo: garantir que a estrutura satisfará as demandas presentes

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos LICENCIATURA EM COMPUTAÇÃO Prof. Adriano Avelar Site: www.adrianoavelar.com Email: [email protected] Mecanismos de Comunicação Protocolos de Aplicação Mecanismos de comunicação

Leia mais

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares [email protected] Aula 5 Servidores de Aplicação

Leia mais

Princípios de Sistemas Distribuídos. Tecnologias utilizadas em sistemas distribuídos Aula 5

Princípios de Sistemas Distribuídos. Tecnologias utilizadas em sistemas distribuídos Aula 5 Princípios de Sistemas Distribuídos Tecnologias utilizadas em sistemas distribuídos Aula 5 Conceitos de comunicação entre processos Interprocess Communication (IPC) Sistemas distribuídos são construídos

Leia mais

Noções de. Microsoft SQL Server. Microsoft SQL Server

Noções de. Microsoft SQL Server. Microsoft SQL Server Noções de 1 Considerações Iniciais Basicamente existem dois tipos de usuários do SQL Server: Implementadores Administradores 2 1 Implementadores Utilizam o SQL Server para criar e alterar base de dados

Leia mais

Web Services. Tópicos. Motivação. Tecnologias Web Service. Passo a passo Business Web Conclusão. Integração de aplicações SOAP, WSDL, UDDI, WSFL

Web Services. Tópicos. Motivação. Tecnologias Web Service. Passo a passo Business Web Conclusão. Integração de aplicações SOAP, WSDL, UDDI, WSFL Web Services Antonio Dirceu [email protected] Tópicos Motivação Integração de aplicações Tecnologias Web Service SOAP, WSDL, UDDI, WSFL Passo a passo Business Web Conclusão Motivação Integração de Aplicações

Leia mais

Web Services. Autor: Rômulo Rosa Furtado

Web Services. Autor: Rômulo Rosa Furtado Web Services Autor: Rômulo Rosa Furtado Sumário O que é um Web Service. Qual a finalidade de um Web Service. Como funciona o serviço. Motivação para o uso. Como construir um. Referências. Seção: O que

Leia mais

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução Chamadas Remotas de Chamada Remota de Procedimento (RPC) ou Chamada de Função ou Chamada de Subrotina Método de transferência de controle de parte de um processo para outra parte Procedimentos => permite

Leia mais

1 http://www.google.com

1 http://www.google.com 1 Introdução A computação em grade se caracteriza pelo uso de recursos computacionais distribuídos em várias redes. Os diversos nós contribuem com capacidade de processamento, armazenamento de dados ou

Leia mais

Service Oriented Architecture SOA

Service Oriented Architecture SOA Service Oriented Architecture SOA Arquitetura orientada aos serviços Definição: Arquitetura de sistemas distribuídos em que a funcionalidade é disponibilizada sob a forma de serviços (bem definidos e independentes)

Leia mais

Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2

Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2 Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2 Aula 2 Computação em Nuvem Desafios e Oportunidades A Computação em Nuvem

Leia mais

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA RESUMO Ricardo Della Libera Marzochi A introdução ao Service Component Architecture (SCA) diz respeito ao estudo dos principais fundamentos

Leia mais

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio 32 3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio Este capítulo apresenta o framework orientado a aspectos para monitoramento e análise de processos de negócio

Leia mais

SOA Introdução. SOA Visão Departamental das Organizações

SOA Introdução. SOA Visão Departamental das Organizações 1 Introdução A Organização é a forma pela qual nós coordenamos nossos recursos de todos os tipos para realizar o trabalho que nos propusemos a fazer. A estrutura de nossas organizações manteve-se basicamente

Leia mais

Objetos Distribuídos - Programação Distribuída Orientado a Objetos. Luiz Affonso Guedes

Objetos Distribuídos - Programação Distribuída Orientado a Objetos. Luiz Affonso Guedes Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes Introdução Conceitos básicos programação distribuída + programação orientada a objetos = Objetos distribuídos Motivação

Leia mais

INFORMÁTICA FUNDAMENTOS DE INTERNET. Prof. Marcondes Ribeiro Lima

INFORMÁTICA FUNDAMENTOS DE INTERNET. Prof. Marcondes Ribeiro Lima INFORMÁTICA FUNDAMENTOS DE INTERNET Prof. Marcondes Ribeiro Lima Fundamentos de Internet O que é internet? Nome dado a rede mundial de computadores, na verdade a reunião de milhares de redes conectadas

Leia mais

A Figura... mostra a arquitetura técnica de serviços na Web

A Figura... mostra a arquitetura técnica de serviços na Web Este capítulo proporciona uma visão técnica simplificada de um sistema UDDI. A arquitetura técnica de UDDI consiste de três partes: O Modelo de Informação UDDI Um esquema XML para descrever negócios e

Leia mais

MÓDULO 7 Modelo OSI. 7.1 Serviços Versus Protocolos

MÓDULO 7 Modelo OSI. 7.1 Serviços Versus Protocolos MÓDULO 7 Modelo OSI A maioria das redes são organizadas como pilhas ou níveis de camadas, umas sobre as outras, sendo feito com o intuito de reduzir a complexidade do projeto da rede. O objetivo de cada

Leia mais

WSDL e UDDI. Pedro Miguel Martins Nunes WSDL. WSDL Exemplo prático Resumo UDDI. Serviço UDDI Estruturas de dados UDDI e WSDL API Resumo

WSDL e UDDI. Pedro Miguel Martins Nunes WSDL. WSDL Exemplo prático Resumo UDDI. Serviço UDDI Estruturas de dados UDDI e WSDL API Resumo e Serviço e e Tecnologias de Middleware 06/07 Curso de Especialização em Informática Departamento de Informática Faculdade de Ciências da Universidade de Lisboa 27.10.2006 e Serviço e 1 2 Serviço e 3 e...o

Leia mais

RMI: Uma Visão Conceitual

RMI: Uma Visão Conceitual RMI: Uma Visão Conceitual Márcio Castro, Mateus Raeder e Thiago Nunes 11 de abril de 2007 Resumo Invocação de Método Remoto (Remote Method Invocation - RMI) trata-se de uma abordagem Java para disponibilizar

Leia mais

Java 2 Standard Edition. Fundamentos de. Objetos Remotos. Helder da Rocha www.argonavis.com.br

Java 2 Standard Edition. Fundamentos de. Objetos Remotos. Helder da Rocha www.argonavis.com.br Java 2 Standard Edition Fundamentos de Objetos Remotos Helder da Rocha www.argonavis.com.br 1 Sobre este módulo Este módulo tem como objetivo dar uma visão geral, porém prática, da criação e uso de objetos

Leia mais

AP_ Conta Aplicativo para digitação e envio de contas médicas no padrão TISS

AP_ Conta Aplicativo para digitação e envio de contas médicas no padrão TISS AP_ Conta Aplicativo para digitação e envio de contas médicas no padrão TISS Manual de Instalação Tempro Software StavTISS Sumário 1. INTRODUÇÃO... 2 2. REQUISITOS DO SISTEMA... 3 3. INSTALAÇÃO... 4 4.

Leia mais

Roteiro 2 Conceitos Gerais

Roteiro 2 Conceitos Gerais Roteiro 2 Conceitos Gerais Objetivos: UC Projeto de Banco de Dados Explorar conceitos gerais de bancos de dados; o Arquitetura de bancos de dados: esquemas, categorias de modelos de dados, linguagens e

Leia mais

IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET

IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET 1 IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET Daniel da Silva Carla E. de Castro Franco Diogo Florenzano Avelino [email protected]

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

Trabalho de Sistemas Distribuídos

Trabalho de Sistemas Distribuídos Cássio de Olivera Ferraz Trabalho de Sistemas Distribuídos Petrópolis 2015, v-1.0 Cássio de Olivera Ferraz Trabalho de Sistemas Distribuídos Trabalho sobre sistemas distribuídos e suas tecnologias. Universidade

Leia mais

PROGRAMA DE MBA em Gestão e Engenharia do Produto. O Produto Internet e suas Aplicações

PROGRAMA DE MBA em Gestão e Engenharia do Produto. O Produto Internet e suas Aplicações Universidade de São Paulo Escola Politécnica Programa de Educação Continuada em Engenharia PROGRAMA DE MBA em Gestão e Engenharia do Produto O Produto Internet e suas Aplicações Tecnologias de Informação

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos LICENCIATURA EM COMPUTAÇÃO Prof. Adriano Avelar Site: www.adrianoavelar.com Email: [email protected] Relembrando... Mecanismos de Comunicação Middleware Cenário em uma rede Local

Leia mais

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert:

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert: BRAlarmExpert Software para Gerenciamento de Alarmes A TriSolutions conta com um produto diferenciado para gerenciamento de alarmes que é totalmente flexível e amigável. O software BRAlarmExpert é uma

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Soquetes Um soquete é formado por um endereço IP concatenado com um número de porta. Em geral, os soquetes utilizam uma arquitetura cliente-servidor. O servidor espera por pedidos

Leia mais

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0 DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0 Índice 1 - Objetivo 2 - Descrição do ambiente 2.1. Tecnologias utilizadas 2.2. Estrutura de pastas 2.3. Bibliotecas já incluídas 3 - Características gerais 4 - Criando

Leia mais

Introdução à Linguagem Java

Introdução à Linguagem Java Introdução à Linguagem Java Histórico: Início da década de 90. Pequeno grupo de projetos da Sun Microsystems, denominado Green. Criar uma nova geração de computadores portáveis, capazes de se comunicar

Leia mais

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB) Uma Introdução à Arquitetura Francisco C. R. Reverbel 1 Copyright 1998-2006 Francisco Reverbel O Object Request Broker (ORB) Via de comunicação entre objetos (object bus), na arquitetura do OMG Definido

Leia mais

Padrões Arquiteturais. Sistemas Distribuídos: Broker

Padrões Arquiteturais. Sistemas Distribuídos: Broker Padrões Arquiteturais Sistemas Distribuídos: Broker Sistemas Distribuídos Tendências: Sistemas Comp. com múltiplas CPUs Redes locais com centenas de hospedeiros Benefícios Economia Desempenho e escalabilidade

Leia mais

Entendendo como funciona o NAT

Entendendo como funciona o NAT Entendendo como funciona o NAT Vamos inicialmente entender exatamente qual a função do NAT e em que situações ele é indicado. O NAT surgiu como uma alternativa real para o problema de falta de endereços

Leia mais

Sistemas Distribuídos Comunicação entre Processos em Sistemas Distribuídos: Middleware de comunicação Aula II Prof. Rosemary Silveira F. Melo Comunicação em sistemas distribuídos é um ponto fundamental

Leia mais

Grupo I [7v] 1. [1,0] Apresente o conteúdo do IDL relativo a este programa. Assuma PROGRAM=62015 e VERSION=1.

Grupo I [7v] 1. [1,0] Apresente o conteúdo do IDL relativo a este programa. Assuma PROGRAM=62015 e VERSION=1. Número: Nome: Página 1 de 6 LEIC/LETI, 2014/15, Repescagem do 1º Teste de Sistemas Distribuídos 30 de Junho de 2015 Responda no enunciado, apenas no espaço fornecido. Identifique todas as folhas. Duração:

Leia mais

Bancos de dados distribuídos Prof. Tiago Eugenio de Melo [email protected]. http://www.tiagodemelo.info

Bancos de dados distribuídos Prof. Tiago Eugenio de Melo tiagodemelo@gmail.com. http://www.tiagodemelo.info Bancos de dados distribuídos Prof. Tiago Eugenio de Melo [email protected] Última atualização: 20.03.2013 Conceitos Banco de dados distribuídos pode ser entendido como uma coleção de múltiplos bds

Leia mais

Histórico da Revisão. Versão Descrição Autor. 1.0 Versão Inicial

Histórico da Revisão. Versão Descrição Autor. 1.0 Versão Inicial 1 of 14 27/01/2014 17:33 Sistema de Paginação de Esportes Universitários Documento de Arquitetura de Software Versão 1.0 Histórico da Revisão Data 30 de novembro de 1999 Versão Descrição Autor 1.0 Versão

Leia mais

Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS)

Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS) Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS) Definição Geral: Disciplina de Compiladores Prof. Jorge Bidarra (UNIOESTE) A especificação de requisitos tem como objetivo

Leia mais

Introdução Serviços Web WSDL SOAP UDDI Ferramentas. Serviços Web. (Web Services) Emerson Ribeiro de Mello

Introdução Serviços Web WSDL SOAP UDDI Ferramentas. Serviços Web. (Web Services) Emerson Ribeiro de Mello 1/39 Serviços Web (Web Services) Emerson Ribeiro de Mello Departamento de Automação e Sistemas Universidade Federal de Santa Catarina 22 de Maio de 2007 2/39 Arquitetura Orientada a Serviços Arquitetura

Leia mais

Um Processo para Desenvolvimento de Aplicações Web Baseado em Serviços. Autores: Fábio Zaupa, Itana Gimenes, Don Cowan, Paulo Alencar e Carlos Lucena

Um Processo para Desenvolvimento de Aplicações Web Baseado em Serviços. Autores: Fábio Zaupa, Itana Gimenes, Don Cowan, Paulo Alencar e Carlos Lucena Um Processo para Desenvolvimento de Aplicações Web Baseado em Serviços Autores: Fábio Zaupa, Itana Gimenes, Don Cowan, Paulo Alencar e Carlos Lucena Tópicos Motivação e Objetivos LP e SOA Processo ADESE

Leia mais

INE5380 - Sistemas Distribuídos

INE5380 - Sistemas Distribuídos INE5380 - Sistemas Distribuídos Object Request Broker e CORBA Por: Léo Willian Kölln - 0513227-4 Novembro de 2006 ORB Object Request Broker ORB aqui será tratado como um Middleware que permite a construção

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos 11 Objetivos Este capítulo apresenta uma introdução aos sistemas distribuídos em geral Arquiteturas de cliente servidor Características das arquiteturas de 2 e 3 camadas Ambiente

Leia mais

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd.

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd. Apresentação Este curso tem como objetivo, oferecer uma noção geral sobre a construção de sistemas de banco de dados. Para isto, é necessário estudar modelos para a construção de projetos lógicos de bancos

Leia mais

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064 Sistemas Distribuídos Professora: Ana Paula Couto DCC 064 Comunicação- Protocolos, Tipos, RPC Capítulo 4 Agenda Protocolos em Camadas Pilhas de Protocolos em Sistemas Distribuídos Tipos de Comunicação

Leia mais

Um Driver NDIS Para Interceptação de Datagramas IP

Um Driver NDIS Para Interceptação de Datagramas IP Um Driver NDIS Para Interceptação de Datagramas IP Paulo Fernando da Silva [email protected] Sérgio Stringari [email protected] Resumo. Este artigo apresenta o desenvolvimento de um driver NDIS 1 para

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Marcelo Lobosco DCC/UFJF Comunicação em Sistemas Distribuídos Aula 06 Agenda Modelo Cliente-Servidor (cont.) Invocação Remota de Método (Remote Method Invocation RMI) Visão Geral

Leia mais

O que é o Virto ERP? Onde sua empresa quer chegar? Apresentação. Modelo de funcionamento

O que é o Virto ERP? Onde sua empresa quer chegar? Apresentação. Modelo de funcionamento HOME O QUE É TOUR MÓDULOS POR QUE SOMOS DIFERENTES METODOLOGIA CLIENTES DÚVIDAS PREÇOS FALE CONOSCO Suporte Sou Cliente Onde sua empresa quer chegar? Sistemas de gestão precisam ajudar sua empresa a atingir

Leia mais

Rotina de Discovery e Inventário

Rotina de Discovery e Inventário 16/08/2013 Rotina de Discovery e Inventário Fornece orientações necessárias para testar a rotina de Discovery e Inventário. Versão 1.0 01/12/2014 Visão Resumida Data Criação 01/12/2014 Versão Documento

Leia mais

Sumário 1. SOBRE O NFGoiana DESKTOP... 3 1.1. Apresentação... 3 1.2. Informações do sistema... 3 1.3. Acessando o NFGoiana Desktop... 3 1.4.

Sumário 1. SOBRE O NFGoiana DESKTOP... 3 1.1. Apresentação... 3 1.2. Informações do sistema... 3 1.3. Acessando o NFGoiana Desktop... 3 1.4. 1 Sumário 1. SOBRE O NFGoiana DESKTOP... 3 1.1. Apresentação... 3 1.2. Informações do sistema... 3 1.3. Acessando o NFGoiana Desktop... 3 1.4. Interface do sistema... 4 1.4.1. Janela Principal... 4 1.5.

Leia mais

Introdução a Banco de Dados Aula 03. Prof. Silvestri www.eduardosilvestri.com.br

Introdução a Banco de Dados Aula 03. Prof. Silvestri www.eduardosilvestri.com.br Introdução a Banco de Dados Aula 03 Prof. Silvestri www.eduardosilvestri.com.br Arquiteturas de Banco de Dados Arquiteturas de BD - Introdução Atualmente, devem-se considerar alguns aspectos relevantes

Leia mais

SMTP, POP, IMAP, DHCP e SNMP. Professor Leonardo Larback

SMTP, POP, IMAP, DHCP e SNMP. Professor Leonardo Larback SMTP, POP, IMAP, DHCP e SNMP Professor Leonardo Larback Protocolo SMTP O SMTP (Simple Mail Transfer Protocol) é utilizado no sistema de correio eletrônico da Internet. Utiliza o protocolo TCP na camada

Leia mais

Desenvolvimento de Aplicações Web

Desenvolvimento de Aplicações Web Desenvolvimento de Aplicações Web André Tavares da Silva [email protected] Método de Avaliação Serão realizadas duas provas teóricas e dois trabalhos práticos. MF = 0,1*E + 0,2*P 1 + 0,2*T 1 + 0,2*P

Leia mais

Protocolos de Internet (família TCP/IP e WWW) Primeiro Técnico. Prof. Cesar

Protocolos de Internet (família TCP/IP e WWW) Primeiro Técnico. Prof. Cesar Primeiro Técnico Protocolos de Internet (família TCP/IP e WWW) Prof. Cesar 1 TCP - Transmission Control Protocol Esse protocolo tem como principal objetivo realizar a comunicação entre aplicações de dois

Leia mais

Um pouco do Java. Prof. Eduardo

Um pouco do Java. Prof. Eduardo Um pouco do Java Prof. Eduardo Introdução A tecnologia JAVA é composta pela linguagem de programação JAVA e pela plataforma de desenvolvimento JAVA. Os programas são escritos em arquivos-texto com a extensão.java.

Leia mais

Programando em PHP. Conceitos Básicos

Programando em PHP. Conceitos Básicos Programando em PHP www.guilhermepontes.eti.br [email protected] Conceitos Básicos Todo o escopo deste estudo estará voltado para a criação de sites com o uso dos diversos recursos de programação web

Leia mais

FIREWALL. Prof. Fabio de Jesus Souza. [email protected]. Professor Fabio Souza

FIREWALL. Prof. Fabio de Jesus Souza. fabiojsouza@gmail.com. Professor Fabio Souza FIREWALL Prof. Fabio de Jesus Souza [email protected] Professor Fabio Souza O que são Firewalls? Os firewalls são sistemas de segurança que podem ser baseados em: um único elemento de hardware; um

Leia mais

Invocação de Métodos Remotos RMI (Remote Method Invocation)

Invocação de Métodos Remotos RMI (Remote Method Invocation) Invocação de Métodos Remotos RMI (Remote Method Invocation) Programação com Objetos Distribuídos Um sistema de objetos distribuídos permite a operação com objetos remotos A partir de uma aplicação cliente

Leia mais

QUESTINAMENTOS AO EDITAL DE CONCORRÊNCIA 01/2013

QUESTINAMENTOS AO EDITAL DE CONCORRÊNCIA 01/2013 QUESTINAMENTOS AO EDITAL DE CONCORRÊNCIA 01/2013 Prezados Senhores da comissão de licitação da UENF, seguem alguns questionamentos acerca do edital de concorrência 01/2013 para esclarecimentos: 1. ANEXO

Leia mais

2 Trabalhos Relacionados

2 Trabalhos Relacionados 2 Trabalhos Relacionados Este capítulo apresenta trabalhos relacionados ao problema da travessia de firewalls/nat por aplicações CORBA, alguns dos quais tiveram grande influência no desenvolvimento desta

Leia mais

Documento de Análise e Projeto VideoSystem

Documento de Análise e Projeto VideoSystem Documento de Análise e Projeto VideoSystem Versão Data Versão Descrição Autor 20/10/2009 1.0 21/10/2009 1.0 05/11/2009 1.1 Definição inicial do documento de análise e projeto Revisão do documento

Leia mais