-
Java
Agenda de Contatos (Google App Engine)
Trabalho da Disciplina: Tecnologia WebServices e RESTful
Adriana Del Nero Romano
Robson Martins
Prof. Carlos L. L. Rischioto
MBA em Desenvolvimento de Aplicações Java - SOA / FIAP
08/01/2012
Download do código-fonte:
Agenda de Contatos (GAE) (ZIP ~8,9MB)
Tecnologias empregadas:
- Restlet (GAE Edition);
- GAE SDK;
- XML;
- JAXB;
- JPA;
- UI em modo console (consumer).
Enunciado:
Desenvolva a Aplicação de Controle de Contatos (a mesma do trabalho de WebServices) na Plataforma do Google App Engine (http://
URL da Aplicação:
Essa é a URL da aplicação Agenda de Contatos (GAE):
http://
Arquivos do Pacote ZIP:
AgendaGAE.zip
: Projeto Java para o Eclipse, contendo o Servlet REST (for GAE) para a Agenda de Contatos.AgendaGAEClient.zip
: Projeto Java para o Eclipse, contendo um Cliente em Modo Console (CUI) para a Agenda de Contatos.
Detalhes sobre a Implementação:
Este trabalho foi implementado usando o framework Restlet - edição para GAE (GAE Edition), facilitando a adaptação do exercício anterior (Agenda de Contatos em REST).
Basicamente, ao usar o Restlet GAE Edition junto com a aplicação Web do Google App Engine, pôde-se reaproveitar do exercício anterior (REST), as classes Resource (AgendaResource
e ContatoResource
), a classe Application (AgendaApplication
), as classes DAO (GenericDAO
e ContatoDAO
), além dos Beans (POJO): Agenda
e Contato
.
Assim como na implementação da Agenda em REST, a serialização dos objetos é realizada por meio de um JaxbRepresentation
(Uma extensão do Restlet que permite o uso do JAXB para transformar objetos em XML e vice-versa).
As principais alterações neste exercício (em relação ao anterior – Agenda de Contatos em REST):
-
Classe
Contato
: o GAE necessita de uma Chave Primária (id) formada por um atributo do tipoKey
(com.google.appengine.api.datastore.Key
), e não um atributo numérico inteiro.
O atributo id foi mantido na geração do XML (para o formato ficar compatível com o exercício anterior), enquanto que o atributo key foi "anotado" para ser ignorado no XML. - Persistência: A persistência de dados ainda é feita através de JPA, porém o GAE possui um mecanismo próprio de datastore (não usa banco de dados externo, como MySQL, Oracle, SQLite, ou outro). Para isso, foi necessário configurar corretamente o arquivo
persistence.xml
.
URL's do Serviço REST no GAE:
As URL's definidas no Servidor da Agenda são as seguintes:
http://
- Através do GET a essa URL, é obtida a lista de contatos em XML (método
listar()
). - Através do POST de um XML a essa URL, é inserido um contato (método
inserir()
).
http://
- Através do GET a essa URL, é obtido o contato em XML (método
consultar()
). - Através do DELETE a essa URL, é excluído um contato (método
excluir()
).
http://
- Idêntico ao
http://
agenda-contatos-fiap.appspot.com/ agenda/ contatos
Exemplos de XML:
XML da Agenda (lista de Contatos):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<contatos>
<contato id="1">
<nome>Adriana Del Nero</nome>
<email>adriana@adriana.com.br</email>
<endereco>Av. dos Sonhos, 6433 - Apto. 603</endereco>
<cidade>São Paulo</cidade>
<estado>SP</estado>
<pais>Brasil</pais>
<telefone>8989-8484</telefone>
</contato>
<contato id="2">
<nome>Robson Martins</nome>
<email>robson@robson.com.br</email>
<endereco>Rua das Flores, 632</endereco>
<cidade>Salvador</cidade>
<estado>BA</estado>
<pais>Brasil</pais>
<telefone>7070-7060</telefone>
</contato>
</contatos>
XML de um Contato:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<contato id="1"> <!—- se contato vai ser inserido, id pode ser omitido --!>
<nome>Adriana Del Nero</nome>
<email>adriana@adriana.com.br</email>
<endereco>Av. dos Sonhos, 6433 - Apto. 603</endereco>
<cidade>São Paulo</cidade>
<estado>SP</estado>
<pais>Brasil</pais>
<telefone>8989-8484</telefone>
</contato>
Consumidor (Cliente) da Agenda:
A aplicação consumidora da Agenda é semelhante a do exercício anterior (REST), implementada usando uma UI em modo console (CUI).
As classes que implementam a aplicação consumidora estão no pacote br.com.fiap.cliente
, sendo que a principal é a AgendaClient, onde está o método main()
.
A diferença entre esse Cliente e o do exercício anterior (REST), é a inclusão de um workaround para um bug do Restlet GAE Edition (ver AgendaRestClient.java:114
) e a versão da biblioteca do Restlet (neste caso, 2.1 RC1).
Instruções para funcionamento das aplicações:
As instruções a seguir pressupõem que o projeto será executado a partir do Eclipse:
Cliente da Agenda de Contatos:
- Importar o projeto no arquivo
AgendaGAEClient.zip
para um Workspace do Eclipse (Cliente da Agenda); - Executar a aplicação cliente, através da classe
AgendaClient
do pacotebr.com.fiap.cliente
; -
Especificar a URL base do serviço no Google (default:
http://
) – para aceitar o default, pressionar ENTER duas vezes;agenda-contatos-fiap.appspot.com/ agenda
Um menu em modo console é exibido, e poderá ser utilizado para invocar as operações previstas para essa aplicação.
Versões das ferramentas e bibliotecas utilizadas:
- Eclipse 3.6
- Java JDK 1.6
- Google Eclipse Plugin 2.4.2 (incluindo o GAE SDK)
- Restlet 2.1 RC1
- NetTool 4.7.2
Todos os sites foram visitados em 19/04/2020.