Vous êtes sur la page 1sur 6

Prtica da Disciplina de Sistemas Distribudos Web Services Parte 2

IFMA DAI Professor Mauro Lopes C. Silva


1. Criao de um Servio Rest
Utilizando a configurao realizada na prtica anterior, iremos criar um servio REST utilizando o JBoss AS 7.1. Um
Servio REST permite atravs da URL solicitar um servio e consumir este em diversos formatos. Nesta prtica iremos
criar um servio que lista os Livros presentes em uma biblioteca. Os dados obtidos estaro no padro JSON.
2. Criando um Dynamic Web Project
A primeira ao a ser realizada em nossa prtica para a criao de um servio REST criar um Dynamic Web Project.
Durante a criao alguns cuidados devem ser tomados para que possamos gerar toda a estrutura necessria para
que o servio REST execute sem dificuldade. A Figura 1 apresenta no Eclipse a opo de criao de um Dynamic Web
Project.

Figura 1: Eclipse criao de um Dynamic Web Project
Aps a escolha da opo Dynamic Web Project seremos direcionados a uma janela semelhante apresentada na
Figura 2. Nela devemos informar o nome do nosso Projeto (PrticaServicoREST) e temos de selecionar (j vem como
padro se voc configurou o JBoss AS) as configuraes marcadas em azul na Figura 2.

Figura 2: Eclipse tela inicial da configurao de um Dynamic Web Project
Aps, devemos clicar no boto Next>. A prxima janela ser de definio da localizao dos arquivos fontes (.java) e
binrios (.class). Voc pode deixar a opo padro e clicar no boto em Next>. Aps esta janela, iremos ser
direcionados para a janela apresentada na Figura 3. Nesta janela, devemos marcar a opo generate web.xml
deployment descriptor. O arquivo web.xml ser utilizado por ns para configurar os ajustes de utilizao do REST.

Figura 3: Eclipse gerao do arquivo web.xml
O arquivo web.xml ser criado dentro do diretrio WebContent, no subdiretrio WEB-INF. interessante verificar
se o mesmo foi criado para concluirmos esta primeira parte da nossa prtica.
3. Criando a Aplicao
A aplicao esta organizada conforme a Figura 4. A Figura 4 apresenta parte do Projeto PraticaServicoREST,
especificamente a pasta Java Resources.

Figura 4: Projeto PrticServicoREST pasta Java Resources
Podemos perceber a existncia de trs pacotes: dao, entidade e servicoLivro. O pacote entidade possui a classe
Livro. Esta classe representa um livro e sua codificao pode ser observada na Figura 5.


Figura 5: Classe Livro do pacote entidade
Na Classe Livro podemos perceber a existncia da anotao @XmlRootElement. Esta anotao ser importante para
que objetos baseados na classe Livro possam ser retornados nas chamadas aos servios. Com esta anotao o
RESTeasy vai saber criar o corpo HTTP da resposta baseado nos objetos desta Classe.
O pacote dao possui a classe DAOLivro. Podemos observar a classe DAOLivro apresentada na Figura 6. Nesta classe
simulamos as aes de manipulao de um Banco de Dados atravs do uso de um ArrayList de Livros. A classe possui
trs mtodos: o mtodo construtor que cria a Lista de Livros, o mtodo lista que retorna a lista com todos os livros e
o mtodo retornaLivro que retorna um livro especfico atravs de um argumento String que representa um ttulo.
package dao;

import java.util.ArrayList;

import entidade.Livro;

//Classe DAO que simula o acesso ao Banco de Dados
public class DAOLivro {
//Lista de livros como um atributo da Classe
private ArrayList<Livro> listalivros;

public DAOLivro(){
//Carga na lista de livros
listalivros = new ArrayList<Livro>();
Livro lv1 = new Livro();
lv1.setTitulo("Usando Java");
lv1.setAutor("Jason Donavan");
lv1.setNumpaginas(129);
lv1.setValor(78.45f);

Livro lv2 = new Livro();
lv2.setTitulo("HTML e CSS");
lv2.setAutor("Alonso Rios");
lv2.setNumpaginas(654);
lv2.setValor(217.29f);

Livro lv3 = new Livro();
lv3.setTitulo("Programando em PHP");
lv3.setAutor("Paulinha Santos");
lv3.setNumpaginas(89);
lv3.setValor(56.41f);

listalivros.add(lv1);
listalivros.add(lv2);
listalivros.add(lv3);
}

public ArrayList<Livro> lista(){
//mtodo DAO que retorna a lista de livros
return(listalivros);
}

public Livro retornaLivro(String titulo){
//mtodo DAO que retorna um Livro com
//determinado titulo
Livro livroretorno = null;
for (Livro livro : listalivros) {
if (livro.getTitulo().equals(titulo)){
livroretorno = livro;
break;
}
}
return(livroretorno);
}
}


