Académique Documents
Professionnel Documents
Culture Documents
Este documento apresenta alguns direcionamentos referentes implementao de web services. uma verso preliminar da construo do Guia de Orientao para Implementao de Web Services, resultante da discusso que est sendo realizada no mbito da e-PING, com a participao do DSI/SLTI, SERPRO, COOPE, participantes e colaboradores do Grupo de Web services (http://i3gov.softwarepublico.gov.br/wikiws/wikka.php?wakka=ListaGrupo). Alm das orientaes para implementao de web services, o documento contm, nos anexos, alguns questionamentos acerca do contedo do guia, conceitos e exemplos concernentes a web services e um mapa de orquestrao de servios da AR.
5. No XML Schema devem-se criar comentrios com breves descries de seus objetivos;
6. Caso um atributo no seja apresentado diretamente de uma varivel de arquivo, a regra que
gera esse atributo deve ser descrita.
Componente
Protocolo de troca de informaes
Especificao
SOAP v1.2, como definido pelo W3C http://www.w3.org/TR/soap12-part1/ http://www.w3.org/TR/soap12-part2/ Especificaes do protocolo SOAP podem ser encontradas em http://www.w3.org/TR/soap12-part0/ Especificao UDDI v3.0.2 (Universal Description, Discovery and Integration) definida pela OASIS http://uddi.org/pubs/uddi_v3.htm ebXML(Electronic Business using eXtensible Markup Language) A especificao pode ser encontrada em http://www.ebxml.org/specs/index.htm WSDL 1.1 (Web Service Description Language) como definido pelo W3C. A especificao pode ser encontrada em http://www.w3.org/TR/wsdl WSDL 2.0 (Web Service Description Language) como definido pelo W3C. A especificao pode ser encontrada em http://www.w3.org/TR/wsdl20/
Observaes
Infra-estrutura registro
de
de
Basic Profile 1.1 Second Edition, como definido pela WS-I http://www.ws-i.org/Profiles/BasicProfile-1.1.html
A verso 1.2 do Basic Profile encontra-se como rascunho (Working Draft) em http://www.wsi.org/Profiles/BasicProfile1.2.html
Portlets remotos
WSRP 1.0 (Web Services for Remote Portlets) como definido pela OASIS http://www.oasis-open.org/committees/wsrp
ANEXOS
Quais sero os nveis de granularidade ? Como consumir um WS em qualquer ambiente? O que deve conter na descrio do WS? Onde estar a descrio? No WSDL? Vamos usar um ESB para isso? Qual o padro das especificaes de WS do GT? Vamos usar REST para situaes de implementao mais simplificada? Quantos WS o ambiente pode suportar? Ter monitoramento do WS? Como ser a segurana? o vamos usar certificados? o quem ser o certificador ?q o qual o modo de criptografia? Onde vamos registrar e referenciar os schemas de tipos ? Para o repositrio usaremos UDDI ou EbXML ? O processo de registro do schema ser automtico, ou seja, qualquer mudana na estrutura dos tipos o sistema deve encarregar-se de registrar essa informao no repositrio? Se o registro for feito de forma automtica haver um versionamento das alteraes?
1. Servios Web
Um servio web [2] um sistema de software projetado para permitir interoperabilidade na interao entre mquinas atravs de uma rede. descrito atravs de uma interface padronizada que disponibiliza um servio em uma rede de computadores, geralmente a Internet. Uma vez descrito na forma padro e catalogado, o servio se torna um componente de software totalmente reutilizvel, permitindo a comunicao e a interoperabilidade entre aplicaes e plataformas heterogneas. Servios web representam parte da lgica de negcio, executando em sistemas remotos que os hospedam e os mantm distribudos na rede. Eles podem ser acessados atravs de protocolos padronizados da internet como HTTP (HiperText Transfer Protocol) [3]. Essa comunicao baseada em padres permite que qualquer aplicao que utilize estes protocolos acesse e utilize servios sem conhecer detalhes de implementao. As principais caractersticas dos servios Web so: Baseado em XML: usado para representar os dados. Como transporte de dados, XML (eXtensible Markup Language) [4] elimina qualquer dependncia com rede e sistema operacional.
Fracamente acoplado: a interface de um servio Web pode mudar durante o tempo sem comprometer a habilidade do cliente de interagir com o servio.
Granularidade grossa: prov uma maneira natural de definir servios de granularidade grossa que acessam a quantidade correta de lgica de negcio.
Chamadas sncronas e assncronas: um cliente pode invoc-lo de forma sncrona e assncrona. Possibilitar chamadas assncronas a chave para permitir sistemas fracamente acoplados.
Os servios Web so descritos e acessados utilizando uma notao padronizada de XML que cobre todos os detalhes necessrios para interagir com o servio, descrevendo as funcionalidades, a localizao, o modo de invocao e os protocolos utilizados para isso. O trip XML que mantm a arquitetura de implementao dos servios Web est focada em trs elementos: WSDL (Web Service Description Language) [7]: um formato XML que permite que os servios sejam descritos. Tipicamente usado para gerar cdigo para o cliente e o servidor e para configurao. SOAP (Simple Object Access Protocol) [8]: protocolo para comunicao que encapsula os dados transferidos no formato XML. O protocolo SOAP estende o XML para que aplicaes clientes possam enviar facilmente parmetros para aplicaes servidoras e ento receber e entender o documento XML retornado. Graas simplicidade de um arquivo XML (texto puro), dados so facilmente trafegados entre sistemas de computadores com arquiteturas e formatos de dados heterogneos. O transporte realizado pelos protocolocos: HTTP e HTTPS, tambm possivel usar outros protocolos como SMTP e XMPP. UDDI (Universal Description, Discovery, and Integration) [9]: um catlogo de servios para publicar e descobrir metadados sobre servios Web, permitindo que aplicaes descubramnos tanto em tempo de projeto quanto de execuo. Uma vez que um servio Web definido usando WSDL, necessria alguma forma de torn-lo conhecido para utilizao. Isso feito atravs do registro UDDI (Universal Description Discovery and Integration) que fornece mtodos para publicar e encontrar descries de servios. Dessa forma, provedores de servios podem publicar a existncia de seus servios para que potenciais usurios os encontrem. O registro UDDI armazena uma descrio do servio (conforme o tipo de negcio, dividindo por categorias e organizado hierarquicamente) e a localizao do mesmo (binding). O uso em conjunto de todas as tecnologias descritas acima permite a criao de sistemas de negcios distribudos e dinmicos: um objeto de software de orquestrao de servios1 ir
1
descobrir, acessar, integrar e invocar servios independentes, sem a interveno humana. Este nvel de orquestrao requer o uso combinado de SOAP, WSDL e UDDI para prover uma infraestrutura dinmica e transparente dos servios Web. A arquitetura de servios Web [9] baseada na interao de trs entidades: Provedor de servios: cria e desenvolve o servio Web que serve para expor alguma funcionalidade de negcio da sua organizao para a invocao por outros usurios externos. Consumidor de servios ou cliente: qualquer usurio que deseja utilizar algum servio Web. Catlogo de Servios (UDDI): um diretrio central onde o provedor de servios possa cadastrar e descrever seus servios, e onde o consumidor possa procurar pelo servio desejado.
A figura acima ilustra essa arquitetura, representando o uso de servios Web. As trs entidades interagem entre si atravs das operaes de publicar (1), localizar (2, 3) e ligar (4, 5). O Provedor informa ao Catlogo a existncia de um servio Web, utilizando a interface de publicao do Catlogo, para tornar o servio disponvel aos clientes. A informao publicada descreve o servio e especifica o local onde se encontra. Uma aplicao atuando no papel de cliente precisa localizar uma outra aplicao, contida em algum lugar na rede. O cliente consulta um registro UDDI pelo nome, categoria, identificador do servio. Uma vez localizado, o cliente
obtm informao sobre a localizao do WSDL. Este arquivo contm informaes de como contatar o servio Web e o formato das mensagens. Com todas estas informaes o cliente pode enviar mensagens para o cliente via SOAP. Assume-se que exista uma descrio das operaes suportadas pelo servidor escrito em WSDL. Esta descrio um pr-requisito para a gerao de cdigo de comunicao no lado do cliente.
1.1
WSDL
A interface de um servio Web descrita em uma linguagem chamada Web Service Description Language (WSDL). a descrio WSDL que habilita qualquer programa a entender como interagir com o servio Web, pois ela possui as informaes sobre quais operaes um servio possui, quais os tipos de entrada e sada de cada operao e qual a localizao e o tipo de protocolo utilizado para invocar o servio. O uso do WSDL na arquitetura de servios Web convencionalmente divide a descrio do servio em duas partes: a interface do servio e a implementao do servio. A definio da interface do servio uma descrio abstrata que pode ser referenciada e utilizada por mltiplos servios. anloga definio de uma classe abstrata em uma linguagem de programao orientada a objetos.
A interface do servio composta pelos elementos WSDL:binding, WSDL:portType, WSDL:message e WSDL:type. O elemento WSDL:portType define as operaes do servio, isto , quais mensagens XML de entrada e sada sero utilizadas. Pense nesse elemento como a assinatura de um mtodo em uma linguagem de programao. O elemento WSDL:message especifica o tipo de dado que ir aparecer nas operaes de entrada e sada, ou seja, os parmetros da operao. O uso de tipos de dados complexos nas mensagens descrito no elemento WSDL:type. O elemento WSDL:binding descreve o protocolo, formato de dados, segurana e outros atributos de uma interface de servio em particular.
A definio da implementao do servio um documento WSDL que descreve como uma determinada interface implementada por algum provedor de servio (service provider). O servio Web modelado (Figura 2) como um elemento WSDL:service que contm uma coleo (geralmente um) de elementos WSDL:port. Uma porta (port) associa um endpoint (por exemplo, um endereo de rede ou uma URL) com um elemento WSDL:binding da definio da interface do servio.
1.2
XSD
A linguagem XSD (XML Schema Definition) [11], padronizada pelo W3C, uma alternativa ao DTD (Document Type Description) baseada em XML que visa definio de regras de validao para um documento no formato XML. Deste modo, um documento XSD define a estrutura de um documento XML. No contexto de servios Web, um XSD define a estrutura das mensagens trocadas como entrada ou sada para um servio. Um documento XSD possui definies de elementos, atributos, elementos derivados, ordem e quantidade de elementos derivados, quando um elemento vazio ou preenchido, tipos de dados para elementos e atributos e valores padronizados ou fixos para elementos ou atributos. O elemento <schema> a raiz de qualquer esquema em um documento XSD. Este elemento pode conter algumas propriedades como namespaces de outros documentos referenciados ou namespace-padro. Para definir elementos simples, utiliza-se a tag <element> com suas propriedades para definir nome do elemento e tipo, que pode ser string, decimal, integer, boolean, date, time. Tambm possvel atribuir valores fixos ou padro para o elemento utilizando as propriedades default e fixed. Elementos complexos so aqueles que possuem outros elementos e/ou atributos associados e so identificados em um XSD com a tag <complexType>. Um atributo <attribute> sempre declarado com tipos simples. Para definir atributos deve-se definir as propriedades name, type e, opcionalmente, default ou fixed. Atributos so normalmente opcionais, para especificar que um atributo requerido deve-se utilizar a propriedade required. Restries tambm podem ser utilizadas para especificar valores ou sries ou conjuntos de valores aceitveis, tamanho, tipos de dados ou espaos em branco para um elemento ou atributo atravs da tag <restriction>, definindo-se suas propriedades. Existem quatro tipos de elementos complexos: elementos vazios, elementos que contm apenas outros elementos, elementos que contm apenas texto e elementos que contm tanto elementos como texto. Cada um destes tipos tambm podem conter atributos.
1.3
RPC x SOA
Existem dois modelos de comunicao para servios Web. So eles: Remote Procedure Call (RPC): representa uma chamada de mtodo distribuda, neste caso a unidade bsica a operao definida no WSDL. Este mtodo criticado por no ser fracamente acoplado, pois freqentemente implementado mapeando servios diretamente para chamadas de mtodo especificas. Esta forma geralmente a mais usada. Arquitetura Orientada a Servio (Service Oriented Architecture - SOA): a unidade bsica de comunicao a mensagem. Este estilo tambm conhecido como servios orientados a mensagem. Este estilo mais fracamente acoplado, pois o foco est no contrato que o WSDL fornece.
1.4
ebXML
O ebXML (e-business XML) [12] tem o objetivo de prover uma infra-estrutura aberta, baseada em XML que possibilite o uso das informaes do comrcio eletrnico de maneira consistente, segura e interopervel atravs de um protocolo global para transaes comerciais. uma iniciativa de interao eletrnica que permite que participantes de negcios se encontrem, conduzam e estabeleam parcerias para seus negcios. Por ser uma estratgia que faz uso de padres da web semntica j estabilizados pelo W3C e por considerar a representao de processos de negcios envolvidos nas transaes de negcios e a busca de servios que representam estes negcios, a equipe do i3Gov tem dispensado esforos na pesquisa que envolve o ebXML, visando a sua aplicabilidade nas solues de interoperabilidade dos sistemas de Governo. Para registrar e descrever os procedimentos de negcio, definir o perfil e identificar o usurio participante, definir a troca de documentos e celebrao de acordos e um canal de comunicao, alm de estabelecer as mensagens associadas, o ebXML baseia-se nos seguintes mecanismos alm do protocolo SOAP: Registro servidor central que armazena os dados necessrios ao funcionamento do ebXML, como informaes que esto relacionadas aos processos de negcio e meta modelos de informao. Quando um cliente quer iniciar uma transao ebXML, executa uma consulta neste registro. Processo de Negcio atividades que fazem parte de um negcio compartilhado entre parceiros comerciais. Descrito formalmente atravs do Business Process Specification Schema (DTD) e modelado em UML.
10
Collaboration Protocol Profile (CPP) Perfil preenchido pelo cliente que deseja participar de uma transao de negcio. Deve especificar alguns dos processos de negcio, assim como algumas interfaces de servios para os quais oferece suporte. Business Service Interface representam o modo atravs do qual os participantes de uma transao de negcio iro interagir. Inclui tipos de mensagens suportadas pelo negcio e os protocolos de comunicao das mensagens. Business Messages mensagens que contm as informaes relacionadas a uma transao de negcio. Esses dados esto distribudos em mltiplas camadas que podem ser trafegadas via diferentes protocolos como, HTTP, SMTP ou SOAP, aceitando mecanismos de criptografia ou autenticao. Core Library um conjunto de componentes padronizados que podem ser utilizados por alguns elementos ebXML. Por exemplo, processos principais podem ser referenciados por alguns processos de negcio. Collaboration Protocol Agreement (CPA) um contrato entre dois ou mais participantes da transao de negcio que pode ser gerado automaticamente a partir dos CPPs dos respectivos participantes.
11
plataforma Linux. O cliente no precisa se preocupar como o servio foi implementado. Ou seja, os servios Web dependem da habilidade das partes para se comunicar mesmo que usem plataformas diferentes. Um servio Web tambm poder ser facilmente localizado na Internet, uma vez estando publicado na grande rede e registrado em um catlogo de servios Web. A comunicao feita via HTTP tambm garante que a comunicao entre as aplicaes acontecer mesmo com a presena de firewalls ou proxies, j que a porta default 80 no normalmente bloqueada. Desse modo, a reusabilidade, a interoperabilidade e a facilidade de uso so as grandes vantagens desta tecnologia.
12
3.1
Um servio Web modelado utilizando-se o esteretipo <<WebSrv>> em uma classe. Porm este aplicvel somente quando tambm existe um esteretipo <<Service>>. Portanto um servio Web tambm um servio da aplicao. Quando o esteretipo <<Service>> adicionado a uma classe indicamos que esta ser um servio da aplicao implementado na forma de Session Bean EJB. A adio do esteritipo <<WebSrv>> indica que este servio ser exposto como servio Web. A figura abaixo ilustra um exemplo de modelagem.
Aps o processamento do AndroMDA ser gerada uma classe java com os mtodos vazios para o preenchimento da implementao da classe.
13
Os servios Web modelados sero agrupados com o uso do JBOSS com verso igual ou inferior ao 4.0.3, pois neste vrios arquivos de configurao so necessrios. O agrupamento vem para diminuir a quantidade de arquivos necessrios configurao, nas outras verses no ocorre o agrupamento. Na verso 4.0.3 ou inferior, os servios Web sero agrupados de modo diferente dependendo se o projeto for modularizado ou no. Quando uma classe modelada com os esteretipos <<Service>> e <<WebService>> na verdade estamos especificando uma porta. Um projeto modularizado utilizar <NomeModulo>Handler como o servio Web enquanto um projeto que no utilize mdulos o servio Web ser <NomeProjeto>Handler. A URL do servio Web pode ser vista durante o deploy da aplicao. A estrutura geral a seguinte: http://<servidor>:<porta>/<NomeProjeto>-services/<NomeClasse>Srv para JBOSS 4.0.3 ou inferior e http://<servidor>:<porta>/<NomeProjeto>-services/<NomeClasse>Srv?wsdl O nico cuidado que o modelador deve ter em relao aos tipos de retorno e parmetros, como estes sero transmitidos via XML, eles precisam ter mapeamentos pr-definidos. A especificao da Sun define todos os tipos, geralmente utiliza-se os tipo primitivos. Outros tipos definidos pelo usurio devem usar o esteretipo <<WebServiceData>> que o tema da prxima seo.
3.2
Quando se deseja transmitir objetos definidos pelo usurio via servio Web devemos usar uma classe com o esteretipo <<WebServiceData>>. Isto necessrio, pois a transmisso de classes requer alguns cuidados e configuraes que so automatizadas com o uso do AndroMDA. A figura abaixo mostra um exemplo de modelagem.
14
A classe gerada com este esteretipo tem o nome definido pelo nome modelado concatenado com WS e gerado em <NomePacote>.ws, dentro da pasta core. Alm disso, todas essas classes herdam de uma classe base chamada AbstractWS. Todo mtodo de servio Web que tem como retorno ou parmetro um tipo definido pelo usurio, deve usar um tipo com este esteretipo. O esteretipo <<WebServiceData>> no precisa estar necessariamente associado ao <<Entity>>. Quando ambos esto presentes, duas classes sero geradas: A entidade e a classe utilizada para trafegar pelo servio Web. A diferena entre elas que a classe usada pelo servio Web s tem os atributos (com mtodos get e set) e possui estruturas de dados compatveis com a especificao da Sun (por exemplo: array no lugar de Collection). O uso do esteretipo <<ExcludesWSD>> utilizado para evitar ciclos em um relacionamento bidirecional. Um relacionamento entre entidades pode ser bidirecional enquanto nas classes WS devem ser unidirecionais por detalhes de implementao da especificao. O uso deste esteretipo vem para trazer unidirecionalidade para um relacionamento entre classes WS. Portanto, quando temos um relacionamento bidirecional entre entidades que tambm so classes WS este esteretipo obrigatrio. Quando ambos os esteretipos esto presentes, tambm possumos mtodos de converso de um para outro. Um cenrio para esta funcionalidade seria quando queremos transferir dados obtidos do banco de dados de uma aplicao e queremos enviar para outra. Como j foi dito no
15
podemos fazer isto de forma direta por detalhes de implementao durante a transferncia via XML. Precisamos da classe gerada pelo esteretipo <<WebServiceData>>, portanto de extrema utilidade fazer isto de forma simples. Estes mtodos so gerados na entidade e a responsabilidade de converso desta. A figura abaixo mostra um exemplo de converso de uma classe WS para uma Entidade.
Este mtodo aceita como argumento uma classe WS como raiz do processamento e converte todos os relacionamentos, inclusive respeitando herana. Para evitar converses cclicas, necessrio armazenar todas as instncias convertidas em um Map para controle. A classe WS ainda possui o id da entidade que o originou para fins de controle de transformao, mas depois do processo o id no est propagado na nova entidade. Na prxima seo ser mostrado o mtodo que faz a converso contrria.
4 Como Utilizar?
Para utilizar um servio Web necessrio desenvolver um programa cliente, que acesse as operaes do servio Web publicado. Para modelar um cliente basta utilizar o esteretipo <<WebServiceClient>> junto com o valor etiquetado @andromda.web.service.client.wsdl.location.
16
O contedo deste valor etiquetado pode ser uma URL ou um caminho relativo ao mdulo, caso o projeto seja modularizado, caso contrrio relativo pasta core. Se quisermos invocar um servio Web dentro do mesmo projeto que foi modelado seguindo os passos j discutidos anteriormente (para fins de teste, ou at mesmo uma outra instncia do mesmo projeto), no precisamos modelar o cliente, pois o cliente automaticamente gerado quando criamos o servidor. A invocao de um servio Web, tanto externo (como modelado nesta seo) como um do prprio projeto, ocorre de maneira semelhante. A figura abaixo ilustra para um projeto que use o JBOSS 4.0.3 ou inferior, isto , que use o JWSDP.
Para o uso de JBOSS com verso superior, usamos o JbossWS e o cdigo ficaria como abaixo.
17
Referncias
[1] EGOVINTEROP September 2007, Paris, France TERREGOV [2] W3C. Web Services Architecture, Outubro de 2007 [3] The Internet Society, Network Working Group, RFC: 2616. Hypertext Transfer Protocol HTTP/1.1. Disponvel em ftp://ftp.rfc-editor.org/in-notes/rfc1945.txt, 1996. [4] W3C. Extensible Markup Language (XML) 1.0 (Second Edition). Disponvel em http://www.w3.org/TR/REC-xml, 2000. [5] W3C. Web Services Description Language (WSDL) 1.1. Disponvel em
http://www.w3.org/TR/wsdl.html, 2001. [6] W3C. Soap Version 1.2. Disponvel em http://www.w3.org/TR/soap12-part1/, 2007. [7] UDDI Spec Technical Committee Specification Draft. UDDI Version 3.0.2. Disponvel em http://uddi.org/pubs/uddi_v3.htm, 2004. [8] IBM Software Group. Web Services Architect (WSCA 1.0). Disponvel em http://www.ibm.com/developerworks/webservices/library/ws-arc1/ [9] IBM Software Group. Brittenham. P., Curbera, F., Ehnebuske, D., Graham, S. Understanding WSDL in a UDDI Registry. Disponvel em http://www-
106.ibm.com/developerworks/webservices/library/ws-wsdl/, 2002. [10] W3C (World Wide Web Consortium). Disponvel em: http://www.w3c.org [11] W3C. XML Schema. Disponvel em: http://www.w3.org/XML/Schema [12] Especificaes do ebXML. Disponveis em: http://www.ebxml.org
18
2. Mapa de detalhamento da Interface com Telas JSP e Interface com Web Services.
19
20
21