35
Mestrado em Sistemas e Mestrado em Sistemas e Computação Computação Técnicas Avançadas de Técnicas Avançadas de Programação Programação JME Web Services API: um estudo de caso JME Web Services API: um estudo de caso Luiz Matos Luiz Matos Marcos Lapa dos Santos Marcos Lapa dos Santos Salvador, Janeiro de 2008. Salvador, Janeiro de 2008.

JME Web Services API: um estudo de caso

Embed Size (px)

DESCRIPTION

Introdução a Web Services, seu uso na plataforma Java MicroEdition e o estudo de caso EduQuiz Mobile.

Citation preview

Page 1: JME Web Services API: um estudo de caso

Universidade Salvador - UNIFACSUniversidade Salvador - UNIFACSMestrado em Sistemas e ComputaçãoMestrado em Sistemas e ComputaçãoTécnicas Avançadas de ProgramaçãoTécnicas Avançadas de Programação

JME Web Services API: um estudo de casoJME Web Services API: um estudo de caso

Luiz MatosLuiz Matos

Marcos Lapa dos SantosMarcos Lapa dos Santos

Salvador, Janeiro de 2008.Salvador, Janeiro de 2008.

Page 2: JME Web Services API: um estudo de caso

AgendaAgenda

Introdução a Web ServicesIntrodução a Web Services

JME Web Services JME Web Services

Estudo de Caso – EduQuiz MobileEstudo de Caso – EduQuiz Mobile

Considerações FinaisConsiderações Finais

ReferênciasReferências

Page 3: JME Web Services API: um estudo de caso

Introdução a Web ServicesIntrodução a Web Services

DefiniçõesDefinições

- Software projetado para fornecer Software projetado para fornecer interoperabilidadeinteroperabilidade entre máquinas em uma rede de computadores. entre máquinas em uma rede de computadores. ((BOOTH e outros, 2004), 2004)

- Fornece uma interface de serviço que permite aos Fornece uma interface de serviço que permite aos clientes interagirem com servidores através de um clientes interagirem com servidores através de um conjunto de operaçõesconjunto de operações. (COULOURIS e outros, 2007). (COULOURIS e outros, 2007)

- Padrão atual da indústria: Padrão atual da indústria: Serviços que são disponibilizados usando Serviços que são disponibilizados usando SOASOAPP:: uma uma mensagem baseada em mensagem baseada em XMLXML que normalmente é que normalmente é transportada via transportada via HTTPHTTP. (ORTIZ, 2006). (ORTIZ, 2006)

Page 4: JME Web Services API: um estudo de caso

Introdução a Web ServicesIntrodução a Web Services

ElementosElementos

-- Simple Object Access Protocol (SOAP)Simple Object Access Protocol (SOAP): define o : define o transporte e a codificação dos dados.transporte e a codificação dos dados.

-- Web Services Definition Language (WSDL)Web Services Definition Language (WSDL): : define como os serviços remotos são descritos.define como os serviços remotos são descritos.

- Extensible Markup Language (XML)Extensible Markup Language (XML): linguagem de : linguagem de marcação marcação utilizada para troca de mensagens e como a utilizada para troca de mensagens e como a forma de definição dos serviçosforma de definição dos serviços..

-- Universal Description, Discovery, Integration Universal Description, Discovery, Integration (UDDI)(UDDI): define como os serviços remotos são : define como os serviços remotos são descobertos.descobertos.

Page 5: JME Web Services API: um estudo de caso

Introdução a Web ServicesIntrodução a Web Services

O provedor do serviço publica-o no registro de serviços, O provedor do serviço publica-o no registro de serviços, onde o solicitante do serviço irá localizá-lo. Após localizado onde o solicitante do serviço irá localizá-lo. Após localizado o serviço, o solicitante efetua a chamada ao provedor o serviço, o solicitante efetua a chamada ao provedor daquele serviço.daquele serviço.

Provedor do serviço

Registro de serviços

Solicitante do serviço

LigarPublicar

Localizar

Figura 1.Figura 1. Arquitetura Web Services Arquitetura Web Services

(1)

(2)

(3)