Figura 6: Classe DAOLivro do pacote dao
O pacote servicoLivro possui a classe ServicoLivro. nesta classe que identificamos atravs das anotaes REST que
a classe representa um Servio e que mtodos so pblicos a chamadas externas. Na Figura 7 podemos observar as
anotaes @Path, @GET e @Produces. A anotao @Path serve para identificar que a Classe estar vinculada a um
servio REST e que sua url ser determinada pelo argumento passado a anotao, no caso /livro (a url de chamada
a este servio ficar http://localhost:8080/PraticaServicoREST/livro). A anotao @GET identifica que o mtodo
associado a esta anotao ser chamado quando a solicitao do consumidor de servio utilizar o mtodo HTTP GET.
E a anotao @Produces identifica qual o tipo de informao de sada gerada pelo servio quando este for chamado
(no caso a sada ser no padro JSON).

Figura 7: Classe ServicoLivro do pacote servicoLivro
Um detalhe importante na Figura 7 a utilizao do mtodo retornaLivro. Podemos perceber que junto a ele temos
as anotaes @GET, @Produces e @Path. As anotaes @GET e @Produces so bem claras e totalmente
relacionadas explicao dada anteriormente sobre sua utilizao. No entanto a anotao @Path fica um pouco
diferente. A utilizao de @Path neste mtodo ainda tem como funo identificar a url associado ao uso do servio,
no entanto neste caso url ser anexado um parmetro, que damos o nome de querystring. A url para chamada a
este servio ficar http://localhost:8080/PraticaServicoREST/livro/titulo=Programando em PHP. O argumento
/{titulo} da anotao @Path, informa que junto a url de chamada ao servio podemos anexar um parmetro
titulo com um valor. Este valor repassado atravs url ser entregue ao mtodo retornaLivro.
4. Configurao do JBoss AS 7.1
Para criarmos um servio REST podemos utilizar qualquer implementao encontrada no mercado. Lembrando que o
REST uma especificao e a sua implementao padro o Jersey. No nosso caso vamos utilizar o JBoss AS que j
traz consigo uma implementao da especificao REST chamada RESTEasy. Quando vinculamos o nosso Dynamic
Web Project ao target do JBoss Runtime (ver Figura 2), inclumos a library do JBoss em nosso projeto. Voc pode
observar isto na Figura 8.

Figura 8: Projeto PraticServicoREST pasta Libraries apresentando o JBoss 7.1 Runtime
Se abrirmos o item JBoss 7.1 Runtime vamos encontrar uma srie de arquivos .jar. Dentre estes arquivos vamos
encontrar os jars relacionados ao RESTEasy. Podemos observar isto na Figura 9.

Figura 9: Projeto PraticServicoREST jars do RESTEasy presentes no JBoss 7.1 Runtime
Para fazer o servio REST implementado funcionar, precisamos configurar o arquivo web.xml criado no incio da
prtica para que as chamadas REST, feitas via url, sejam reconhecidas. Apresentamos na Figura 10 o arquivo
web.xml em seu estado inicial.

Figura 10: Projeto PraticServicoREST arquivo web.xml em seu estado inicial
Na Figura 11 apresentamos o arquivo web.xml aps a incluso das informaes associados ao uso do RESTEasy.
Perceba que as informaes adicionadas se encontram localizadas aps a tag <welcome-file>.

Figura 11: Projeto PraticServicoREST arquivo web.xml com a incluso das informaes do RESTEasy
5. Chamando o servio
Para chamarmos o servio REST precisamos iniciar o servidor do JBoss AS e informar a url associada ao servio no
navegador:
http://localhost:8080/PraticaServicoREST/livro
ou
http://localhost:8080/PraticaServicoREST/livro/titulo=Programando em PHP

Vous aimerez peut-être aussi