Índice das dicas

Web Service: acessando o banco de dados pelo celular

Por Leandro Gontijo dos Santos em 4 de dezembro de 2008 às 11h57

1

1. Introdução



Acessar um banco de dados relacional em um servidor através de um micro-computador cliente dentro de uma empresa foi realmente um avanço tecnológico muito grande. Ver as noticias através da internet, e enviar e receber e-mails foi mais um rompimento de barreiras. Fazer e receber ligações através de um telefone sem fio com certeza abriu novos horizontes. Mas se juntar a internet, banco de dados e o celular, realmente teremos um aproveitamento histórico de tecnologias.

O objetivo deste trabalho é acessar o banco de dados Oracle e consultar todos os estados cadastrados na tabela estado, mas para isso vamos utilizar um serviço de web desenvolvido com a API JAX-WS.


2. Criando o Projeto Web no Netbeans



O primeiro passo é criar um projeto web, tarefa bastante simples, onde teremos um ambiente web, agregando as bibliotecas necessárias para a conexão com o banco de dados. Neste caso foi adicionado o JAX-WS 2.1 para a construção do web service, ojdbc5.jar e classes15.jar para a conexão ao banco de dados Oracle como mostrado na figura 1. Como servidor de aplicação foi utilizado o GlassFish v2, que é um servidor bastante completo e utilizado pelos desenvolvedores, onde a sua função é disponibilizar as aplicações para web.

O banco de dados Oracle é um servidor bastante robusto e muito utilizado em pequenas, médias e grandes empresas no mundo todo, e nos proporciona uma grande quantidade de opições para desenvolver aplicativos dos mais variados. Mas quando se fala em Java, não importa o banco de dados, principalmente quando desenvolvemos um web service, ou seja, é possivel desenvolver um acesso ao banco de dados de qualquer modelo, a grande diferença está na confiabilidade e desempenho do Oracle.

img1
Figura 1: Ambiente web e bibliotecas JAX-WS 2.1, classes15.jar e ojdbc5.jar

Com o ambiente web pronto e as devidas bibliotecas adicionadas, o próximo passo é adicionar uma classe de entidade de banco de dados, que neste caso é a classe Estado, que representa a tabela do banco de dados conforme mostrado na figura 2. O netbeans facilita bastante o desenvolvimento, pois oferece a opição de adicionar as entidades tudo de forma visual, facil e rápida, e isso faz com que a produção do software seja bastante rápida.

2
Figura 2: Classe Estado

A Classe DaoEstado, faz a conexão com o banco no momento da consulta, usando o driver ojdbc5.jar. Este driver pode ser baixado direto do site da Oracle, uma vez que a Oracle está direcionando todas as suas ferramentas para o mundo do Java.

3
Figura 3: Classe DaoEstado conectando com o banco de dados

Na figura 4, é mostrado o código do web service, retornando a lista de estados cadastrados no banco de dados. A consulta da lista de estados é feita através da classe DaoEstado que está conectando no banco Oracle, ou seja o codigo do web service é pegueno uma vez que o serviço fica para a classe DaoEstado.

4
Figura 4: Código do serviço web

Após a criação do web service, podemos testar a aplicação no Netbeans, clicando com o botão direito do mouse sobre o serviço Oracle e clicando em testar web service. Aparecerá a tela de teste montrando o botão getListEstado, onde uma vez clicado, é mostrado a tela de retorno do teste conforme mostrado na figura 5, mostrando todos os estados cadastrados.

5
Figura 5: Resultado do Teste do Web Service


3. Criando o Projeto Movel



Para acessar o web service através do celular, foi criado um projeto móvel chamado ConsumidorMovel, e dentro dele foi adicionado um form com os comandos ok e exit conforme figura 6. O ambiente de desenvolvimento visual para j2me no Netbeans é bastante intuitivo e dispõe de todas os recursos necessários para a criação de todas as aplicações possiveis. Mas para fazer a conexão, é preciso de um cliente móvel para acesso web service onde será configurado o endereço de url do web service, como se fosse um navegador normal, a diferença é que o endereço já fica programado.

6
Figura 6: Ambiente de fluxo

Após a conexão criada foi criado o MiDlet Visual chamado de ConsumidorVisual, onde vamos chamar e mostrar as informações do banco de dados. Então a aplicação móvel tem um cliente também móvel para conectar no web service atravéz da internet, e um MiDlet para consultar e mostrar as informações na tela. Na figura 7 é possível visualizar o código com o método para mostrar as informações do banco de dados na tela, só lembrando que neste projeto os dados serão mostrados no próprio console do Netbeans, pois o objetivo é observar que tem como conectar o celular com o banco de dados Oracle.