Os clientes acessam as operações na interface de um Web Os clientes acessam as operações na interface de um Web Service por meio de requisições e respostas formatadas em Service por meio de requisições e respostas formatadas em XML e, normalmente, transmitidas por HTTP.XML e, normalmente, transmitidas por HTTP.

Page 6: JME Web Services API: um estudo de caso

JME Web ServicesJME Web Services

Java Specification Request (JSR) 172;Java Specification Request (JSR) 172;

Fornece à plataforma JME o suporte a Web Services, através Fornece à plataforma JME o suporte a Web Services, através de dois pacotes independentes:de dois pacotes independentes:

• Acesso remoto a Web ServicesAcesso remoto a Web Services

Define uma API que permite dispositivos móveis Define uma API que permite dispositivos móveis acessarem Web Services baseados em XML.acessarem Web Services baseados em XML.

• Parsing XMLParsing XML

Permite o parsing de dados em XML no dispositivo, sem a Permite o parsing de dados em XML no dispositivo, sem a necessidade de incluir código extra para cada aplicação.necessidade de incluir código extra para cada aplicação.

Page 7: JME Web Services API: um estudo de caso

JME Web ServicesJME Web Services

API projetada para trabalhar com profiles JME baseados API projetada para trabalhar com profiles JME baseados nas configurações CDC ou CLDC.nas configurações CDC ou CLDC.

O acesso remoto a Web Services é baseado em um O acesso remoto a Web Services é baseado em um subconjunto da API XML-Based RPC (JAX-RPC 1.1).subconjunto da API XML-Based RPC (JAX-RPC 1.1).

O parsing XML é baseado em um subconjunto da Simple O parsing XML é baseado em um subconjunto da Simple API for XML (SAX2).API for XML (SAX2).

Utilizam outras APIs com funcionalidades reduzidas, a fim Utilizam outras APIs com funcionalidades reduzidas, a fim de atender as de atender as limitações da plataformalimitações da plataforma: memória, : memória, processamento e largura de banda.processamento e largura de banda.

Page 8: JME Web Services API: um estudo de caso

Figura 3. JME Web Services em uma típica arquitetura de WS (ORTIZ, 2004)

Figura 2. Arquitetura JME Web Services (ELLIS e YOUNG, 2003)

Page 9: JME Web Services API: um estudo de caso

JME Web ServicesJME Web Services

Pacote para acesso remoto a Web ServicesPacote para acesso remoto a Web ServicesÉ uma API Java para interação com Web Services É uma API Java para interação com Web Services baseados em SOAP.baseados em SOAP.

CaracterísticasCaracterísticas- Subconjunto das funcionalidades da API JAX-RPC 1.1;Subconjunto das funcionalidades da API JAX-RPC 1.1;- Suporte a SOAP 1.1;Suporte a SOAP 1.1;- Não depende do pacote de parsing XML;Não depende do pacote de parsing XML;- Fornece acesso a Web Services através de aplicações Fornece acesso a Web Services através de aplicações

JME;JME;- Não possui funcionalidades de servidor.Não possui funcionalidades de servidor.

Page 10: JME Web Services API: um estudo de caso

JME Web ServicesJME Web Services

RequisitosRequisitos-- Mínimo de 50KB de RAM;Mínimo de 50KB de RAM;- Mínimo de 25KB de ROM;Mínimo de 25KB de ROM;- Suporte a invocação baseada em Stub;Suporte a invocação baseada em Stub;- Mapeamento do SOAP para exceção Java ou um Mapeamento do SOAP para exceção Java ou um

RemoteException;RemoteException;- Suporte a gerenciamento de sessão e autenticação Suporte a gerenciamento de sessão e autenticação

HTTP.HTTP.

LimitaçõesLimitações- Não suporta mensagens com anexos;Não suporta mensagens com anexos;- Apenas consumidor;Apenas consumidor;- Não suporta UDDI.Não suporta UDDI.

Page 11: JME Web Services API: um estudo de caso

Figura 4. Organização de um aplicação baseada na JSR 172 (ORTIZ, 2004)

JME Web ServicesJME Web Services

Permite o Stub executar todas as tarefas associadas com a invocação de um serviço.

