universidade federal do paraná fileuniversidade federal do paraná douglas tamião rodrigues serino...
TRANSCRIPT
Universidade Federal do Paraná
Douglas Tamião Rodrigues Serino
Phyllipy Celarius das Chagas
Web ServicesUma alternativa para problemas de alto custo computacional em dispositivos
móveis
Curitiba - PR
2013
Universidade Federal do Paraná
Douglas Tamião Rodrigues Serino
Phyllipy Celarius das Chagas
Web ServicesUma alternativa para problemas de alto custo computacional em dispositivos
móveis
Monografia apresentada junto ao curso de Ciência
da Computação, do Departamento de Informática,
do Setor de Ciências Exatas, como requisito parcial
para a obtenção do título de Bacharel.
Orientador: Prof. Dr. Bruno Müller Junior
Curitiba - PR
2013
Agradecimentos
• A Deus
• Ao nosso esforço e dedicação nos valeram muito.
• Aos professores pela paciência e dedicação
iv
Resumo
O cenário de dispositivos móveis mudou significativamente nos últimos anos. Hoje
temos uma grande variedade de smartphones e tablets com sistemas operacionais
avançados e um crescente poder computacional. Para acompanhar e possibilitar esse
crescimento, torna-se importante o uso de ferramentas para integrar os dispositivos
móveis com outros sistemas já existentes que, por vezes, são demasiadamente com-
plexos para serem executados diretamente num celular ou tablet. Nesse cenário o
uso dos chamados Web Services tem sido de grande importância, aumentando ainda
mais o poder dessa plataforma.
Palavras-chave: Android, Dispositivos móveis, Web Services.
v
Abstract
The scenario of the mobile devices has changed significantly in the past years.
Nowadays we have a huge variety of smartphones and tablets along with advanced
operating systems which has an increasing computational power. In the case of mo-
nitor and facilitate this evolution, becomes important the use of web tools to integrate
the mobile devices with systems that already exists and sometimes are so complex,
so the execution on smartphones or tablets is not interesting. In this scenario the use
of Web Services (the way the concept is called) have been very important, increasing
even more the power of these platforms.
Keywords: Android, Mobile devices, Web Services.
vi
Sumário
Agradecimentos iv
Resumo v
Abstract vi
Sumário vii
1 Introdução 1
2 Revisão bibliográfica 3
2.1 O protocolo RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.1 Funcionamento do RPC . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.2 Evoluções do RPC . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.3 Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.4 Sistemas Operacionais Móveis . . . . . . . . . . . . . . . . . . . 8
2.1.5 Objetivo do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . 10
3 Web Services e Android 12
3.1 O Sistema Operacional Android . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.1 Estrutura de um aplicativo Android . . . . . . . . . . . . . . . . . 13
3.2 Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
vii
3.2.1 O que são Web Services . . . . . . . . . . . . . . . . . . . . . . 15
3.2.2 Como funcionam os Web Services . . . . . . . . . . . . . . . . . 16
3.2.3 Protocolos e padrões utilizados . . . . . . . . . . . . . . . . . . . 17
4 Implementação de aplicativos Android 24
4.1 Bibliotecas Essenciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.1.1 API Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1.2 KSOAP2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2 Criando um aplicativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2.1 Interface do usuário . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2.2 Estrutura do aplicativo . . . . . . . . . . . . . . . . . . . . . . . . 27
5 Conclusão 34
5.1 Testes realizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.2 Trabalhos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
A Histórico de versões do Android 38
B Extensible Markup Language 39
C WSDL do trabalho prático 41
Capıtulo 1Introdução
O uso de mecanismos para mediar a comunicação entre diferentes sistemas tem
sido objeto de estudo há vários anos. Diversos mecanismos foram criados e apri-
morados com o passar dos anos. Um dos mecanismos mais utilizados hoje são os
chamados Web Services, que permite a integração entre sistemas distintos (podendo
estes serem escritos em diferentes linguagens de programação e até mesmo rodar
em diferentes sistemas operacionais) através de procedimentos executados pela In-
ternet com o uso de protocolos conhecidos e padrões pré-estabelecidos para troca de
mensagens.
Essa natureza de interoperabilidade, característica dos Web Services, permite que
os mesmos sejam utilizados a partir de qualquer plataforma, possibilitando assim o
seu uso para integrar sistemas já existentes com novos sistemas desenvolvidos para
dispositivos móveis com sistemas operacionais próprios como o Android e iOS. Esses
novos dispositivos têm como importante característica a possibilidade de acessar a
Internet e utilizar os mesmos protocolos criados para computadores tradicionais. Com
isso, torna-se possível utilizar-se dos Web Services para incrementar o já crescente
poder atribuido a tais dispositivos.
Um dos sistemas operacionais que mais tem se destacado no mercado é o Android
da Google. O sistema operacional Android foi baseado em um kernel Linux e de código
aberto. Diferentemente de outros sistemas operacionais concorrentes (como iOS da
Apple) seus aplicativos podem ser escritos em Java, permitindo o uso de diversas
bibliotecas já existentes e com funcionalidades adaptadas à plataforma móvel. Por
ter o desenvolvimento facilitado, optamos a plataforma Android para a criação de um
aplicativo capaz de consumir Web Services.
1
2
No decorrer desse trabalho apresentaremos o que são e como funcionam os Web
Services e as tecnologias que serviram como base para a sua criação. Apresentare-
mos também em mais detalhes o sistema operacional Android e mostraremos como
desenvolver um aplicativo simples capaz de buscar e consumir um Web Service, apre-
sentando, por fim, uma avaliação comparativa dos resultados obtidos em relação à
execução de procedimentos no próprio dispositivo e através de Web Services.
Capıtulo 2Revisão bibliográfica
Com a grande variedade de tecnologias existentes e o constante aumento no nú-
mero de aplicações espalhadas pela rede, viu-se a necessidade de criar mecanismos
para facilitar a interação entre essas diferentes aplicações e as diversas tecnologias
disponíveis. Para esse fim, foram criados diversos protocolos capazes de possibilitar
essa integração. Dentre eles destacamos o Remote Procedure Call (RPC), um pro-
tocolo capaz de executar um procedimento localizado em um ponto distinto de uma
determinada rede, permitindo assim que uma máquina possa executar procedimentos
implementados em outras. O RPC serviu como base para a criação de vários outros
protocolos que também visavam possibilitar, de maneira facilitada, a integração entre
aplicações localizadas em máquinas diferentes.
Este capítulo faz uma revisão histórica e apresenta os conceitos utilizados ao longo
do texto. Na seção 2.1 falaremos sobre o protocolo RPC, na seção 2.2 falaremos
brevemente sobre Web Services — uma forma de RPC acessível pela Internet — e,
por fim, na seção 2.3 falaremos sobre sistemas operacionais móveis e de que forma
podem ser usados para executar Web Services. Por fim, a seção 2.4 detalha o objetivo
do trabalho sob o prisma destes conceitos.
2.1 O protocolo RPC
O RPC foi introduzido no início dos anos 80 por Birell e Nelson [6]. Trata-se de um
protocolo que permite uma execução transparente de procedimentos localizados em
diferentes locais numa determinada rede.
Com o RPC, as chamadas a procedimentos remotos e locais são indistinguíveis
3
2.1. O protocolo RPC 4
do ponto de vista do programador. Dessa forma, quando uma máquina A deseja exe-
cutar um procedimento localizado em uma máquina B, ela faz a chamada como se o
procedimento estivesse, de fato, localizado na mesma máquina. O RPC encarrega-se
de encontrar a máquina onde o procedimento está efetivamente implementado, trans-
portar os parâmetros de entrada, realizar a chamada do procedimento propriamente
dito na máquina B e, por fim, transportar de volta à maquina A, os dados de saída
do procedimento. Esse tipo de comunicação é tradicionalmente chamada de cliente-
servidor, onde a máquina que faz a chamada é o cliente e a máquina que executa o
procedimento é o servidor. Dessa forma, procedimentos remotos podem ser imple-
mentados de maneira simples e transparente, sem a necessidade de tratar problemas
de sincronização, segurança, etc.
Na seção 2.1.1 mostraremos mais detalhadamente como se dá o funcionamento
do protocolo RPC e na seção 2.1.2 apresentaremos algumas das tecnologias desen-
volvidas com base no RPC.
2.1.1 Funcionamento do RPC
A ideia do RPC é facilitar a chamada a procedimentos remotos de forma que pos-
sam ser tratados como se fossem procedimentos tradicionais (locais).
Em sua forma mais simples, uma aplicação com RPC é um programa do tipo
cliente-servidor, onde, no cliente, existe um modulo de biblioteca chamado client-stub
que contém a assinatura do procedimento, sendo, também, responsável por localizar
o procedimento, empacotar e transportar os dados necessários para sua execução.
O programa servidor por sua vez, é onde o procedimento será realmente implemen-
tado e executado. Ele deverá possuir um módulo chamado server-stub, que será
responsável por receber a solicitação vinda do client-stub.
Figura 2.1: Modelo de comunicação cliente-servidor com RPC[6].
2.1. O protocolo RPC 5
A figura 2.1 mostra os passos tomados da execução de uma chamada a procedi-
mento remoto com RPC. Quando o processo cliente faz a chamada ao procedimento
o client-stub associado a este procedimento empacota os parâmetros informados.
Como o processo cliente e o client-stub estão localizados no mesmo espaço de ende-
reçamento, a passagem de parâmetros é feita da mesma forma que um procedimento
local. Uma vez empacotados, os dados são enviados até o server-stub associado ao
procedimento, bloqueando o processamento do cliente até a chegada da resposta do
servidor. O server-stub, por sua vez, encarrega-se de desempacotar os dados, exe-
cutar o procedimento e enviar como resposta os dados de saída do mesmo. Por fim,
após receber a resposta do servidor, o cliente é desbloqueado.
Com o RPC, o programa cliente faz a chamada do procedimento exatamente da
mesma forma como em um procedimento local. Cabe então aos stubs realizar o tra-
balho de encontrar e executar o procedimento chamado.
O RPC serviu como base para a construção de diversos protocolos e mecanismos
mais evoluídos para acesso a meios distribuídos. Na próxima seção falaremos sobre
alguns desses mecanismos e de que forma seus conceitos foram aplicados na criação
de Web Services.
2.1.2 Evoluções do RPC
Com base no RPC, outros protocolos foram criados para resolver o problema da
chamada a sub-rotinas remotamente. Dentre esses novos protocolos, destacamos o
Common Object Request Broker Architecture (CORBA) e o Distributed Component
Object Model (DCOM).
O CORBA é uma arquitetura criada pelo Object Management Group (OMG) para
simplificar a troca de dados entre sistemas heterogêneos e orientados a objeto [6].
Embora a CORBA pareça ser uma excelente solução para sistemas heterogêneos,
ela não é tão simples de ser utilizada. As primeiras versões da especificação CORBA
deixaram muitas áreas abertas à interpretação dos fornecedores, dessa forma, im-
plementações de muitos fornecedores começaram a conflitar umas com as outras,
dificultando a interação entre elas[19].
O DCOM, criado pela Microsoft, segue o mesmo princípio do CORBA, porém apre-
senta uma grave limitaçao: só pode ser executado em sistemas Windows, tornando-o
inadequado à grande maioria das aplicações [19].
2.1. O protocolo RPC 6
No final dos anos 80 foi proposta a chamada World Wide Web [2], um sistema ca-
paz de interligar documentos através da Internet. Esses documentos eram interligados
através de hyperlinks e identificados por uma Uniform Resource Identifier (URI), um
sistema de identificação global e único de recursos na Internet, e localizados através
do Uniform Resource Locator (URL) que representa o endereço onde o documento
está localizado. Uma URL é uma string composta pelo nome do protocolo utilizado,
nome da máquina onde o documento esta localizado, caminho do documento na má-
quina e nome do documento (protocolo://maquina/caminho/recurso). Os protocolos
mais utilizados na web são o HyperText Transfer Protocol (HTTP), HyperText Transfer
Protocol Secure(HTTPS) e File Transfer Protocol (FTP). Numa tentativa de criar um
padrão de RPC para a Web, o W3C definiu o modelo de Web Services, que funcio-
nam com base em trocas de mensagens no formato XML através de um conjunto de
protocolos pré-definidos.
Na proxima seção falaremos sobre Web Services e apresentaremos os protocolos
utilizados nesse modelo.
2.1.3 Web Services
Web Service é uma aplicação de software identificada por uma URI que pode
ser acessada remotamente por meio de protocolos como o HTTP, e tem por objetivo
facilitar a integração entre sistemas [19].
Para tornar possível a integração entre diversas aplicações e plataformas, os Web
Services adotam determinados padrões de troca de mensagens e formatos dos paco-
tes:
• Web Services Description Language (WSDL) - Trata-se de uma Interface
Description Language (IDL) e tem por objetivo fornecer uma descrição padro-
nizada do serviço, informando a assinatura do serviço, bem como os dados de
entrada e saída necessários.
• Universal Descriptor, Discovery and Integration (UDDI) - O UDDI é um repo-
sitório das assinaturas de procedimentos que associa a assinatura com o local
onde o procedimento pode ser encontrado. Os UDDI geralmente podem ser
públicos, privados ou semi privados. Quando público qualquer máquina pode
examinar as informações publicadas no registro. No caso de privado, ele fica
protegido e apenas os usuários internos podem fazer uso. E no caso de semi
2.1. O protocolo RPC 7
privado além dos usuários internos, fica também disponível aos parceiros de
negócio.
• Simple Object Access Protocol (SOAP) - protocolo criado e padronizado pelo
W3C, ele é utilizado para a definição do formato das mensagens, de forma que
possam ser utilizadas a partir de qualquer sistema.
• Extensible Markup Language (XML) - linguagem utilizada pelo SOAP, WSDL
e UDDI. Ela possui a sua gramática descrita em esquemas, ou seja, diz quais
são as tags permitidas e as relações entre elementos definidos por elas. Por
ser amplamente utilizada nos Web Services como linguagem principal. Mais
detalhes sobre a estrutura do XML no Apêndice B.
O funcionamento dos Web Services é muito semelhante ao do RPC. Temos um
cliente que faz a requisição do serviço, um servidor onde o serviço está hospedado e
um repositório que contém informações sobre localização e descrição dos Web Ser-
vices disponíveis. A figura 2.2 mostra esses três componentes e as interações entre
eles:
• O servidor publica a assinatura dos seus procedimentos no repositório.
• O cliente busca, no repositório, a localização do procedimento que deseja exe-
cutar.
• O cliente conecta-se ao servidor e executa, através de protocolos padrões, o
procedimento desejado.
2.1. O protocolo RPC 8
Figura 2.2: Modelo de relacionamento entre as entidades que compõem um Web
Service.
O uso de métodos padrões para localização e execução permite que os Web Ser-
vices possam ser utilizados independentemente da plataforma em que são implemen-
tados, podendo ser executados até mesmo por programas escritos em uma linguagem
ou numa plataforma diferente.
Essa facilidade de integração permitiu o acesso à partir de uma grande variedade
de sistemas e dispositivos. Atualmente, com a constante e acelerada evolução dos
dispositivos móveis (tais como smartphones, tablets, etc), os Web Services passaram
a ser utilizados também por essas plataformas.
Na seção seguinte iremos apresentar uma importante plataforma que pode ser
utilizada para consumir web services: são os sistemas operacionais para dispositivos
móveis (smartphones, tablets), mais especificamente o sistema Android da Google.
2.1.4 Sistemas Operacionais Móveis
O cenário dos celulares mudou radicalmente com o passar dos anos, há pouco
mais de uma década era difícil imaginar que celulares fossem ser mais úteis que ape-
nas fazer ligações e enviar mensagens − além de servir como uma calculadora básica
2.1. O protocolo RPC 9
− tampouco pensar que seriam mais poderosos que alguns computadores.
Com o passar do tempo foram surgindo os smartphones, cujo público alvo eram
os profissionais que têm a necessidade de ler e enviar e-mails, acessar informações
via internet, entre outras atividades, do local onde estivessem.
Com a constante evolução das tecnologias, o uso de smartphones tornou-se bas-
tante comum, e com a popularidade desses dispositivos surgiram sistemas operacio-
nais destinados exclusivamente a esse tipo de aparelhos. Entre os principais sistemas
operacionais criados para esse fim, destacam-se o iOS da Apple, Windows Phone da
Microsoft e o Android da Google, entre outros.
Na próxima seção apresentaremos o sistema operacional Android, uma plataforma
que tem crescido de forma bastante acelerada e hoje é uma das plataformas mais
utilizada em dispositivos móveis tais como smartphones e tablets [3].
2.1.4.1 Android
O Android é um sistema operacional para dispositivos móveis (tais como smartpho-
nes e tablets). Foi criado pela Android Inc. e atualmente é desenvolvido e mantido pela
Google Inc.[10] no projeto Android Open Source Project (AOSP)[17].
O Android é uma das plataformas móveis mais vendidas em todo mundo e conta
com uma grande comunidade de desenvolvedores que criam novas aplicações ou
complementos que estendem as funcionalidades do sistema. Para auxiliar e incentivar
o desenvolvimento, a Google disponibiliza um Software Development Kit (SDK), que
conta com uma série de funções já implementadas, facilitando, assim, o trabalho de
desenvolvimento de aplicações.
O sistema baseia-se em numa pilha de softwares de código livre que vão desde
um núcleo, baseado numa versão modificada de um kernel Linux, atá uma máquina
virtual responsável por executar aplicativos [Fig2.3].
A base da pilha consiste de uma versão do Kernel Linux 2.6 modificada para aten-
der às necessidades de gerenciamento de energia, memória e drivers.
Na camada seguinte, encontramos um conjunto bibliotecas Java que permitem ao
dispositivo lidar com as mais diversas variedades de dados. Esta camada contem um
módulo chamado Android Runtime, no qual roda uma máquina virtual chamada Dalvik
Virtual Machine (DVM) onde são executados todos os aplicativos.
2.1. O protocolo RPC 10
No terceiro nível temos a camada do framework de aplicações. Aqui se encontram
os programas responsáveis pelo gerenciamento das funções básicas do dispositivo,
como alocação de recursos, monitoramento e escalonamento de processos ou pro-
gramas.
Figura 2.3: Modelo de camadas do sistema operacional Android[14].
Por fim, na camada mais elevada da pilha, temos as aplicações propriamente ditas.
Diferente de outros sistemas operacionais, as aplicações para Android são escritas em
Java e são executadas pela DVM.
Nesse trabalho nos limitaremos a estudar a camada mais elevada da pilha (a de
aplicações) e como se dá o processo de desenvolvimento de aplicaçoes para o An-
droid, utilizando as API’s de desenvolvimento fornecidas pelo Google (Android SDK).
Na próxima seção falaremos sobre o objetivo do trabalho baseado nos conceitos
mencionados neste capítulo.
2.1.5 Objetivo do trabalho
Nesse trabalho mostraremos de que forma é possível a construir um aplicativo
Android capaz de aproveitar as vantagens oferecidas pelo conceito dos Web Services
2.1. O protocolo RPC 11
através de sua conexão com a Internet.
A organização deste trabalho é a seguinte: no capítulo 3 apresentaremos mais
detalhadamente como se da o funcionamento de aplicações no Android e faremos
uma apresentação das ferramentas de desenvolvimento fornecidas pelo Google para
a criação de aplicativos. Em seguida mostraremos o funcionamento mais detalhado
de um Web Service e como ele pode ser executado. No capítulo 4 mostraremos
como pode-se, utilizando as ferramentas fornecidas pelo Google, criar um aplicativo
para android que seja capaz de executar um Web Service. Faremos também uma
análise do desempenho do aplicativo criado para executar um algoritmo de cálculo de
números primos e comparar com o desempenho do mesmo algoritmo executado no
android. Por fim, no capítulo 5 apresentaremos uma conclusão a partir dos resultados
obtidos.
Capıtulo 3Web Services e Android
Com o crescente número de dispositivos móveis atuais (que por vezes possuem
um poder computacional limitado) e a crescente demanda por serviços e aplicações
que interagem entre si, o uso de Web Services se torna de grande importância para
manter (ou até mesmo possibilitar) a integração entre esses serviços — devido aos
vários modelos disponíveis de diferentes fabricantes. Nesse contexto, aplica-se o mo-
delo de computação chamado cliente-servidor, onde o Web Service age como um
servidor que será responsável pelo processamento de determinada tarefa e por en-
viar os dados pertinentes ao cliente, que por sua vez deverá apenas renderizar as
informações obtidas, deixando, dessa forma, o processamento por conta do servidor.
Na seção 3.1 falaremos sobre o sistema operacional Android e na secão 3.2 expli-
caremos mais detalhadamente o funcionamento dos Web Services e dos protocolos
utilizados para consumí-los.
3.1 O Sistema Operacional Android
O Android foi construído para poder ser executado em dispositivos com pouca me-
mória e baixo poder computacional. Para isso, na base da pilha que compõe o sistema
(Fig. 2.3) existe um kernel Linux versão 2.6 modificado para atender às necessidades
de gerenciamento de energia, memória e ambiente de execução.
Diferente dos outros sistemas, como o iOS ou Symbian, as aplicacões Android são
escritas em Java e rodam numa máquina virtual. Para esse propósito, o Android pos-
sui, em uma de suas camadas, uma máquina virtual chamada Dalvik Virtual Machine
(DVM), responsável pela execução dos aplicativos. Dentro da DVM o código escrito
12
3.1. O Sistema Operacional Android 13
em Java é convertido para um código binario próprio da DVM.
Os aplicativos, em geral, têm seu ciclo de vida baseado em eventos, e o sistema
operacional fornece pequenos módulos para o tratamento deles, de forma que quando
uma determinada ação é feita pelo usuário o sistema dispara o evento associado.
Cada aplicativo roda em um espaço próprio (sandbox) e pode ser composta por
vários componentes: Activities, Services, Broadcast receivers e Content Providers.
Esses componentes podem interagir entre si dentro de um aplicativo e também com
outros aplicativos através de processos chamados Intents.
Na próxima seção descreveremos um pouco mais detalhadamente a estrutura de
um aplicativo Android e seus principais componentes.
3.1.1 Estrutura de um aplicativo Android
A estrutura de um aplicativo Android é composta de quatro componentes: Activi-
ties, Services, BroadcastReceiver e ContentProvider. Nem todos esses componentes
são obrigatórios em um aplicativo, porém para que exista uma interface gráfica é ne-
cessária ao menos uma Activity.
Activity é o componente da aplicação reponsável pela interface gráfica através da
qual o usuário interage com o sistema. De modo geral, cada Activity é uma janela, de
forma que cada aplicativo pode conter várias Activities com funcionalidades indepen-
dentes.
Toda Activity é derivada da classe android.app.Activity, e tem seu ciclo de vida
controlado por um conjunto de métodos, dentre os quais destacam-se [7]
• onCreate()- Inicia a ActivityO servidor publica a assinatura dos seus procedi-
mentos no repositório.
• onDestroy()- Encerra a Activity.
• onResume()- Dá continuidade a uma Activity pausada
• onPause()- Salva o estado atual da Activity e a coloca em background.
Content Provider é um componente da aplicação responsável pelo gerencia-
mento de acessos a um conjunto de dados e por fornecer um mecanismo para se-
gurança dos dados. Pode ser usado, entre outras coisas, para compartilhar dados
entre duas aplicações distintas [13].
3.2. Web Services 14
Content Provider é usado para armazenar e recuperar dados nas aplicações An-
droid. Estes “provedores” podem também ser usados para compartilhar dados entre
múltiplas aplicações, desde que as mesmas possuam as permissões corretas para
acessar os dados. O Android já possui content providers padrões para, por exemplo,
imagens, vídeos, contatos e configurações, as quais podem ser encontradas no an-
droid.provider.package. Uma aplicação consulta um ContentResolver, o qual retorna
o ContentProvider apropriado.
Todos os Content Providers são acessados como um banco de dados com uma
Uniform Resource Identifier (URI) para determinar o provedor, o nome de um campo e
o tipo do dado desse campo. Aplicações acessam somente os Content Providers via
ContentResolver, nunca diretamente [7].
Broadcast Receiver é um componente que responde a eventos do sistema envi-
ados em broadcast. Muitos dos sinais broadcast são originários do próprio sistema
− por exemplo, um aviso que o ecrã foi desligado, a bateria está fraca, ou que uma
foto foi capturada. Aplicativos também podem enviar avisos broadcast − por exemplo,
avisar às outras aplicações que algum dado foi baixado no aparelho e está disponível
para elas o usarem. Apesar dos Broadcast Receivers não possuírem uma inter-
face com o usuário, eles podem criar uma barra de notificação de status para alertar
o usuário quando um evento ocorre. Portanto, um Broadcast Receiver é apenas um
“gateway” para outros componentes [7].
Services são componentes que podem executar operações de longa durabilidade
em background e não fornecem ao usuário uma interface gráfica. Um service pode
ser iniciado por uma aplicação, e continuará sendo executado mesmo que o usuário
alterne entre aplicações distintas. É possível ainda que outras aplicações possam
fazer uso de um service para interagir com ele e até mesmo executar operações entre
processos (fazendo uso do protocolo RPC) [13].
Com isso apresentamos as estruturas básicas que compõem um aplicativo An-
droid. Nas sessões seguintes, apresentaremos mais detalhadamente o funcionamento
de Web Services e os padrões utilizados para garantir a interoperabilidade.
3.2 Web Services
O RPC, e outras tecnologias dele derivadas, forneceu uma boa solução para me-
diar a integração entre aplicações localizadas em diferentes endereços em sistemas
3.2. Web Services 15
distribuídos. O funcionamento dessas tecnologias, no entanto, dependem de uma sé-
rie de fatores como plataforma, linguagem de programação utilizada, tipo de conexão,
etc.
Web services vão além dessas tecnologias. Eles permitem uma integração trans-
parente e que não depende de plataformas e outros fatores que antes eram essenciais.
Neste capítulo faremos um estudo sobre Web Services. Mostraremos como funci-
onam, quais suas principais características e o formato dos protocolos definidos como
padrões para o seu funcionamento.
3.2.1 O que são Web Services
A ideia por trás dos Web Services é a de criar uma forma de executar serviços
através da Internet, de forma que tais serviços possam ser executados a partir de
qualquer dispositivo capaz de enviar e receber mensagens utilizando algum protocolo
de comunicação para a Internet (por exemplo o protocolo HTTP).
Existem várias definições para Web Services. O W3C define Web Services como
sendo aplicações criadas para dar suporte à interoperabilidade entre sistemas através
da internet. Suas interfaces podem ser definidas, descritas e descobertas na forma
mensagens no formato de Extensible Markup Language (XML) [6]. Toda interação
com Web Services é feita através de mensagens baseadas em XML que seguem
padrões pré-estabelecidos. O uso desses padrões permite que os serviços possam
ser acessados a partir de qualquer plataforma.
Assim como no RPC, Web Services funcionam como uma aplicação do tipo Cliente-
Servidor cuja arquitetura é formada basicamente por três componentes: um cliente (
Service Requester), um servidor ( Service Provider) e um registro ( Service Registry)
dos procedimentos, ou serviços, disponíveis [15]. Em Web Services, os serviços são
descritos no registro através de uma IDL própria - O WSDL - e podem ser localizados
dentro do registro com a utilização do UDDI. Por fim, a comunicação entre o cliente e o
servidor é feita através da troca de pacotes no formato definido pelo protocolo SOAP.
Essa forma simplificada de interação baseada em troca de mensagens em formatos
padrões permite que os Web Services possam ser utilizados a partir de qualquer tec-
nologia capaz de enviar e receber mensagens através da Web.
Na próxima seção explicaremos um pouco mais detalhadamente como é o funcio-
namento dos Web Services.
3.2. Web Services 16
3.2.2 Como funcionam os Web Services
Primeiramente, para ser acessado, o Web Service precisa estar disponível num
servidor de dados acessível através de protocolos da web. Para executar o serviço, o
cliente deverá, primeiramente, localizá-lo através do UDDI e, através do WSDL obter
uma assinatura do procedimento (nome, parâmetros de entrada e retorno). Depois
de obter os dados do procedimento, o cliente deverá criar uma mensagem no formato
SOAP e enviá-la ao servidor (o envio é feito, em geral, através do protocolo HTTP). O
servidor irá receber a mensagem, executar o procedimento e enviar uma mensagem
com retorno , também no formato SOAP, para o cliente.
O funcionamento dos Web Services pode ser descrito como interações entre os
seus três componentes principais: Service Requester, Service Provider e Service
Registry. Essas interações envolvem publicação, localização e ligação entre os com-
ponentes. Como mostra a figura 3.1.
Figura 3.1: Exemplo do fluxo de execucao de um WS [15].
Em um cenário típico, o Service Provider hospeda uma implementação do Web
Service de forma que ele seja acessível através da Internet. Para identificar o serviço
desejado, o Service Requester realiza uma operação de busca no Service Registry.
Essa busca é feita com o uso do UDDI, que fornece um catálogo com a descrição
e localização dos serviços disponíveis. Dessa forma o Service Requester obtém o
endereço e o WSDL necessários para conectar-se ao Service Provider e invocar o
3.2. Web Services 17
Web Service com os parâmetros necessários.
Uma vez que a conexão entre Service Provider e Service Requester tenha sido
estabelecida, o Service Requester envia, através de algum protocolo de comunicação
(em geral via HTTP), um envelope SOAP para o Service Provider, que irá desempa-
cotar os dados e executar o serviço solicitado. Ao fim da execução o Service Provider
poderá, ou não, enviar uma nova mensagem informando os resultados da operação
ou possíveis erros que possam ter ocorrido. A figura 3.2 demonstra as interações en-
tre um Service Requester, Service Registry e Service Provider durante a execução de
um Web Service.
Figura 3.2: Interações entre as principais entidades na execução de um Web Service.
Nas próximas seções explicaremos com mais detalhes os protocolos e padrões
utilizados pelos Web Services. Na seção 3.2.3.1 mostraremos o protocolo SOAP, na
seção 3.2.3.2 explicaremos o WSDL e, por fim, na seção 3.2.3.3 explicaremos o UDDI.
3.2.3 Protocolos e padrões utilizados
Nesta seção faremos uma descrição dos principais protocolos utilizados em Web
Services. Na seção 3.2.3.1 mostraremos o protocolo SOAP, na seção 3.2.3.2 mostra-
3.2. Web Services 18
remos o WSDL e, finalmente, na seção 3.2.3.3 o UDDI.
3.2.3.1 SOAP
Devido a natureza de interoperabilidade dos sistemas web, foi necessário o desen-
volvimento de um protocolo padrão específico para a troca de mensagens e "Remote
Procedure Calls"(RPC)[8]. Esse protocolo chama-se Simple Object Access Protocol
(SOAP). Baseado em XML, e com um “design” simples (semelhante a um envelope),
faz-se útil para uma grande variedade de aplicações que precisam realizar trocas de
mensagens e integração de sistemas.
No seu núcleo, uma mensagem SOAP tem uma estrutura muito simples e flexível,
contém um cabeçalho e um corpo. Embora seu cabeçalho seja opcional, ele con-
tém informações relevantes de como tratar a mensagem, tais quais como roteamento,
configurações de entrega, autenticação, etc. Cada envelope possui apenas um cabe-
çalho. Já o corpo contém a mensagem a ser entregue e processada, tudo que puder
ser expressado na sintaxe de XML pode fazer parte do corpo da mensagem.[8]
As mensagens SOAP, em geral, seguem o estilo de mensagens RPC. Permitem
mensagens de requisição, enviadas pelo cliente e mensagens de respostas recebidas
do servidor. As mensagens de requisição contém os dados da chamada do proce-
dimento, como nome e parâmetros de entrada. As mensagens de resposta, por sua
vez, possuem os parâmetros de saída do procedimento. O protocolo, no entanto, não
exige uma resposta para cada requisição realizada, e, da mesma forma, pode exis-
tir uma mensagem com os parametros de saída sem que o cliente tenha feito uma
requisição[6].
Há várias versões de especificação do SOAP colocadas em produção, a mais co-
mum delas é a 1.2, resultante de uma força tarefa realizada pelo W3C para padronizar
este protocolo baseado em XML para os serviços web [6].
As regras para empacotar uma requisição RPC em um envelope SOAP são sim-
ples.A chamada ao método é representada em uma estrutura com os parâmetros de
entrada e saída modeladas naquela estrutura.
Os nomes e ordem dos parâmetros devem corresponder com os nomes e ordem
dos parâmetros do método a ser invocado.
Em relação ao transporte, SOAP não se preocupa com o protocolo usado para as
trocas de mensagens, tornando-se, dessa forma, extremamente flexível [6].
3.2. Web Services 19
3.2.3.2 WSDL
O WSDL foi criado pela IBM, Microsoft e Ariba ao fundir o “Microsoft’s SOAP Con-
tract Language (SCL)” e “Service Description Language” juntos ao IBM’s Network Ac-
cessible Service Specification Language (NASSL).
Ele é um arquivo em formato XML que descreve o Web Service em questão, ele diz
qual o propósito do Web Service e principalmente as interfaces do serviço, tais como
os tipos de dados que precisa receber para processar e devolver, ou não, a resposta.
A estrutura de uma Interface WSDL é composta pela parte abstrata (figura 3.3) e
a parte concreta (figura 3.4).
Na figura 3.3, ou seja, na parte abstrata, temos as mensagens e operações que
definem um Web Service, o desenvolvedor ao ler esse documento já pode identificar
o que ele precisa enviar e sabe o que receber para qual operação desejar utilizar.
Figura 3.3: Estrutura da parte abstrata de uma interface WSDL [8].
Na figura 3.4 temos a parte concreta do WSDL, ela descreve a configuração da
conexão e da comunicação, como deve ser o formato das mensagens SOAP e quais
3.2. Web Services 20
os namespaces.
Figura 3.4: Estrutura da parte concreta de uma interface WSDL [8].
A estrutura do WSDL é interessante não só por que descreve como os serviços
interagem, mas também que as operações além de serem chamadas às vezes po-
dem chamar outras, ou seja, o serviço pode se comportar como um cliente também.
Outro ponto importante é essa separação do abstrato do concreto, enquanto o pri-
meiro contém as interfaces o segundo contém a localização do serviço e o protocolo
de comunicação a ser usado.
3.2. Web Services 21
Há uma correlação entre SOAP e WSDL, se uma das mensagens definidas em
WSDL é mudada, então a InterfaceBinding contém todas as informações necessá-
rias para automaticamente construir as mensagens SOAP, o fato de WSDL e SOAP
usarem esta codificação XML facilita totalmente a padronização de Web Services, por
isso o W3C trabalha para documentar esse padrão, que ele serve muito mais do que
apenas uma descrição de assinaturas para métodos e configuração, mas que cobre
também aspectos de segurança, garantia de entrega, interação de transações e muito
mais [8].
3.2.3.3 UDDI
O Universal Description, Discovery and Integration comumente chamado por UDDI,
como o próprio nome diz serve como uma forma unificada e sistematizada de publi-
car ou também localizar serviços web, ele funciona como uma lista telefônica só que
para Web Services, O "Browser-accessible UDDI Business Registry (UBR)"é o regis-
tro acessado via browser, ele veio a público rapidamente logo após a especificação
sobre UDDI ser anunciada pela Microsoft, IBM e Ariba, ele integra de forma inteli-
gente os outros dois protocolos anteriormente citados, ele utiliza SOAP para a troca
de mensagens e WSDL para a descrição de como se comunicar.
A estrutura do registro de um serviço é composta por duas informações bási-
cas, que são a definição da informação que cada serviço oferece, a chave de como
criptografá-lo e uma API para consulta e update para o registro, que descreve como a
informação pode ser acessada e atualizada.
O UDDI como dito anteriormente funciona como uma lista telefônica, e portanto
nada mais justo que organizar a estrutura das informações da seguinte forma:
• Páginas brancas- possuem os nomes e detalhes do contato.
• Páginas amarelas- possuem os serviços organizados por tipo e regras de ne-
gócio.
• Páginas verdes- possuem dados técnicos sobre os serviços.
Nas "páginas brancas", temos a businessEntity, e ela pode ter uma ou mais ser-
viceEntity, porém cada serviceEntity não pode ter mais de uma businessEntity, e
as duas podem ter uma ou mais categoryBag para classificar a businessEntity ou
3.2. Web Services 22
a serviceEntity. As entidades são identificadas através de UUID (Universal Unique
Identifiers) que garante uma ID única para cada uma[6].
A figura 3.5, mostra uma businessEntity, ela possui o seu atributo de tag que é
único, diz o código de internacionalização do XML, dados da empresa e de contatos
dentro da empresa para quaisquer dúvidas.
Figura 3.5: Estrutura de uma interface UDDI [8].
Web Services possuem uma série de vantagens, tais como deixar um proces-
samento pesado a cargo de um servidor específico para tal tarefa, permitir acesso
facilitado através de browser de Internet, facilidade para desenvolver um cliente in-
dependentemente da arquitetura do servidor, por conta de sua inteligibilidade ao ser
humano e às conformidades especificadas nos documentos WSDL, distribuir proces-
samento para outros nós, entre outros.
3.2. Web Services 23
Porém, os Web Services possuem também algumas desvantagens, como por
exemplo a privacidade, o servidor do Web Service pode armazenar seus dados e
utilizá-los para algum fim de interesse próprio, como base para dados estatísticos.
Outro ponto relevante é a disponibilidade, é muito difícil ter a garantia de que um Web
service do qual somos dependentes esteja sempre disponível, ou então que não esteja
congestionado devido a requisições de outros usuários.
Capıtulo 4Implementação de aplicativos Android
Neste capítulo apresentaremos a API de desenvolvimento Android fornecida pelo
Google e como pode ser feita a implementação de um aplicativo Android capaz de
consumir um Web Service. Na seção 4.1 mostraremos as bibliotecas necessárias
para a criação do aplicativo e para consumir web services. Na seção 4.2 mostraremos
como criar um aplicativo que irá utilizar Web Services para fazer cálculos de números
primos remotamente.
4.1 Bibliotecas Essenciais
Para criação e envio de mensagens SOAP utilizaremos a KSOAP2, uma biblioteca
Java de uso livre, desenvolvida pela comunidade de desenvolvimento com foco no sis-
tema operacional Android. Iniciaremos apresentando o Android SDK, um conjunto de
ferramentas criado pelo Google para uso das API’s Android. Em seguida mostraremos
a estrutura do aplicativo, e quais os passos e configurações necessárias para fazer a
implementação do aplicativo e consumo do Web Service utilizando Ksoap2.
Na seção 4.1.1 apresentaremos a API de desenvolvimento Android fornecida pelo
Google. Na seção 4.1.2 apresentaremos a biblioteca KSOAP2 utilizada para consumir
Web Services.
24
4.2. Criando um aplicativo 25
4.1.1 API Android
O Google fornece uma série de API’s destinadas ao desenvolvimento de aplica-
tivos para a plataforma. A medida que o desenvolvimento do sistema operacional
evolui, surgem novas API’s com novas funcionalidades, de forma que cada versão do
sistema possui sua própria API. Neste trabalho utilizaremos a versão 2.3 do sistema,
chamada Ginger Bread [Apêndice A].
4.1.2 KSOAP2
Para criar um cliente capaz de consumir um Web Service com o Android, é ne-
cessário a utilização de uma biblioteca chamada KSOAP2. Com essa biblioteca é
possível criar os envelopes SOAP com os dados necessários (parâmetros e endereço
do Web Service) e fazer a chamada própriamente dita do serviço.
Na próxima seção mostraremos como criar um aplicativo Android e como utilizar a
KSOAP2 para consumir um Web Service.
4.2 Criando um aplicativo
Nesta seção mostraremos como criar um aplicativo simples, capaz de executar um
Web service. A idéia é demonstrar como é possível utilizar Web services para realizar
tarefas com um alto custo computacional que, por muitas vezes, pode ser inviável num
dispositivo móvel, seja por limitações de processamento e memória ou por questões
de economia de energia.
Como exemplo, desenvolvemos um aplicativo para fazer a contagem de números
primos em um determinado intervalo (de zero até n, onde n é um parâmetro informado
pelo usuário). Para a identificação de números primos, utilizamos o algoritmo “ Crivo
de Erastótenes” [1].
4.2.1 Interface do usuário
A base para as interfaces gráficas no Android é a classe View. Todos os elementos
visíveis ao usuário num aplicativo são derivados dessa classe. O Android fornece
alguns padrões de views pré-definidos como botões, campos de inserção de texto,
4.2. Criando um aplicativo 26
etc. As views de um aplicativo podem ser definidas por um XML no qual cada nó
representa uma view.
Figura 4.1: Exemplo de definição de uma view referente a uma caixa de edição de
texto.
A figura 4.1 mostra um exemplo de definição de uma view, na qual é especificado
o tipo EditText, uma view pré-definida pelo Android para representar caixas de texto.
Dentro dela, informamos alguns campos importantes, como o id (propriedade atra-
vés da qual a view sera identificada dentro do código), inputType (propriedade que
seleciona o tipo de dados que essa view irá receber, no caso será textos, podendo
também ser valores numéricos) e valores referentes ao layout e posicionamento da
view (layoutWidth, layoutHeigth, etc).
No código Java, essa view pode ser instanciada através do metodo findViewById,
encontrado na API, como mostra a figura 4.2.
Figura 4.2: Exemplo de código para instanciar uma view previamente definida.
4.2. Criando um aplicativo 27
Figura 4.3: Exemplo de código para o evento de Click do botao btnExecutar.
4.2.2 Estrutura do aplicativo
A interface do aplicatico criado é bastante simples. Consiste basicamente de um
campo de texto, onde o usuário deverá informar o parâmetro de entrada, um seletor
onde o usuário poderá escolher o local de execução do serviço (no próprio aparelho
ou via Web Service) e um botão que, quando pressionado, irá executar o cálculo dos
números primos. A figura 4.4 mostra a interface gráfica do aplicativo.
Figura 4.4: Interface renderizada do aplicativo.
A estrutura criada para montar a interface foi implementada como na figura 4.5
4.2. Criando um aplicativo 28
Figura 4.5: Hierarquia definida para as views no aplicativo desenvolvido.
A interface do aplicativo é criada com o uso de views. Cada componente da tela
é uma view independente e pode conter, dentro de si, outras views. Na figura 4.5
vemos o uso de uma view base chamada RelativeLayout, trata-se de um tipo de layout
onde a posição dos elementos é definida em relação às demais views que compõem
a tela. Sobre a view RelativeLayout, temos um campo de edição de textos (EditText1),
um botão (Button) e um seletor (RadioGroup), sobre o qual existem outras três views
representando as opções. Todas esses tipos de view e várias outras estão disponíveis
na API.
A utilização do aplicativo deverá ser feita da seguinte maneira:
1. O usuário deverá informar no campo de texto, um número n, de forma que o
aplicativo identifique os primeiros números primos no intervalo de zero a n.
2. O usuário deverá escolher uma entre três opções de execução: local (nesse
caso o algoritmo será executado no próprio dispositivo), Servidor compartilhado
(executar o algoritmo num Web service hospedado num servidor comum, com
pouco poder computacional) ou Servidor dedicado (executar num Web Service
hospedado num servidor dedicado, com um maior poder computacional).
3. Depois de informado o parâmetro n e o local de execução, o usuário deve pres-
sionar o botão “Executar”. O aplicativo irá fazer os cálculos necessários e exibir
4.2. Criando um aplicativo 29
uma mensagem na tela informando o número de primos contados e o tempo de
execução (ou eventuais erros que possam vir a ocorrer). Também será gerado
um log em um arquivo de texto, que será utilizado posteriormente para análises
estatísticas.
O algorítmo 4.1 define a interface implementada segundo a hierarquia sugerida
para o aplicativo na figura 4.5:
Algorítmo 4.1: XML de definição da interface do aplicativo
1 <Rela t iveLayout xmlns:andro id=" h t t p : / / schemas . andro id . com/ apk / res / andro id "
2 xm lns : too l s = " h t t p : / / schemas . andro id . com/ t o o l s "
3 and ro id : l ayou t_w id th =" match_parent "
4 and ro i d : l a you t_he igh t = " match_parent "
5 t o o l s : c o n t e x t = " . M a i n A c t i v i t y " >
6 <Ed i tTex t
7 a n d r o i d : i d = "@+ i d / ed i tTex t1 "
8 and ro id : l ayou t_w id th =" wrap_content "
9 and ro i d : l a you t_he igh t = " wrap_content "
10 a n d r o i d : l a y o u t _ a l i g n P a r e n t L e f t = " t r ue "
11 and ro id : l ayou t_a l i gnPa ren tR igh t = " t r ue "
12 andro id : layou t_a l ignParen tTop=" t rue "
13 android:ems=" 10 "
14 andro id : inpu tType=" t e x t " >
15 <requestFocus / >
16 < / Ed i tTex t>
17 <Button
18 a n d r o i d : i d = "@+ i d / btnExecutar "
19 and ro id : l ayou t_w id th =" wrap_content "
20 and ro i d : l a you t_he igh t = " wrap_content "
21 a n d r o i d : l a y o u t _ c e n t e r H o r i z o n t a l = " t r ue "
22 a n d r o i d : l a y o u t _ c e n t e r V e r t i c a l = " t r ue "
23 a n d r o i d : t e x t = " Executar " / >
24 <RadioGroup
25 a n d r o i d : i d = "@+ i d / radioGroup2 "
26 and ro id : l ayou t_w id th =" wrap_content "
27 and ro i d : l a you t_he igh t = " wrap_content "
28 andro id : layou t_be low="@+ i d / ed i tTex t1 " / >
29 <RadioButton
30 a n d r o i d : i d = "@+ i d / rad io0 "
31 and ro id : l ayou t_w id th =" wrap_content "
32 and ro i d : l a you t_he igh t = " wrap_content "
33 android:checked=" t rue "
34 a n d r o i d : t e x t = " Local " / >
4.2. Criando um aplicativo 30
35 <RadioButton
36 a n d r o i d : i d = "@+ i d / rad io1 "
37 and ro id : l ayou t_w id th =" wrap_content "
38 and ro i d : l a you t_he igh t = " wrap_content "
39 a n d r o i d : t e x t = "WS − Compart i lhado " / >
40 <RadioButton
41 a n d r o i d : i d = "@+ i d / rad io2 "
42 and ro id : l ayou t_w id th =" wrap_content "
43 and ro i d : l a you t_he igh t = " wrap_content "
44 a n d r o i d : t e x t = "WS − Dedicado " / >
45 < / RadioGroup>
46 < / Re la t i veLayout>
Na primeira linha, temos a definição da view principal que define o tipo de layout
utilizado. Dentro dela, encontramos as demais views e as definições de suas proprie-
dades.
Na ação de clique do botão Executar, o aplicativo deverá recuperar o parâmetro
passado na EditText, convertê-lo para um valor numérico e fazer a chamada do ser-
viço. Isto é feito no algorítmo 4.2 :
Algorítmo 4.2: Método OnCreate da Activity e tratamento da ação de clique do botão
1 @Override
2 protected void onCreate ( Bundle savedInstanceState ) {
3 super . onCreate ( savedInstanceState ) ;
4 setContentView (R. l ayou t . a c t i v i t y _ m a i n ) ;
5 t x t = ( Ed i tTex t ) f indViewById (R. i d . ed i tTex t1 ) ;
6 rad io = ( RadioGroup ) f indViewById (R. i d . radioGroup2 ) ;
7 btnLoca l = ( Button ) f indViewById (R. i d . btnExecutar ) ;
8 btnLoca l . se tOnCl i ckL is tener (new View . OnCl ickL is tener ( ) {
9
10 @Override
11 public void onCl ick ( View v ) {
12
13 / / base para contagem de tempo (em ms)
14 long t ime = System . c u r r e n t T i m e M i l l i s ( ) ;
15 Long TotalPr imosCalculados ;
16
17 / / Recuperar o parametro informado na caixa de tex to
18 long param = Long . parseLong ( t x t . getText ( ) . t o S t r i n g ( ) ) ;
19
20 /∗ Recuperar o index selecionado do radioGroup ∗ /
21 i n t rad ioBut ton ID = rad io . getCheckedRadioButtonId ( ) ;
4.2. Criando um aplicativo 31
22 selectedRadio = ( RadioButton ) f indViewById ( rad ioBut ton ID ) ;
23 i n t i dx = rad io . indexOfChi ld ( selectedRadio ) ;
24
25 /∗ A v a l i a r index para escolher o metodo ∗ /
26 i f ( i dx == 0 ) {
27 TotalPr imosCalculados = Calcu loLoca l ( param ) ;
28 } else i f ( i dx ==1) {
29 TotalPr imosCalculados = CalculoWSCompartilhado ( param ) ;
30 } else {
31 TotalPr imosCalculados = CalculoWSCompartilhado ( param ) ;
32 }
33
34 long endTime = System . c u r r e n t T i m e M i l l i s ( ) − t ime ;
35
36 }
37 } ) ;
38 }
No algorítmo 4.2, definimos o método OnCreate, que é executado no momento
da criação da Activity (ou seja, quando o aplicativo é iniciado). Dentro dele fazemos
o tratamento do parâmetro passado e da opção de execução escolhida. Definimos
também o método de OnClick do botão Executar. No momento do clique é chamada
uma subrotina para executar o algoritmo.
Algorítmo 4.3: Método utilizado para fazer a chamada ao Web service.1 / / executa o WS no server compart i lhado
2 public Long CalculoWSCompartilhado ( Long param ) {
3 Helper h = new Helper ( ) ;
4 h . SetMethod ( " ContaPrimos " ) ;
5 h . SetAct ion ( " h t t p : / / tempur i . org / ContaPrimos " ) ;
6 h . SetNamespace ( " h t t p : / / tempur i . org / " ) ;
7 h . SetURL ( " h t t p : / / p h y l l i p y . somee .com/ c r i v o . asmx" ) ;
8 return h . Ca l lSe rv i ce ( param ) ;
9 }
O algorítmo 4.3 mostra o uso de um helper criado para facilitar a utilização da
biblioteca KSOAP2. Aqui definimos algumas propriedades essenciais para a chamada
do serviço:
• Método- essa propriedade define o nome do método que deverá ser executado
no Web Service.
• Namespace- Namespace definido no Web Service no momento de sua criação.
4.2. Criando um aplicativo 32
• Action- Essa propriedade é, na verdade, uma combinação do Namespace com
o Método.
• URL- endereço do local onde o Web service está hospedado. Esse endereço
será utilizado para fazer a troca de mensagens.
O metodo CallService implementa os métodos necessários para a criação do
envelope SOAP e comunicação com o Web service.
Algorítmo 4.4: Implementação das funcionalidades necessárias para consumir o Web
service.
1 protected Long doInBackground ( Long arg0 ) {
2 i n t MSG_TIMEOUT = 150000;
3 SoapObject request = new SoapObject ( th is . Namespace , th is . Method ) ;
4
5 / / Adic iona a propr iedade " param " r e f e r e n t e ao parametro do ws
6 request . addProperty ( " param " , arg0 ) ;
7
8 / / Cr ia o envelope SOAP versao 1.1
9 SoapSer ia l i za t ionEnve lope envelope = new SoapSer ia l i za t ionEnve lope (
SoapEnvelope .VER11) ;
10
11 / / f l a g para ws .NET
12 envelope . dotNet = true ;
13
14 / / Cr ia o envelope com os dados da requ is i cao
15 envelope . setOutputSoapObject ( request ) ;
16
17 t ry {
18 / / Metodo que c r i a a conexao HTTP com o ws
19 HttpTransportSE andro idHt tpTranspor t = new HttpTransportSE ( th is .URL,
MSG_TIMEOUT) ;
20
21 / / executa a chamada do serv i co
22 andro idHt tpTranspor t . c a l l ( th is . Act ion , envelope ) ;
23
24 / / recuperar o SOAP de re to rno do WS
25 SoapObject resultsRequestSOAP = ( SoapObject ) envelope . bodyIn ;
26
27 / / recuperar o resu l tado da operacao e retorna−l o
28 S t r i n g re = resultsRequestSOAP . ge tProper tyAsSt r ing ( 0 ) ;
29 return Long . parseLong ( re ) ;
30 } catch ( Except ion e ) {
4.2. Criando um aplicativo 33
31 e . p r in tS tackTrace ( ) ;
32 }
33
34 / / Caso apresente erro , re to rna ra zero
35 return new Long ( 0 ) ;
36 }
O código 4 mostra a implementação e emprego dos objetos necessários para con-
sumir um Web Service. Na primeira linha, vemos a criação de um objeto SoapObject,
uma classe da biblioteca KSoap2 que tem por objetivo montar um pacote SOAP. Os
parâmetros necessários para a criação do pacote são: o namespace do serviço que
será executado e o nome do método desejado. Após a criação do pacote, adicio-
namos a propriedade param. Essa propriedade é referente ao parametro que deve
ser passado para o Web service (é importante que o nome fornecido seja o mesmo
do parametro escrito na descrição do Web service). A adesão da propriedade é feita
através do método addProperty do SoapObject.
Depois de criar o pacote, deve colocá-lo em um envelope e serializá-lo. Isso é
feito com o auxílio da classe SoapSerializationEnvelope, aqui informamos ao objeto a
versão SOAP desejada (em nosso caso 1.1).
Por fim, utilizamos a classe HttpTransportSE para criar a conexão entre o aplica-
tivo e o Web Service utilizando o protocolo HTTP. O envio da requisição é feito através
do método call, informando como parâmetros a ação que deverá ser executada (Ac-
tion) e o envelope contendo o pacote SOAP. A resposta da chamada fica armazenado
na propriedade bodyIn do envelope, de forma que as propriedades de retorno podem
ser acessadas com o uso do metodo getPropertyAsString(index) que retornará o va-
lor da propriedade indicada. Esse valor será o retorno do Web Service e deve ser
interpretado de acordo com cada serviço.
Com o uso da biblioteca Ksoap2, o consumo de Web services a partir de dispo-
sitivos móveis com o sistema operacional Android pode ser feito de forma bastante
simples e rápida. No capítulo seguinte mostraremos alguns dos resultados obtidos na
execução dos Web services.
Mostraremos também uma comparação de desempenho para rodar o algoritmo
Crivo de Erastótenes com processamento local (no aparelho) e através de Web servi-
ces.
Capıtulo 5Conclusão
O uso de Web services pode ser uma ótima alternativa para a execução de progra-
mas com elevado custo computacional em dispositivos móveis que possuem recursos
limitados. Com eles, podemos utilizar outras fontes de processamento para tratar pro-
blemas mais complexos. Para isso basta que o dispositivo utilizado possua acesso à
rede (seja via Wifi, 3G ou qualquer outra tecnologia análoga).
Neste capítulo mostraremos alguns dos resultados obtidos com a aplicação de-
senvolvida durante o trabalho.
5.1 Testes realizados
Neste trabalho demonstramos o uso de Web Services para realizar duas tarefas.
A primeira é fazer uma contagem dos n primeiros primos, um problema simples mas
que por vezes pode exigir um tempo considerável para ser executado. A segunda
tarefa é calcular a matriz resultante da multiplicação de duas matrizes quadradas de
ordem n, um problema de custo computacional elevado e que, ao contrário do primeiro
problema, exige a necessidade de enviar uma grande quantidade de dados através da
rede.
Para comparar o desempenho, implementamos o calculo de duas formas:
1. executando localmente
2. executando através de um Web service em um servidor compartilhado
34
5.1. Testes realizados 35
O Web Service foi implementado utilizando a tecnologia .NET da Microsoft (o
WSDL referente ao Web Service criado pode ser visto no apêndice C ).
Os testes locais foram executados em um celular Motorola com processador de
1Ghz e 512mb de memória RAM. O servidor compartilhado utilizado possui um pro-
cessador de 2.5Ghz e 2Gb de memória (estes recursos são compartilhados entre os
demais usuários do servidor).
Para os testes do primeiro problema foram utilizados diversos valores para n, va-
riando de 1.000 a 2.000.000. Para cada valor selecionado, o aplicativo foi executado
nas duas opcões disponíveis. Notamos que, inicialmente, o desempenho para proces-
samento local é superior, sugerindo que o tempo de processamento é menor do que
o necessário para comunicar-se e trocar mensagens com o Web Service. Essa dife-
rença muda à medida que o parâmetro de entrada aumenta, de forma que a execução
através de web services pode chegar a ser até 10 vezes mais rápida em relação à
local [Figura 5.1].
Figura 5.1: Gráfico comparando desempenho para cálculo de primos.
Para o teste de multiplicação de matrizes, foram utilizadas matrizes quadradas
de ordem n, com n variando de 50 a 500. O objetivo deste teste era verificar se o
uso de Web Services ainda é vantajoso quando o custo de envio das mensagens é
muito elevado. Nesse caso o tamanho dos dados enviados nas mensagens aumenta
significativamente conforme o parâmetro de entrada.
O Web Service responsável pela multiplicação de matrizes recebe como parâme-
tro um inteiro que indica a ordem da matriz e um array de bytes contendo as matrizes
5.2. Trabalhos futuros 36
de entrada codificadas e devolve um array de bytes contendo a matriz resultante codi-
ficada.
A Figura 5.2 mostra os resultados obtidos na execução do segundo problema.
Observamos que mesmo com a necessidade de enviar uma grande quantidade de
dados pela rede, o uso de Web Services ainda se mostra vantajoso em relação ao
processamento local (no dispositivo) para matrizes de ordem elevada.
Figura 5.2: Gráfico comparando desempenho para multiplicação de matrizes.
Os resultados obtidos mostraram que o uso de Web Services pode ser uma boa
alternativa para problemas de alto custo computacional em dispositivos móveis. Além
disso podem ser usados também com seu proposito original de servir como forma de
integração entre sistemas. Nesse caso, integrando dispositivos movéis com uma série
de sistemas já existentes, dentre os quais podemos destacar instituições financeiras
que usam Web Services para efetuar transações através da internet, integração com
sistemas de bancos de dados remotos, entre outras.
5.2 Trabalhos futuros
Um outro tipo de serviço que está em ascensão e pode ser utilizado como meca-
nismo de integração de dispositivos Android com sistemas remotos são os chamados
RestFul Web Services. Em trabalhos futuros podem ser analisadas as diferenças de
desempenho com o uso de Web Services e RestFul Web Services.
Referências Bibliográficas
[1] Crivo de erastótenes. [Online; Acessado em 17-jan-2013].. Disponível em http:
//pt.wikipedia.org/wiki/Crivo_de_Erastotenes.
[2] Worldwideweb: Proposal for a hypertext project (em inglês). [Online; Acessado
em 26-fev-2013].. Disponível em www.w3.org/Proposal.html.
[3] Android deteve 70 do mercado mundial de smartphones em
2012, 2012. [Online; Acessado em: 6/3/2013].. Disponí-
vel em http://mobileexpert.com.br/mercado-telecom/materias/2198/
android-deteve-70-do-mercado-mundial-de-smartphones-em-2012.
[4] Open Handset Alliance. Industry leaders announce open platform for mo-
bile devices. [Online; Acessado em: 20-fev-2013].. Disponível em http://www.
openhandsetalliance.com/press_110507.html.
[5] Open Handset Alliance. Open handset alliance releases android sdk. [Online;
Acessado em: 11-dez-2012].. Disponível em http://www.openhandsetalliance.
com/press_111207.html.
[6] Gustavo Alonso e Fabio Casati. Web Services. Concepts, Architecture and appli-
cations. SPRINGER, 2010.
[7] Stefan Brahler. Analysis of the android architeture. 2010.
[8] Francisco Curbera, Matthew Duftler, Rania Khalaf, William Nagy, Nirmal Mukhi, e
Sanjiva Weerawarana. Unraveling the web services web, an introduction to soap,
wsdl, and uddi. 2002.
[9] D. Menasce e V. Almeida. Capacity Planning for Web Services. Prentice Hall,
2001.
37
Referências Bibliográficas 38
[10] Ben Elgin. Google Buys Android for Its Mobile Arsenal. Bloomberg Businessweek,
2005.
[11] eLinux.org Embedded Linux Wiki. Android kernel features, 2012. [Online;
acessado em 22-dez-2012].. Disponível em http://elinux.org/Android_Kernel_
Features.
[12] Roy Thomas Fielding. Architectural styles and the design of network-based
software architectures. 2000. Disponível em http://www.ics.uci.edu/~fielding/
pubs/dissertation/top.htm.
[13] Google Inc. Android guides, 2012. [Online; Acessado em: 29-nov-2012].. Dispo-
nível em http://developer.android.com/guide/components/index.html.
[14] Google Inc. Android software development kit (sdk)., 2012. [Online; acessado em
7-dez-2012].. Disponível em http://source.android.com/about/index.html.
[15] Heather Kreger. Web Services Conceptual architecture. IBM Software Group,
2001.
[16] David Luckham. The Power of Events: An Introduction to Complex Event Proces-
sing in Distributed Enterprise Systems. Addison-Wesley, 2002.
[17] Android Open Source Project. About the android open source project, 2012.
[Online; acessado em 11-dez-2012].. Disponível em http://source.android.com/
about/index.html.
[18] Rick Rogers, John Lombardo, Zigurd Mednieks, e Blake Meike. Android Applica-
tion Development: Programming with the Google SDK. OReilly Media, 2009.
[19] Mike Kopack Stephen Potts. Aprenda 24 Horas Web Services. Editora Campus,
2003.
[20] Doug Tidwell, James Snell, e Pavel Kulchenko. Programming Web Services with
SOAP. O’Reilly, 2001.
[21] W3C. Programação orientada a eventos. [Online; Acessado em: 02-fev-
2013].. Disponível em http://pt.wikipedia.org/wiki/Programac~ao_orientada_a_
eventos.
[22] W3C. Web service description language - wsdl, 2001. [Online; Acessado em:
17-set-2012].. Disponível em http://www.w3.org/TR/wsdl.
Referências Bibliográficas 39
[23] W3C. Extensible markup language (xml), 2007. [Online; Acessado em: 17-set-
2012].. Disponível em http://www.w3.org/TR/xml11.
[24] W3C. Simple object access protocol - soap, 2007. [Online; Acessado em: 17-set-
2012].. Disponível em http://www.w3.org/TR/soap/.
Apendice BExtensible Markup Language
A Extensible Markup Language, comumente chamada por XML, surgiu da neces-
sidade de uma padronização para a troca de dados entre os computadores/sistemas
com alto nível de portabilidade e que pudesse fornecer uma inteligibilidade às pes-
soas.
Basicamente, a XML organiza os dados de forma estruturada em um documento
XML usando tags ao estilo da HTML, o vocabulário usado pelas tags é definido pelo
usuário de acordo com sua necessidade, e deve ser respeitado algumas regras gra-
maticais no documento XML, que são:
• A tag inicial é a “raiz”.
• Cada tag deve possuir a tag final correspondente.
• É Case Sensitive, ou seja, diferencia maiúsculas de minúsculas.
• Cada valor de atributo de tag deve estar entre aspas.
• As tags devem estar aninhadas corretamente.
• É necessário ter cuidado com caracteres especiais.
• No cabeçalho deve conter a seguinte linha: <?xml version=’1.0’ ?>.
Dessa forma, um documento que respeita essas regras é considerado um docu-
mento consistente. Caso uma ou mais regras não sejam respeitadas, os erros retor-
narão na hora da análise do documento.
Esse documento é apenas um dos componentes que integram a XML, vejamos
abaixo outros exemplos de componentes:
42
43
• Parser XML - Recebe como insumo um documento XML e faz a leitura dos dados
e os retorna de forma organizada ao programa que o chamou, esse, por sua vez,
pode organizar os dados em sua estrutura na forma que desejar, e usar ou não
o dado recebido.
• Document Type Definition - Comumente chamado apenas por DTD, é respon-
sável por especificar quais são as tags passíveis de uso e as relações entre
elas, apesar de ainda ser facilmente encontrado, seu uso é desencorajado para
projetos novos, pois vem sendo substituído pelo Esquema XML desde 2001.
• Esquema XML - Basicamente funciona como o DTD, porém possui algumas
outras funcionalidades ao invés de apenas validar as tags e especificar seus
relacionamentos, como, por exemplo, declarar o tipo do atributo e a faixa de
valores que ele pode assumir. Sem mencionar o fato que essa validação é feita
fora do programa por um Parser XML, dessa forma evita a reescrita de código
sempre que for usá-lo por outros programas.
• Namespace- O namespace fica contido no esquema, ele serve para que tags
que possuem o mesmo nome, porém de projetos/áreas diferentes, conflitem com
as do projeto/programa principal.
Portanto, sendo um padrão que é mantido pelo W3C foi bem recebido pelo mer-
cado pela usa simplicidade para a padronização de troca de informações entre siste-
mas e aplicações de forma ágil, tornando-se “de fato” uma referência.
Apendice CWSDL do trabalho prático
Algorítmo C.1: WSDL do trabalho prático
1 <?xml version=" 1.0 " encoding=" u t f −8" ?>
2 < w s d l : d e f i n i t i o n s xmlns:tm=" h t t p : / / m i c roso f t . com/ wsdl / mime / tex tMatch ing / "
xmlns:soapenc=" h t t p : / / schemas . xmlsoap . org / soap / encoding / " xmlns:mime="
h t t p : / / schemas . xmlsoap . org / wsdl / mime / " xmlns : tns=" h t t p : / / tempur i . org / "
xmlns:soap=" h t t p : / / schemas . xmlsoap . org / wsdl / soap / " xmlns:s=" h t t p : / /www.
w3 . org /2001/XMLSchema" xmlns:soap12=" h t t p : / / schemas . xmlsoap . org / wsdl /
soap12 / " xm lns :h t tp= " h t t p : / / schemas . xmlsoap . org / wsdl / h t t p / "
targetNamespace=" h t t p : / / tempur i . org / " xmlns:wsdl= " h t t p : / / schemas . xmlsoap
. org / wsdl / ">
3 <wsd l : t ypes>
4 <s:schema elementFormDefault= " q u a l i f i e d " targetNamespace=" h t t p : / /
tempur i . org / ">
5 <s:e lement name=" ContaPrimos ">
6 <s:complexType>
7 <s:sequence>
8 <s:e lement minOccurs=" 1 " maxOccurs=" 1 " name=" param " type="
s : l ong " / >
9 < / s:sequence>
10 < / s:complexType>
11 < / s:e lement>
12 <s:e lement name=" ContaPrimosResponse ">
13 <s:complexType>
14 <s:sequence>
15 <s:e lement minOccurs=" 1 " maxOccurs=" 1 " name=" ContaPrimosResult "
type=" s : l ong " / >
16 < / s:sequence>
17 < / s:complexType>
18 < / s:e lement>
44
45
19 < / s:schema>
20 < / wsd l : t ypes>
21 <wsdl:message name=" ContaPrimosSoapIn ">
22 < w s d l : p a r t name=" parameters " element= " tns:ContaPrimos " / >
23 < / wsdl:message>
24 <wsdl:message name=" ContaPrimosSoapOut ">
25 < w s d l : p a r t name=" parameters " element= " tns:ContaPrimosResponse " / >
26 < / wsdl:message>
27 <wsdl :por tType name=" crivoSoap ">
28 <wsd l :ope ra t i on name=" ContaPrimos ">
29 < w s d l : i n p u t message=" tns:ContaPrimosSoapIn " / >
30 <wsd l :ou tpu t message=" tns:ContaPrimosSoapOut " / >
31 < / wsd l :ope ra t i on >
32 < / wsdl :por tType>
33 <wsd l :b ind ing name=" cr ivoSoap " type=" tns :c r i voSoap ">
34 <soap:b ind ing t r a n s p o r t = " h t t p : / / schemas . xmlsoap . org / soap / h t t p " / >
35 <wsd l :ope ra t i on name=" ContaPrimos ">
36 <soap:opera t ion soapAct ion=" h t t p : / / tempur i . org / ContaPrimos " s t y l e ="
document " / >
37 < w s d l : i n p u t >
38 <soap:body use=" l i t e r a l " / >
39 < / w s d l : i n p u t >
40 <wsd l :ou tpu t>
41 <soap:body use=" l i t e r a l " / >
42 < / wsd l :ou tpu t>
43 < / wsd l :ope ra t i on >
44 < / wsd l :b ind ing >
45 <wsd l :b ind ing name=" crivoSoap12 " type=" tns :c r i voSoap ">
46 <soap12:b inding t r a n s p o r t = " h t t p : / / schemas . xmlsoap . org / soap / h t t p " / >
47 <wsd l :ope ra t i on name=" ContaPrimos ">
48 <soap12:operat ion soapAct ion=" h t t p : / / tempur i . org / ContaPrimos " s t y l e ="
document " / >
49 < w s d l : i n p u t >
50 <soap12:body use=" l i t e r a l " / >
51 < / w s d l : i n p u t >
52 <wsd l :ou tpu t>
53 <soap12:body use=" l i t e r a l " / >
54 < / wsd l :ou tpu t>
55 < / wsd l :ope ra t i on >
56 < / wsd l :b ind ing >
57 < wsd l : se rv i ce name=" c r i v o ">
58 < w s d l : p o r t name=" cr ivoSoap " b ind ing=" tns :c r i voSoap ">
59 <soap:address l o c a t i o n =" h t t p : / /www. p h y l l i p y . somee .com/ c r i v o . asmx" / >
60 < / w s d l : p o r t >