7
Figura 7: Código onde imprimi o resultado no console do Netbeans

Quando o projeto é executado o cliente móvel conecta no serviço web e pergunta se realmente queremos conectar, é claro que a resposta é sim, conforme figura 8, depois a aplicação pedirá mais uma confirmação e os dados serão mostrados .

8
Figura 8: Selecionando yes para confirmar conexão

Pronto, missão concluida, ao confirmar a conexão a aplicação pede mais uma confirmação, e caso confirmado, o celular consulta o banco e mostra o resultado, que neste caso está sendo mostrado na console do Netbeans. Para mostrar na tela do celular ainda falta alguns passos, mas não é o objetivo dessa dica.

9
Figura 9: Mostrando os estados na console do Netbeans


4. Metodologia



Para este trabalho foi realizado várias pesquisas na internet e livros, pois não se trata de uma tecnologia, mas várias tecnologias unidas, afinal poucos profissionais trabalham com tais ambientes. O próximo passo foi aplicar a teoria na prática, fazendo testes e ajustes acompanhando os materiais pesquisados até atingir o produto final.


5. Conclusão



Os dispositivos móveis tem contribuido muito para o conforto das pessoas, fornecendo mobilidade e rapidez nas tarefas do dia a dia, e acessar um banco de dados através do celulara proporciona maior controle das informações de pessoas estratégicas dentro de uma empresa, como diretores e gerentes, principalmente aqueles que tem pavor de computadores. Então o celular poderá disponibilizar a informação de uma maneira prática e simples.

Referências


Gomes, Everton Barbosa
Dante explica Java 2 v 1.4, Editora Ciência Moderna

Michael Abbey, Michael J. Corey; trad. João Eduardo Nóbrega Tortello.
Oracle Guia do Usuário, MAKRON Books do Brasil Editora Ltda.

Javafree.org
http://www.javafree.org/content/view.jf?idContent=4

Netbeans.org
http://www.netbeans.org/kb/60/websvc/jax-ws_pt_BR.html

Leandro Gontijo dos Santos - Universidade Paranaense (Unipar). Paranavaí - PR - Brasil
leandrogontijo at yahoo.com.br


1 comentárioPor Leandro Gontijo dos Santos. Revisado 4 de dezembro de 2008 às 11h57

Comentários

Meu WS não conecta no banco de dados
por André Thiago (anônimo) em 15 de novembro de 2010 às 12h44
Olá,

eu não consigo conectar o meu WS feito com a implementação JAX-WS, GlassFish v3, PostGre 8.4 e a IDE NetBeans 6.8;

O erro retornado é o seguinte:
Service invocation threw an exception with message : null; Refer to the server log for more details
Exceptions details : java.lang.reflect.InvocationTargetException

No teste que estou realizando tenho 2 classes Produto e TesteCompra;
Em Produto eu crio os get e set de descricao, marca e quantidade;
Em TesteCompra eu crio o WS que está implementado da seguinte maneira:

@WebService()
public class TesteCompraWs {

Produto produto ;
/**
* Operação de serviço web
*/
@WebMethod(operationName = "adicionaProduto")
public void adicionaProduto(@WebParam(name = "descricao")
String descricao, @WebParam(name = "marca")
String marca, @WebParam(name = "quantidade")
String quantidade) {
//TODO write your implementation code here:
java.sql.Connection con;
try {
//carregando Driver
Class.forName("org.postgresql.Driver");
con = java.sql.DriverManager.getConnection("jdbc:postgresql://" +
"localhost:5432/COMERCIO", "postgres", "postgre");

} catch (Exception e) {
e.printStackTrace();
throw new java.lang.RuntimeException("erro ao Conectar");
}

//Inserir Dados
String comando =( "insert into Produto(descricao,marca,qnde)" + " " +
"values" +"('" + produto.getDescricao()+ "','" + produto.getMarca() + "'," +
"'" + produto.getQuantidade()+ "')");

System.out.println(comando);
try {
java.sql.Statement stmt = con.createStatement();
stmt.executeUpdate(comando);
stmt.close();
con.close();
} catch (java.sql.SQLException e) {
throw new java.lang.RuntimeException(e.getMessage());
}

//Fecha a Conexão
try {
con.close();
} catch (Exception e) {
e.printStackTrace();
throw new java.lang.RuntimeException("ERRO!A conexão será fechada");
}
}
}

Cara, por favor se puder me ajudar!

flws