A utilização do JSWDP para construção de Web Services Fabiana Ferreira Cardoso1, Francisco A. S. Júnior1, Madianita Bogo1 1 Centro de Tecnologia da Informação – Centro Universitário Luterano de Palmas (CEULP/ULBRA) Caixa Postal 160 – 77.954-070 – Palmas – TO – Brazil {fabianac,franciscojr,mbogo}@ulbra-to.br Abstract. This paper presents a search about JWSDP and presents this package use in Web Services developer, being that for this it was carried through and is presented a search about the main concepts related to the Web Services. To show the JWSDP functionality, was developed a Java application, that use the API Jax-RPC. The server program offers services that will can access by clients rograms developed. Resumo. Este artigo apresenta um estudo sobre o JWSDP e descreve a utilização desse pacote na construção de Web Services, sendo que para isso foi realizado e é apresentado um estudo sobre os principais conceitos relacionados aos mesmos. Para mostrar a funcionalidade do JWSDP, foi desenvolvido um aplicativo em Java que utilizou a API JAX-RPC. O programa servidor oferece serviços que poderão ser acessados. 1. Introdução As aplicações distribuídas são programas que podem ser executados em diversos tipos de microcomputadores, realizando a troca de informações a partir de uma rede de comunicação como por exemplo, a Internet. Atualmente, existem aplicações distribuídas implementadas em soluções não adaptáveis a diversas necessidades, como integração entre sistemas, comunicação entre empresas. Este fato torna a compatibilidade e integração entre os diversos sistemas operacionais existentes uma ação complexa. Assim, para que exista o compartilhamento de informações entre ambientes heterogêneos é importante utilizar padrões que especifiquem as formas de comunicação. Uma das soluções é a utilização de mecanismos de RPC (Remote Procedure Call), que definem um conjunto de regras utilizadas na construção de aplicações distribuídas, permitindo que as funções sejam chamadas remotamente, de forma transparente ao usuário/desenvolvedor (TANENBAUM, 1992). Existem vários mecanismos de chamada a procedimento remoto, dentre eles podem ser citados: CORBA, RMI, Web Services, entre outros. O CORBA (Common Object Request Broker Architecture) é um middleware, ou seja, é uma camada de software intermediária que permite a comunicação entre aplicações cliente-servidor heterogêneas, escritas em diferentes linguagens que se comunicam VI Encontro de Estudantes de Informática do Estado do Tocantins – ENCOINFO 2004 – 4 e 5 de novembro de 2004 CEULP/ULBRA – Curso de Sistemas de Informação – Palmas – TO usando uma IDL (Interface Definition Language – Linguagem de Definição de Interface) e um ORB (Object Request Broker) (SILBERSCHATZ, 2000). A Invocação de Método Remoto - RMI (Remote Method Invocation) - é um mecanismo de RPC orientado a objetos, desenvolvido pelo JAVA que realiza a chamada de um método que está localizado em uma JVM (Java Virtual Machine) remota, a partir da utilização de uma mesma sintaxe de invocação de métodos na máquina virtual local (SILBERSCHATZ, 2000). Já o Web Service é uma tecnologia recente para a comunicação entre aplicações distribuídas, que permite o oferecimento de serviços interativos na Web através da troca de informações e mensagens em formato XML, utilizando o HTTP na transferência dos dados. Os serviços disponíveis pelos Web Services podem ser acessados por aplicações distintas, por meio de conexões abertas, independentes de plataforma tecnológica ou linguagens de programação. Essa interoperabilidade se deve aos padrões em que se baseiam os Web Services: XML, SOAP, UDDI, WSDL e HTTP (HENDRICKS, 2002). Assim, para (BASIURA, 2003) os Web Services tentam resolver o mesmo problema que o CORBA ou RMI, ou seja, como fazer chamadas a objetos remotos. Para isto utiliza o protocolo de acesso a objeto simples (SOAP) que é baseado em protocolos Internet como o HTTP enquanto que o CORBA é baseado em um formato denominado Common Data Representation (CDR) e o RMI que é exclusivo da plataforma Java. Quando se utiliza uma plataforma ampla e heterogênea, como a Internet, é interessante a utilização de mecanismos Web Services, pois foram projetados para disponibilizar serviços interoperáveis. Assim, para que os Web Services possam ser criados, existem vários pacotes de desenvolvimento, dentre eles, pode ser citado o JWSDP (Java Web Service Developer Pack – Pacote para Desenvolvimento de Web Services em Java), que oferece um conjunto de soluções para construir, testar e publicar aplicações distribuídas utilizando os conceitos do XML (JWSDP,2003). 2. Web Services A tecnologia Web Services é voltada para o desenvolvimento de aplicações distribuídas que se comunicam através do protocolo de transporte HTTP, baseada nos seguintes padrões: XML - utilizada para descrever e estruturar informações; SOAP - protocolo para vínculo de aplicações a serviços web; UDDI - padrão para publicação ou localização de serviços web; WSDL - padrão que usa XML para descrever serviços Web; e HTTP – protocolo que realiza o transporte das mensagens, no formato XML entre as aplicações (HENDRICKS, 2002), conforme pode ser verificado na figura 1. Publicação e Localização de serviços - UDDI Descrição de serviços - WSDL Troca de Mensagens entre Web Services - SOAP VI Encontro de Estudantes de Informática do Estado do Tocantins – ENCOINFO 2004 – 4 e 5 de novembro de 2004 Codificação de Dados XML, XML Schema CEULP/ULBRA – Curso de Sistemas de Informação – Palmas – -TO Rede de Transporte – HTTP, SMTP e outros Figura 1 – Pilha básica de um Web Service baseada em (BASIURA, 2003). Os Web Services são criados segundo o modelo genérico que é baseado nas interações entre papéis e operações, também conhecido como arquitetura e integração de Web Service, apresentado na figura 2. Registro do Serviço Publicar (UDDI) pesquisar Provedor de Serviços Consumidor de Serviços Vincular (SOAP-HTTP) Figura 2- Modelo genérico de um Web Service modificado de ( HENDRICKS, 2002). A figura 2 mostra a interação entre os papéis e suas respectivas operações. Neste modelo, é possível observar que o provedor de serviços realiza a publicação de um serviço Web em um registro de serviço (UDDI) que é pesquisado por um o consumidor de serviços que, por sua vez, realiza um vínculo com provedor de serviços, obtendo, assim, acesso a todos os serviços Web registrados no registro de serviço. Assim, BASIURA (2003) define o ciclo de vida de um Web Service sendo composto por 6 itens : 1. 2. 3. 4. 5. 6. Criação do Web Service; Divulgação do Web Service em um registro UDDI; Localização do Web Service; Obtenção da descrição do Web Service através da WSDL a partir do acesso do consumidor do Web Service em um provedor Web Service; Criação do Proxy e do cliente; Chamada do Web Service através do SOAP. Existem ainda outras tecnologias que pode implementar Web Services, como Asp.Net, que oferecem recursos avançados para a criação de Web Service, mas que necessita de investimento para a utilização, já utilizando o JWSDP, uma pacote desenvolvido em VI Encontro de Estudantes de Informática do Estado do Tocantins – ENCOINFO 2004 – 4 e 5 de novembro de 2004 CEULP/ULBRA – Curso de Sistemas de Informação – Palmas – TO Java, que é uma plataforma free, se torna mais acessível para qualquer pessoa que deseje implementar um Web Service. 3. JWSDP O JWSDP (Java Web Service Developer Pack – Pacote de Desenvolvimento de Web Service em Java) é um conjunto de aplicações que permitem construir, testar e distribuir aplicativos XML, Web Services e aplicações Web (JWSDP, 2003). Foi desenvolvido pela Sun Microsystems, com a finalidade de reunir tecnologias utilizadas pelos Web Services em todo o ciclo de desenvolvimento e permitir o processamento de documentos XML. Para a construção de Web Service utilizando o JWSDP, existem várias APIs e diversas ferramentas para a geração de artefatos necessários tanto para criação quanto para a publicação de serviços. Essas API´s são (ROCHA, 2002): SAAJ: módulo composto por um conjunto de API’s para manipulação de envelopes SOAP, permitindo a comunicação baseada em eventos e em RPC. JSF: permite a implementação de interfaces do usuário para aplicações JavaServer. Com o modelo de programação definido, fornece ganho no desenvolvimento de aplicações Web pelo reuso de componentes da página, conexão desses componentes com os dados da aplicação, e ligação dos eventos do lado cliente com os manipuladores dos eventos no lado servidor. Com javaserver faces, aplicações web tratam toda a complexidade de gerenciar a interface do usuário no servidor, permitindo desenvolvimento de aplicações focadas no código. JAXB: permite a geração de classes a partir de XML Schemas, eliminando a necessidade de codificar classes para a manipulação de XML. Esta API mapeia as classes Java a documentos XML que permite gerar JavaBeans a partir de esquema XML possibilitando a serialização de objetos para XML e vice-versa. JAXM: fornece uma maneira padrão de transmissão de documentos XML pela Internet, seguindo as especificações SOAP. JAXP: possibilita a interpretação de documentos XML a partir da utilização do modelo DOM (Document Object Model) ou SAX (Simple API for XML Parsing), sendo utilizado apenas para interpretar, criar e alterar mensagens. JAXR: oferece uma forma de acesso a registros de negócios na Internet que podem ser baseados em padrões abertos (ebXML) ou especificações de consórcios de empresas (UDDI). Possibilita o acesso uniforme a diferentes sistemas de registro de serviços baseados em XML. Possui uma arquitetura dividida em JAXR cliente e JAXR provider. JAX-RPC: permite a geração da infra-estrutura semelhante ao JAVA RMI (Remote Metod Invocation), facilitando a utilização de Web Services no modelo RPC. Assim, é considerada a principal API para a criação de Web Service (JWSDP, 2003). VI Encontro de Estudantes de Informática do Estado do Tocantins – ENCOINFO 2004 – 4 e 5 de novembro de 2004 CEULP/ULBRA – Curso de Sistemas de Informação – Palmas – TO Para a elaboração do trabalho a API JAX-RPC foi escolhida por ser a forma mais fácil e rápida de criar Web Services em Java. Os Serviços desenvolvidos em JAX-RPC poderão ser acessados de aplicações .NET e vice-versa. Web Services viabilizam a integração de serviços entre plataformas diferentes: interoperabilidade! 3.1 JAX-RPC A API JAX-RPC é um módulo responsável por facilitar a utilização de Web Service no modelo RPC. Esta API, por estar em um alto nível de abstração, permite ignorar envelope SOAP. Ela usa a linguagem WSDL para a geração de classes de servidor e cliente e seu pacote principal é o javax.xml.rpc. Essa API pertence ao pacote de desenvolvimento de Web Service JWSDP, que é implementado nos dois lados do processo de comunicação entre cliente e servidor (JWSDP, 2003). No lado do Servidor cria-se uma interface, que expõe os métodos disponíveis no Web Service, através de uma classe que implementa estes métodos dentro de um programa servidor. No momento de compilação do servidor é utilizado o wsdeploy para gerar “tie”, também conhecidos por skeletons1, que serão responsáveis pela comunicação com os stubs2 do cliente. Este comando, ao ser utilizado também é responsável pela geração automática do arquivo WSDL, que descreve o serviço Web sem intervenção humana. Depois é executado o wsdeploy, citada anteriormente, e em seguida a ferramenta deploy (distribuição) que é responsável por publicar a aplicação em um Web Container dentro do servidor TOMCAT, que acompanha o pacote JWSDP. Para gerar o pacote que será utilizado pelos clientes é utilizada a ferramenta wscompile, que gera as classes para um “stub” e um “stub factory”, de acordo as informações descritas na WSDL, publicadas no endereço existente dentro de um arquivo XML, denominado “config.xml”. Assim, os programas clientes precisam apenas importar o pacote gerado e acessar os métodos do serviço publicado como se eles fossem do “stub”, o que torna a aplicação transparente para o usuário que utiliza o programa cliente. skeletons 1 : São responsáveis pela comunicação entre os servidores de aplicativos. stubs 2: São responsáveis pela comunicação entre clientes. VI Encontro de Estudantes de Informática do Estado do Tocantins – ENCOINFO 2004 – 4 e 5 de novembro de 2004 CEULP/ULBRA – Curso de Sistemas de Informação – Palmas – TO A figura 3 mostra a arquitetura da API JAX-RPC para a implementação de Web Service. Cliente Servido r Stub Skeleton “tie” SOAP JAX-RPC JAX-RPC HTTP Figura 3 – Arquitetura da JAX-RPC. Conforme pode ser observado na figura 3, a API JAX-RPC tem como finalidade possibilitar a chamada de procedimentos remotos usando a plataforma Java. As chamadas de procedimentos remotos entre o cliente e o servidor são transmitidas através do stub cliente e o retorno do servidor por meio dos skeletons. As mensagens entre o cliente e o servidor são codificadas através do SOAP e transmitidas via rede através do HTTP. Assim, esta API representa uma RPC através de XML baseado no SOAP, sendo que o SOAP define a estrutura encapsulada através da codificação de regras que são convertidas para que sejam transportadas através do protocolo HTTP. Logo, é escondido do programador a complexidade existente nos protocolos utilizados, pois no lado servidor o programador apenas especifica os procedimentos remotos através das assinaturas dos métodos em uma interface e da implementação dos mesmos. No lado cliente é implementado um programa que servirá como “Proxy” para acesso os métodos implementados no servidor, que só precisa conhecer os stubs do servidor. Utilizando esta API os clientes possuem a vantagem de poder escrever seus programas em qualquer linguagem de programação e em qualquer plataforma, pois esta API não VI Encontro de Estudantes de Informática do Estado do Tocantins – ENCOINFO 2004 – 4 e 5 de novembro de 2004 CEULP/ULBRA – Curso de Sistemas de Informação – Palmas – TO faz restrições quanto a isso. Esta flexibilidade é possível pelo fato da API JAX-RPC utilizar padrões que são definidos pelo W3C (World Wide Web Consortion), HTTP, XML e o SOAP. 4. Aplicativo Desenvolvido O aplicativo, denominado HelpNet, foi desenvolvido utilizando a linguagem Java juntamente com as API’s existentes. Banco de dados do Helpnet O banco utilizado para a construção do aplicativo foi o Microsoft Access versão 2000. Dentro deste banco de dados estão as tabelas Setor, Movimentacao, Solicitacao, StatusSolicitacao, Fornecedor, Equipamento, StatuSequip, Manutencoeseq e Usuário, que são responsáveis pelo armazenamento dos dados referentes ao gerenciamento de equipamentos de informática conforme mostrada na figura 4. Figura 4 – Banco de dados do HelpNet O acesso ao bando de dados é feito pelo servidor através das implementações dos métodos da interface. Interface VI Encontro de Estudantes de Informática do Estado do Tocantins – ENCOINFO 2004 – 4 e 5 de novembro de 2004 CEULP/ULBRA – Curso de Sistemas de Informação – Palmas – TO A interface do aplicativo HelpNet, denominada HelpIF.java, contém as assinaturas dos métodos a serem implementados no programa HelpImpl.java. Nesta interface são encontradas as declarações dos métodos e parâmetros utilizados para: gerenciar atendimentos técnicos, gerenciar equipamentos de informática, gerenciar fornecedores de equipamentos de 0informática, gerenciar Manutenções de equipamentos de informática, gerenciar Movimentações de equipamentos de informática, gerenciar Setores para serem atendidos no Helpnet e gerenciar Usuários no Helpnet. Servidor No programa HelpImpl.java foram implementados os métodos descritos no programa de interface, possibilitando o acesso ao banco de dados, para a realização de operações tais como: inserir, alterar, pesquisar e remover dados através dos comando em SQL: SELECT, INSERT, DELETE e UPDATE. Na implementação dos métodos, primeiramente, é criado um objeto Stub, ligado a classe Helpnet_Impl, gerada na compilação do cliente, que está dentro do pacote helpservice. Em seguida, cria-se um objeto da interface HelpIF, denominado ws, para que o cliente tome conhecimento dos métodos oferecidos pelo servidor, como seus parâmetros de entrada e tipo de retorno. Depois esse objeto é ligado ao stub. Assim, sempre que o cliente precisar acessar um método do servidor deverá utilizar a sintaxe ws.nomeDoMétodo(parâmetros). Clientes Clientes implementados em qualquer linguagem de programação ou em qualquer plataforma, podem acessar os servicços os serviços do HelpNet, através dos stubs citado anteriormente. Para criação de Web Services utilizando o JWSDP existem 4 arquivos XML que foram alterados apenas as tags relacionadas ao Web Service desenvolvido são eles: web.xml : Este arquivo é usado no momento da compilação do programa servidor, ele contém o nome do serviço e sua descrição. Quando se publica um determinado serviço, são estas informações que serão apresentados dentro do servidor TOMCAT; config.xml: Este arquivo é utilizado pelo cliente no momento da compilação do programa que acessa o servidor; config-interface.xml : Este arquivo contém campos de configuração de um serviço. Nele serão encontrados o nome do serviço, o nome do pacote que será utilizado pelo servidor e o cliente; jaxrpc-ri.xml: Este arquivo contém informações sobre o serviço a ser publicado. VI Encontro de Estudantes de Informática do Estado do Tocantins – ENCOINFO 2004 – 4 e 5 de novembro de 2004 CEULP/ULBRA – Curso de Sistemas de Informação – Palmas – TO <?xml version="1.0" encoding="UTF-8"?> <configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config"> <wsdl location="http://localhost:8080/Helpnet/help?WSDL" packageName="helpservice"/> </configuration> Figura 6. Arquivo config.xml 5. Conclusões Este trabalho foi realizado com a finalidade de mostrar uma aplicação distribuída utilizando o JWSDP, que é o pacote de desenvolvimento de Web Services desenvolvido pela SUN Microsystem, que foi escolhido por ser disponibilizado gratuitamente, permitir a interoperabilidade entre aplicações e ser uma tecnologia recente com ampla possibilidade de estudos e testes, ainda não realizados. Para a realização do trabalho, foi necessária a compreensão de assuntos como: Web Services, Protocolos SOAP, HTTP, Linguagem XML e a especificação XML-RPC, o conhecimento de desenvolvimento de aplicações em Java e o pacote JWSDP De acordo com os estudos apresentados nesse trabalho, pode-se afirmar que Web Service é uma tecnologia interessante do ponto de vista tecnológico e econômico, uma vez que a mesma independe de plataforma e utiliza padrões aceitos mundialmente, fazendo com que os serviços oferecidos tornem-se interoperáveis. Desta maneira, empresas que necessitam de acesso a serviços na Web não precisam se preocupar em mudar plataformas de desenvolvimento, sistemas operacionais e linguagem de programação para se adaptarem ao serviço, trazendo para a empresa mais investimentos e parcerias. VI Encontro de Estudantes de Informática do Estado do Tocantins – ENCOINFO 2004 – 4 e 5 de novembro de 2004 CEULP/ULBRA – Curso de Sistemas de Informação – Palmas – TO 6. Referências Bibliográficas BASIURA, Russ et al. Professional ASP.NET Web Service. São Paulo: Pearson Education, 2003. DAUM, Berthold. Arquitetura de sistemas com XML: conteúdo, processo e apresentação. Rio de Janeiro: Campus, 2002. Disponível em http://www.argonavis.com.br. Acesso em 23/03/2004 HENDRICKS, Mack et al. Profissional Java Web Service. Rio de Janeiro: Editora Alta Books, 2002. Tutorial Java Web Service. SUN Microsystem, 2003. Disponível em <http://java.sun.com>. Acesso realizado em 08/06/2004 às 21:45 Rocha, Helder da. Como implementar Web Service em Java. São Paulo: COMDEX, 2002. TANENBAUM, Andrew S. Sistemas Operacionais Modernos. Rio de Janeiro: Prentice-Hall do Brasil Ltda, 1992 VI Encontro de Estudantes de Informática do Estado do Tocantins – ENCOINFO 2004 – 4 e 5 de novembro de 2004 CEULP/ULBRA – Curso de Sistemas de Informação – Palmas – TO