Memória do dispositivo

OrganizaçãoOrganização

Stubs gerados

Oculta a complexidade de tarefas como o gerenciamento de conexão e codificação dos dados.

Page 12: JME Web Services API: um estudo de caso

O método e seu argumento são codificados, serializados O método e seu argumento são codificados, serializados e enviados, e a resposta é recebida, decodificada, e e enviados, e a resposta é recebida, decodificada, e deserializada de maneira transparente.deserializada de maneira transparente.

Suporta somente comunicação síncrona, ou seja, o Suporta somente comunicação síncrona, ou seja, o cliente é bloqueado até que a resposta ou uma exceção cliente é bloqueado até que a resposta ou uma exceção seja recebida.seja recebida.

Figura 5. Interação JAX-RPC (ORTIZ, 2006)

JME Web ServicesJME Web Services FuncionamentoFuncionamento

Page 13: JME Web Services API: um estudo de caso

Figura 4. Diagrama de Classes JAX-RPC no JME (ORTIZ, 2006)

JME Web ServicesJME Web Services

Classes e InterfacesClasses e Interfaces

Page 14: JME Web Services API: um estudo de caso

Passos DesenvolvimentoPassos Desenvolvimento

1. Gerar stubs através de um 1. Gerar stubs através de um documento WSDL que descreve um documento WSDL que descreve um web service;web service;

2. No código, criar uma instância do 2. No código, criar uma instância do stub gerado;stub gerado;

3. Invocar os métodos do stub, tais 3. Invocar os métodos do stub, tais métodos correspondem às métodos correspondem às operações do web service operações do web service disponíveis no WSDL.disponíveis no WSDL.

JME Web ServicesJME Web Services

Figura 5. Caso de uso da API JAX-RPC para JME (ORTIZ, 2006)

Page 15: JME Web Services API: um estudo de caso

Geração de stubGeração de stub

Figura 8. Stub Generator

JME Web ServicesJME Web Services

Figura 8. Geração do Stub (ORTIZ, 2006)

Page 16: JME Web Services API: um estudo de caso

JME Web ServicesJME Web Services

Abstraindo o acesso aos WebServices:Abstraindo o acesso aos WebServices:

• KSoap + KXMLKSoap + KXML

• Frameworks que facilitam a vida do desenvolvedor Frameworks que facilitam a vida do desenvolvedor de aplicações J2ME quando desejam acessar de aplicações J2ME quando desejam acessar WebServices.WebServices.

• Foco em aplicações clientes de WebServices, não Foco em aplicações clientes de WebServices, não criam WebServices.criam WebServices.

• Projeto Open Source.Projeto Open Source.

Page 17: JME Web Services API: um estudo de caso

JME Web ServicesJME Web Services

Abstraindo o acesso aos WebServices Abstraindo o acesso aos WebServices (KSOAP):(KSOAP):

• Mapeamento automático de 4 tipos primitivos do Mapeamento automático de 4 tipos primitivos do SOAP para o Java:SOAP para o Java:

SOAP type Java type

xsd:int java.lang.Integer

xsd:long java.lang.Long

xsd:string java.lang.String

xsd:booleanjava.lang.BooleanFigura 4. Mapeamento de Tipos (YUAN, 2002)

Page 18: JME Web Services API: um estudo de caso

JME Web ServicesJME Web Services

Abstraindo o acesso aos WebServices (KSOAP):Abstraindo o acesso aos WebServices (KSOAP):

• Permite Mapeamento de objetos complexos do SOAP Permite Mapeamento de objetos complexos do SOAP para o JAVApara o JAVA

• Abstrai a estrutura do documento XML (Usando o Abstrai a estrutura do documento XML (Usando o KXML internamente).KXML internamente).

• Não requer geração de Stubs no clienteNão requer geração de Stubs no cliente

• Disponível em: http:Disponível em: http:////ksoap2.sourceforge.netksoap2.sourceforge.net

Page 19: JME Web Services API: um estudo de caso

JME Web ServicesJME Web Services

Passos DesenvolvimentoPassos Desenvolvimento

