Labs SD >
Um serviço é uma funcionalidade de um sistema de informação que pode ser invocada remotamente através da rede.
Um Web Service é um serviço que usa os protocolos de comunicação da World Wide Web
- HTTP sobre TCP sobre IP -
e protocolos adicionais para descrever mensagens e dados
- SOAP sobre XML.
Para permitir uma definição rigorosa das operações e dos tipos de dados dos Web Services são usadas as linguagens WSDL (Web Services Description Language) e XSD (XML Schema Definition), respetivamente.
Para a publicação e pesquisa de Web Services usa-se um servidor de nomes que implementa a norma UDDI (Universal Description, Discovery and Integration). No Sun RPC usa-se o rpcbind, no Java RMI usa-se o rmiregistry, nos Web Services usa-se o jUDDI (Java UDDI).
Para uma explicação mais detalhada destas tecnologias, ver:
As bibliotecas JAX (Java API for XML) são a família de bibliotecas da plataforma Java que lidam com tecnologias baseadas em XML, como é o caso dos Web Services.
A JAX-WS (Java API for XML Web Services) é uma biblioteca para Java que permite implementar Web Services, usando as normas: HTTP/TCP/IP para mensagens, SOAP/XML para mensagens, WSDL e XSD para descrição.
Para comunicar com servidores UDDI, existe a biblioteca JAX-R (Java API for XML Registries), que permite publicar, pesquisar e eliminar registos de Web Services.
Para uma explicação mais detalhada destas tecnologias, ver:O esquema de dados do UDDI é consideravelmente mais rico do que o habitual num servidor de nomes, com diversas entidades e relações, que permitem guardar informação de negócio sobre a organização e os seus serviços. Como consequência, o JAX-R é uma biblioteca verbosa, que obriga a escrever muitas linhas de código para realizar as tarefas mais habituais de registo e de pesquisa.
Para tornar a utilização do UDDI mais simples
foi criada a biblioteca UDDINaming que simplifica o esquema de dados para suportar apenas:
1 organização, 1 serviço e 1 implementação.
Esta biblioteca,
cujo código está disponível para consulta e modificação,
torna o registo e pesquisa de serviços mais sucinto.
Vamos então ver um exemplo de um Web Service feito em Java, que usa a biblioteca UDDINaming para comunicar com o servidor de nomes.
Nota: As pastas que contêm o código não devem ter espaços no seu caminho.
... <!-- UDDI Naming --> <dependency> <groupId>pt.ulisboa.tecnico.sdis</groupId> <artifactId>uddi-naming</artifactId> <version>1.1.1</version> </dependency> ...
É possível implementar Web Services partindo de código Java já existente. Esta abordagem de desenvolvimento designa-se por implementation-first. Para transformar um tipo Java num Web Service, basta usar a anotação @WebService. As descrições em WSDL e XSD são geradas automaticamente quando o servidor se executa.
Primeiro foi lançado o servidor de nomes jUDDI.
Depois foi instalada a biblioteca UDDINaming no repositório Maven local,
que testa também o funcionamento do servidor jUDDI.
Em seguida,
foi construído e iniciado o servidor,
que se regista no jUDDI e
fica à espera de pedidos no endpoint address.
Finalmente,
o cliente obtém o WSDL a partir do servidor e
gera o código de invocação que permite depois fazer invocações remotas.
Depois de testado o Exemplo, passar ao Exercício.
Partindo do exemplo acima,
foi construído um novo Web Service Tic Tac Toe (jogo do galo).
@WebService(endpointInterface="...") public class TTTImpl implements TTT {
public Game() { ... ...Service service = new ...Service(); ... port = service.get...Port();
O resto do enunciado será entregue na aula.
O objetivo será estender ou
modificar as funcionalidades disponíveis.
Fénix, Avaliação, Projetos, mini Exercício 3 - Web Services
A solução completa deverá ser submetida no Fénix
antes do fim da sua aula de laboratório.
Emails recebidos depois do fim da aula não serão considerados.
Ter atenção ao seguinte:
© Docentes de Sistemas Distribuídos,
Dep. Eng. Informática,
Técnico Lisboa