1) Definir o destino:1) Definir o destino:

Namespace e métodoNamespace e método

2) Adicionar possíveis parâmetros2) Adicionar possíveis parâmetros

3) Atribuir ao “envelope”3) Atribuir ao “envelope”

4) Enviar o envelope4) Enviar o envelope

5) Tratar resposta5) Tratar resposta

Page 20: JME Web Services API: um estudo de caso

Acessando um WebService com Acessando um WebService com

tipo primitivo de retornotipo primitivo de retorno

Page 21: JME Web Services API: um estudo de caso

Exemplo: CalculadoraExemplo: Calculadora

Serviço executando remotamente programado em JEE.Serviço executando remotamente programado em JEE.

Page 22: JME Web Services API: um estudo de caso

Utilizando a JSR172Utilizando a JSR172

Page 23: JME Web Services API: um estudo de caso

Utilizando KSOAP 2Utilizando KSOAP 2

Page 24: JME Web Services API: um estudo de caso

Acessando um WebService Acessando um WebService

com tipo complexo de retornocom tipo complexo de retorno

Page 25: JME Web Services API: um estudo de caso

Utilizando KSOAP 2Utilizando KSOAP 2

Page 26: JME Web Services API: um estudo de caso

Estudo de Caso – Estudo de Caso – EduQuiz MobileEduQuiz Mobile

Page 27: JME Web Services API: um estudo de caso

Estudo de Caso – EduQuiz MobileEstudo de Caso – EduQuiz Mobile

Descrição da AplicaçãoDescrição da Aplicação

Um jogo executado no estilo perguntasUm jogo executado no estilo perguntas e respostas e respostas sobre computasobre computação. ção.

A finalidade é promover uma avaliação de A finalidade é promover uma avaliação de conhecimentos sobre determinado domínio.conhecimentos sobre determinado domínio.

A interface com o usuário será realizada por um A interface com o usuário será realizada por um dispositivo móvel, que deverá acessar as dispositivo móvel, que deverá acessar as funcionalidades da aplicação através protocolo HTTP funcionalidades da aplicação através protocolo HTTP via Web Service.via Web Service.

Page 28: JME Web Services API: um estudo de caso

Estudo de Caso – EduQuiz MobileEstudo de Caso – EduQuiz Mobile

RequisitosRequisitos- Autenticação baseada em login e senha;Autenticação baseada em login e senha;- Controle de usuário baseado em níveis (Adminstrador, Controle de usuário baseado em níveis (Adminstrador,

Professor, Aluno);Professor, Aluno);- Questões organizadas por assunto;Questões organizadas por assunto;- Limite de 3 alternativas por questão, sendo apenas 1 Limite de 3 alternativas por questão, sendo apenas 1

correta;correta;- Ranking de pontuação;Ranking de pontuação;

Page 29: JME Web Services API: um estudo de caso

Estudo de Caso – EduQuiz MobileEstudo de Caso – EduQuiz Mobile

ArquiteturaArquitetura

EduQuiz MIDlet

ClientWS Questao

ut

il

InternetLAN

Fornecedor do serviço + demais servidores (App, BD, etc)

Page 30: JME Web Services API: um estudo de caso

Estudo de Caso – EduQuiz MobileEstudo de Caso – EduQuiz Mobile

ServiçosServiços

ServiçoServiço InIn OutOut

autenticarautenticar login, senhalogin, senha $ID;$NOME$ID;$NOME

obter_assuntosobter_assuntos -- $ID;$DESCRICAO[]$ID;$DESCRICAO[]

obter_questoesobter_questoes id_assuntoid_assunto $ID;$DESCRICAO[]$ID;$DESCRICAO[]

obter_alternativasobter_alternativas id_questaoid_questao $ID;$DESCRICAO;$CORRETA[]$ID;$DESCRICAO;$CORRETA[]

gravar_acertosgravar_acertos id_usuario, id_usuario, qnt_acertosqnt_acertos

true, falsetrue, false

consultar_rankingconsultar_ranking -- $LOGIN;$QNT_ACERTOS[]$LOGIN;$QNT_ACERTOS[]

Page 31: JME Web Services API: um estudo de caso

Estudo de Caso – EduQuiz MobileEstudo de Caso – EduQuiz Mobile

Page 32: JME Web Services API: um estudo de caso

Estudo de Caso – EduQuiz MobileEstudo de Caso – EduQuiz Mobile

Tecnologias utilizadasTecnologias utilizadasCliente (Dispositivo Móvel)Cliente (Dispositivo Móvel)

Java 1.6Java 1.6KSOAP 2KSOAP 2

Servidor:Servidor:PHP PHP 5.2.4MySQL 5.0.45 MySQL 5.0.45 Apache 2.2.6Apache 2.2.6

Ferramentas de apoio:Ferramentas de apoio:NetBeans 5.5NetBeans 5.5phpMyAdmin 2.11.1phpMyAdmin 2.11.1Java Wireless Toolkit 2.5.1Java Wireless Toolkit 2.5.1

Page 33: JME Web Services API: um estudo de caso

DemonstraçãoDemonstração

Page 34: JME Web Services API: um estudo de caso

Considerações FinaisConsiderações Finais

Durante a pesquisa identificamos:Durante a pesquisa identificamos:

VantagensVantagens Facilita a codificação de clientes de WebServices Facilita a codificação de clientes de WebServices

frente à JSR 172.frente à JSR 172. Abstrai o SOAP e XML para o desenvolvedor.Abstrai o SOAP e XML para o desenvolvedor. Abstrai a criação de stubs.Abstrai a criação de stubs.

ProblemasProblemas O acesso a WebServices feitos em .NET não é O acesso a WebServices feitos em .NET não é

trivial (Na versão 1.0 do KSOAP não roda)trivial (Na versão 1.0 do KSOAP não roda) Falhas na geração de stubs utilizando WSDL Falhas na geração de stubs utilizando WSDL

gerado em PHPgerado em PHP

Page 35: JME Web Services API: um estudo de caso

ReferênciasReferências

BOOTH, David; HAAS, Hugo; McCABE, Francis; NEWCOMER, Eric; CHAMPION, Michael; Ferris, Chris; ORCHARD, David. Web Services Architecture. W3C Working Group Note, 2004. Disponível em: <http://www.w3.org/TR/ws-arch/>. Acesso em: 29 nov. 2007.

COULOURIS, George; DOLLIMORE, Jean; KINDBERG, Tim. Sistemas Distribuídos: conceitos e projeto. 4. ed. Porto Alegre: Bookman, 2007.

ELLIS, Jon; YOUNG, Mark. J2ME Web Services 1.0: final draft. Java Community Process, 2003. Disponível em: <http://www.jcp.org/aboutJava/communityprocess/final/jsr172/>. Acesso em: 25 nov. 2007.

GIGUERE, Eric. Service-Oriented Architecture and Java ME. Sun Developer Network, 2006. Disponível em: <http://developers.sun.com/mobility/midp/ttips/soaintro/>. Acesso em: 25 nov. 2007.

_______. SOA Without SOAP: the Java ME Perspective. Sun Developer Network, 2007. Disponível em: <http://developers.sun.com/mobility/midp/ttips/soanosoap/>. Acesso em: 25 nov. 2007.

ORTIZ, C. Enrique. Introduction to J2ME Web Services. Sun Developer Network, 2004. Disponível em: <http://developers.sun.com/mobility/apis/articles/wsa/index.html>. Acesso em: 25 nov. 2007.

_____. Understanding the Web Services Subset API for Java ME. Sun Developer Network, 2006. Disponível em: <http://developers.sun.com/mobility/midp/articles/webservices/>. Acesso em: 25 nov. 2007.

MARIN NETO, Antonio. Utilizando SOA com Webservices em JME. Disponível em: <http://www.sucesusp.org.br/mailing2007/congresso/justjava/apresentacoes/SOAJME.pdf>. Acesso em: 28 nov. 2007.

YUAN, M. Juntao. Access Web Services from wireless devices. Java World, 2002. Disponível em: <http://www.javaworld.com/javaworld/jw-08-2002/jw-0823-wireless.html?page=1>. Acesso em: 20 dez. 2007