Upload
volien
View
212
Download
0
Embed Size (px)
Citation preview
Capítulo
1
Desenvolvimento de Sistemas Sensíveis ao
Contexto usando Web Services
Carlos E. Cirilo, Alexandre Bellini, Antonio F. do Prado, e Luciana A. M. Zaina
Abstract
In this times when people need to process more information to perform their tasks in less
time, new challenges for software engineers arise: how to reduce the need for users’
explicit interactions to obtain what they need? How to provide users only the relevant
information at a given time? How to adapt applications to different devices that support
users in carrying out their tasks? These and other questions have led to the development of
Context-Sensitive Systems (CSS), which are capable of adapting their operations in order
to improve usability and efficiency by using information taken out of the environment in
which they operate. However, CSS development is not a trivial task, mainly due to the need
to manipulate heterogeneous sources for acquisition of contextual information for use in
application. In this sense, this mini-course introduces the concepts related to CSS
development from a service-oriented perspective.
Resumo
Em uma época em que as pessoas necessitam processar mais informação para
desempenhar suas tarefas em menos tempo, novos desafios surgem para os engenheiros de
software: como reduzir a necessidade de interações explícitas dos usuários com a
aplicação a fim de obterem o que precisam? Como fornecer aos usuários somente as
informações que lhes são relevantes em um dado momento? Como adaptar as aplicações
aos diferentes dispositivos que apoiam os usuários na execução de suas tarefas? Essas e
outras questões têm levado ao desenvolvimento dos Sistemas Sensíveis ao Contexto (SSCs),
os quais são capazes de adaptar suas operações com o intuito de melhorar a usabilidade e
eficiência usando informações extraídas do ambiente em que operam. O desenvolvimento
de SSCs, no entanto, não é uma tarefa trivial, principalmente devido à necessidade de
manipular fontes heterogêneas para aquisição das informações contextuais para uso na
aplicação. Neste sentido, este minicurso apresenta os conceitos relacionados ao
desenvolvimento de SSCs a partir de uma perspectiva orientada a serviços.
1.1. Introdução
Desde o surgimento da ciência da computação, talvez uma das maiores mudanças que se
pôde testemunhar tenha sido o grau com que os computadores tornaram-se essenciais na
vida das pessoas (Lucrédio, 2009). Ao longo dos anos, os computadores passaram a estar
cada vez mais presentes nas tarefas cotidianas e mais próximos dos usuários. Seja em casa
ou no trabalho, para acessar os e-mails, editar textos, comunicar-se com outras pessoas, ver
as notícias do dia ou acessar a conta bancária, é difícil imaginar o mundo sem a presença
dessas incríveis máquinas.
Nos primórdios da computação, em torno da década de 1940, surgiram os
computadores de grande porte, denominados mainframes. Esses computadores geralmente
ocupavam um grande espaço e possuíam acesso restrito. Com o surgimento dos primeiros
computadores pessoais (PCs), entre as décadas de 1970 e 1980, houve uma popularização
dos computadores. Os PCs possibilitaram aos usuários a realização de tarefas diversas, tais
como processamento de texto, navegação na Internet, jogos e programação. O advento da
Internet e dos ambientes de computação distribuída permitiu a interconexão dos
computares para compartilhamento de informações, o que ampliou os serviços oferecidos e
aumentou a complexidade das aplicações desenvolvidas.
Nos anos recentes, com a evolução das tecnologias de comunicação sem fio, dos
microprocessadores e dos dispositivos eletrônicos digitais de uso pessoal, tornou-se possível
fornecer aos usuários, de qualquer lugar, a qualquer hora e usando qualquer tipo de
dispositivo, o fácil acesso a serviços e aplicações. Essas capacidades levaram ao surgimento
do conceito de ubiquidade na computação (Araújo, 2003). A Computação Ubíqua (Weiser,
1999), a qual tem sido considerada a nova era da computação, compreende um universo
formado por uma grande variedade de dispositivos computacionais que permeiam cada vez
mais o cotidiano das pessoas, como telefones celulares, PDAs (Personal Digital Assistants),
smartphones, dentre outros. Um dos propósitos desse novo paradigma computacional é
ampliar as atividades humanas com novos serviços que possam se adaptar às circunstâncias
em que serão utilizados (Coutaz et al., 2005).
Neste cenário, uma classe de sistemas, chamados de Sistemas Sensíveis ao
Contexto (SSCs), utilizam de informações extraídas do contexto da interação para fornecer
serviços adaptados e relevantes na realização das tarefas do usuário (Baldauf; Dustdar;
Rosenberg, 2007). O desenvolvimento de software neste cenário apresenta uma série de
desafios, dentre os quais a necessidade de suporte a diferentes dispositivos em contextos
distintos (Viana e Andrade, 2008).
Neste sentido, um dos aspectos críticos para o desenvolvimento de SSCs que
operam em ambientes ubíquos é a premissa de que os mesmos devem ser capazes de
executar e se adaptar à heterogeneidade dos dispositivos computacionais do usuário e do
ambiente no qual ele está imerso. Desenvolver um SSC, no entanto, pode ser uma tarefa
complexa e cara, principalmente devido à necessidade de manipular diferentes fontes para
aquisição das informações contextuais para uso nas aplicações (Santos, 2008; Vieira;
Tedesco; Salgado, 2009).
Além disso, devido à infinidade de adaptações possíveis e muitas vezes necessárias,
implementar todas elas pode demandar muito tempo de desenvolvimento. Por outro lado,
utilizar as funcionalidades de adaptação na forma de serviços surge com uma alternativa
que pode facilitar e agilizar o processo de desenvolvimento de aplicações adaptativas. Os
serviços também favorecem o baixo acoplamento e interoperabilidade entre diferentes
plataformas. Embora as Arquiteturas Orientadas a Serviço (SOA) (Erl, 2007) tenham suas
origens há mais de uma década, voltaram a ganhar destaque recentemente como um padrão
e uma tecnologia capaz de melhorar consideravelmente a interoperabilidade entre
aplicações de software. E foi neste escopo que os Web Services assumiram uma posição
central como a tecnologia que melhor viabiliza o desenvolvimento de SOA.
Dessa forma, o objetivo deste minicurso é apresentar aos participantes os
conceitos relacionados ao desenvolvimento de Sistemas Sensíveis ao Contexto e SOA, de
forma que, ao término do minicurso, os participantes sejam capazes de identificar e
planejar como a análise e o tratamento do contexto podem ser aplicados para desenvolver
soluções de software que se adaptam a múltiplos contextos com o uso de serviços.
1.2. Sistemas Sensíveis ao Contexto
A sensibilidade ao contexto está relacionada com a adaptação da aplicação de acordo com
sua localização de uso, as pessoas ou objetos circundantes, bem como as mudanças que
ocorrem nesses objetos ao longo do tempo (Coutaz et al., 2005; Dey, 2001; Schilit e
Theimer, 1994). Um SSC é capaz de adaptar suas operações sem a necessidade de
intervenção explícita do usuário, fornecendo informações e/ou serviços que são relevantes
para o usuário realizar suas tarefas considerando as informações extraídas do contexto da
interação (Baldauf; Dustdar; Rosenberg, 2007; Dey, 2001).
O contexto desempenha um papel primordial para permitir que os sistemas refinem a
informação disponível em informação relevante, escolham ações apropriadas a partir de uma
lista de possibilidades, ou determinem o melhor método para a disponibilização da informação.
O contexto guia as variações do comportamento do SSC, enriquecendo a interação do usuário
tanto por influenciar recomendações ou por executar adaptações de qualquer tipo (Santos,
2008). Por exemplo, entre as ações realizadas por um SSC pode-se mencionar a adaptação de
conteúdo, na qual um conteúdo original é convertido em uma série de novos formatos
compatíveis com o contexto de entrega. Essa adaptação pode ser, por exemplo, uma
transformação, onde a linguagem de marcação de uma interface Web é modificada para se
ajustar mais apropriadamente ao perfil do dispositivo, e/ou uma transcodificação, pela qual
imagens são convertidas ou redimensionadas (Forte; de Souza; Prado, 2008).
Desenvolver um SSC, contudo, é uma tarefa complexa e cara. Ao projetar um
sistema sensível ao contexto deve-se lidar com questões associadas com qual tipo de
informação pode ser considerado como contexto, como representar essa informação, como
adquirir e processar essa informação uma vez que pode ser oriunda de fontes heterogêneas,
e como integrar o uso do contexto no sistema. Além disso, por ser uma área de estudo
recente dentro da Ciência da Computação e ainda não haver um consenso dos conceitos
associados ao contexto (Dourish, 2001; Santos, 2008), existe uma dificuldade entre os
desenvolvedores para distinguir os aspectos relacionados aos requisitos de negócio da
aplicação daqueles referentes à manipulação do contexto, o que indica a ausência de
suporte de Engenharia de Software (e.g. processos, métodos, ferramentas) que apoie os
projetistas desse tipo de sistema no desenvolvimento de suas aplicações (Santos, 2008).
1.2.1. Contexto Computacional
Muitas definições para contexto já foram propostas para torná-lo um conceito operacional
em termos computacionais. Bazire e Brézillon (2005) catalogaram mais de 150 definições
para o termo contexto e concluíram que sua definição varia fortemente à medida que se
transita entre diferentes domínios. Apesar da variedade de definições, os pesquisadores, em
geral, concordam que: o contexto está sempre associado com alguma entidade (e.g. tarefas,
agente, interação); o contexto é um conjunto de itens associados a uma entidade (e.g.
conceitos, regras e proposições); e um item é considerado como parte de um contexto se for
útil para apoiar na realização da tarefa a ser desempenhada (Santos, 2008).
Segundo o Dicionário Merriam-Webster1, contexto é definido como “condições
inter-relacionadas nas quais alguma coisa existe ou ocorre”. O contexto é o que fundamenta
a habilidade de identificar o que é e o que não é relevante em um dado momento (Santos,
2008). Uma definição operacional para contexto amplamente referenciada declara que o
contexto é qualquer informação que pode ser usada para caracterizar a situação de uma
entidade. Essa entidade pode ser uma pessoa, um lugar, ou um objeto que é considerado
relevante para a interação do usuário com a aplicação, inclusive eles próprios (Dey, 2001).
De maneira similar, Brézillon (1999) considera o contexto como um conjunto de
condições relevantes e influências que possibilitam a compreensão de uma situação, onde
tais condições e influências atuam diretamente sobre entidades do domínio considerado.
Além disso, Brézillon e Pomerol (1999) introduzem a noção de foco, declarando que o
contexto não é um conceito isolado, mas que está sempre relacionado a um foco que
determina o que deve ser considerado como relevante. Esse foco representa uma tarefa a
ser executada ou uma etapa na resolução de um problema ou tomada de decisão.
Uma definição mais recente, derivada das definições anteriores, propõe que para
um melhor entendimento do que é contexto e como utilizá-lo nas aplicações deve-se
estabelecer a distinção entre contexto e elemento contextual. Essa definição declara que um
elemento contextual (EC) é qualquer dado ou informação que permite caracterizar uma
entidade em um domínio, e que o contexto de uma interação entre um agente (humano ou
software) e uma aplicação, com foco em alguma tarefa, é o conjunto de ECs instanciados
que são necessários para apoiar a tarefa a ser executada (Vieira; Tedesco; Salgado, 2009).
Essa definição torna mais fácil para um desenvolvedor enumerar o contexto de um dado
cenário de aplicação. Neste caso, se determinada informação que caracteriza uma entidade
em uma interação for útil para apoiar a tarefa a ser executada (foco), então essa informação
é um elemento contextual, que por sua vez compõe o contexto daquela interação.
Por exemplo, suponha uma aplicação Web que adapta sua interface gráfica conforme
o perfil do dispositivo de acesso, fornecendo interfaces que não se distorcem quando
visualizadas em diferentes dispositivos. A tarefa a ser desempenhada, neste caso, é adaptar a
interface da aplicação. Para este foco, se for considerada a resolução de tela do dispositivo,
percebe-se que tal informação é útil, pois fornece subsídios para redimensionar o conteúdo da
página Web de forma que se encaixe na tela do dispositivo do usuário. Logo, de acordo com a
definição precedente, esse elemento contextual faz parte do contexto da interação. Por outro
lado, se for considerada a temperatura do ambiente em que o usuário encontra-se atualmente,
descobre-se que tal informação, apesar de fazer parte da situação, não é relevante para a tarefa
em questão e, portanto, não compõe o contexto daquela interação.
1.2.2. Arquitetura de um SSC
Sistemas sensíveis ao contexto podem ser implementados de diversas maneiras. A
arquitetura do sistema depende de requisitos e condições especiais, dentre os quais o
método de aquisição dos elementos contextuais exerce bastante influência na definição do
estilo arquitetural do sistema (Baldauf; Dustdar; Rosenberg, 2007).
1 http://www.merriam-webster.com/.
Chen (2004) apresenta três diferentes abordagens para aquisição dos elementos
contextuais:
Acesso direto às fontes de contexto2: nesta abordagem, a aplicação cliente obtém
os elementos contextuais diretamente das fontes de contexto disponíveis. Não há
uma camada adicional para tratamento do contexto, de forma que o código para
aquisição e processamento dos elementos contextuais fique atrelado ao código das
regras de negócio da aplicação.
Infraestrutura intermediária: esta abordagem incorpora uma arquitetura
intermediária aos SSCs que encapsula a manipulação do contexto, ocultando os
detalhes de baixo nível de obtenção dos elementos contextuais de suas fontes de
origem. Esta abordagem favorece a extensibilidade, uma vez que o código da
aplicação cliente não necessita ser modificado caso haja alterações na forma de
aquisição dos elementos contextuais.
Servidor de contexto: esta abordagem estende a arquitetura baseada em infraestrutura
intermediária, introduzindo um componente remoto de gerenciamento de acesso às
fontes de contexto. A obtenção dos elementos contextuais é realizada em um servidor,
chamado servidor de contexto, para facilitar múltiplos acessos simultâneos. Esta
abordagem alivia as aplicações clientes das operações intensivas para obtenção dos
elementos contextuais de suas fontes de origem, o que é um aspecto importante
considerando SSCs que executam em dispositivos com recursos limitados.
Dentre as abordagens apresentadas, o emprego da infraestrutura intermediária para
gerenciar o contexto introduz uma arquitetura em camadas ao SSC, o que possibilita
projetar uma camada específica para gerenciar o contexto. Ao contrário de uma abordagem
de acesso direto às fontes de contexto, a infraestrutura intermediária, além de permitir uma
maior extensibilidade ao sistema, possibilita o reúso da camada de gerenciamento de
contexto em diferentes aplicações (Baldauf; Dustdar; Rosenberg, 2007).
Fontes de Contexto
Consumidores de
Contexto
Aquisição
Processamento
Disseminação
Ge
ren
cia
do
r
de
Co
nte
xto
Figura 1.1. Modelo de arquitetura em camadas para um SSC (adaptado Santos, 2008)
A Figura 1.1 apresenta um modelo conceitual de arquitetura em camadas para um
SSC. A camada de gerenciamento de contexto posiciona-se entre as fontes e os
consumidores de contexto, de modo a fornecer os elementos contextuais adquiridos a partir
dessas fontes aos consumidores interessados. As fontes de contexto são elementos de
2 Na literatura, as fontes de contexto, sejam elas um hardware (e.g., um termômetro, um sensor de
movimento, uma câmera de vídeo) ou uma entidade lógica (e.g., uma base de dados, uma agenda
eletrônica) são também referenciadas como “sensores”. Uma vez que a palavra “sensor” usualmente
remete a uma entidade física, neste texto é utilizado o termo “fonte de contexto” para evitar
ambiguidades.
software (e.g. perfis armazenados, bases de dados externas, drivers de câmeras sensores)
que fornecem informações atualizadas sobre as entidades consideradas no domínio do SSC.
Os consumidores de contexto, por sua vez, são elementos de software que usam os
elementos contextuais relevantes para desempenhar algum comportamento sensível ao
contexto, como por exemplo, adaptação de conteúdo. Tanto as fontes quanto os
consumidores de contexto estão ligados ao gerenciador de contexto através de interfaces
(Santos, 2008).
A maioria das arquiteturas em camadas de SSCs existentes diferem entre si em
aspectos relacionados às funcionalidades fornecidas, à localização e nomeação das
camadas, dentre outras questões arquiteturais. Apesar disso, é possível identificar aspectos
comuns na arquitetura dos SSCs modernos (Baldauf; Dustdar; Rosenberg, 2007).
Conforme ilustrado na Figura 1, a camada de gerenciamento de pode englobar módulos
com funções para adquirir os elementos contextuais de suas fontes de contexto, processá-
los e disseminá-los aos consumidores de contexto. As funcionalidades presentes em cada
um desses módulos podem ser descritas como segue (Santos, 2008):
Aquisição: gerencia as fontes de contexto e recupera os elementos contextuais por
meio do uso de drivers e Application Programming Interfaces (APIs) que permitem
acesso às funcionalidades internas de cada fonte de contexto.
Processamento: raciocina e interpreta os elementos contextuais e transforma-os
em um formato ou em um nível de abstração adequado para que sejam utilizados
pelos consumidores de contexto. Além disso, este módulo realiza a combinação ou
agregação de diferentes elementos contextuais provenientes de múltiplas fontes de
contexto. Conflitos entre valores divergentes para um mesmo elemento contextual
obtidos de fontes distintas também são solucionados neste módulo.
Disseminação: organiza os elementos contextuais e os disponibiliza aos
consumidores de contexto através de uma interface pública. O consumidor pode
invocar o gerenciador de contexto para: obter o valor atual de um elemento contextual
específico, obter todos os elementos contextuais relacionados a uma determinada
entidade, ou verificar quais elementos contextuais são relevantes para um dado foco.
Nota-se, portanto, que a camada de gerenciamento de contexto é uma entidade que
envolve a definição de soluções que permitem separar as operações relacionadas à
manipulação de contexto das funcionalidades de negócio da aplicação (Vieira; Tedesco;
Salgado, 2009).
1.2.3. Exemplos de SSCs
“Um geólogo do Instituto Americano de Pesquisas em Geologia foi enviado a um local
remoto no oeste dos EUA para examinar os efeitos de um terremoto recente. Com auxílio
de um PC, e um software denominado MANNA3, que suporta as atividades do geólogo em
diferentes dispositivos, o geólogo faz o download de mapas e relatórios a respeito da
região afetada de modo a preparar-se para a visita. O PC impõe poucas restrições de
interface gráfica para visualização dos mapas, no entanto, é um equipamento inadequado
3 Aplicação multimídia que pode executar em diferentes plataformas e ser utilizada de forma colaborativa
pela Internet, permitindo que geologias, engenheiros e militares criem mapas anotados de áreas
geográficas utilizando texto, áudio e vídeo.
para ser carregado durante a viagem. O geólogo, então, transfere os documentos para um
laptotp e pega um avião até o local onde ocorreu o terremoto.
No avião não há conexões de rede, de forma que o laptop desabilita todos os
comandos que dependem de conexões. Quando o geólogo examina os vídeos do local, a
interface do usuário altera-se automaticamente para monitor preto e branco, e reduz a
taxa de quadros por segundo, para ajudar a conservar a bateria do dispositivo. Além
disso, componentes da interface gráfica são ajustados para suportar a interação através
de toque mais apropriada no laptop. Ao chegar ao aeroporto, o geólogo aluga um carro e
dirige-se ao local. Ele recebe uma mensagem através do sistema MANNA em seu celular,
alertando-o para examinar um local em particular. Como o celular oferece um espaço de
tela extremamente limitado, o mapa da região não é mostrado. Em vez disso, o celular
mostra a localização geográfica, orientações de direção para chegar ao local, e a posição
atual do geólogo em coordenadas latitude e longitude. Um recurso que permite ao geólogo
responder a mensagem também é oferecido pelo software.
Chegando ao local, o geólogo usa o seu palmtop para tomar notas sobre a região.
Como o palmtop conta com uma caneta de toque para interação, cliques duplos e cliques
com botão direito são desabilitados. Além disso, já que o tamanho de tela do laptop é
reduzido, um leiaute mais conservador da interface é utilizado pelo MANNA. Ao completar a
investigação, o geólogo prepara uma apresentação em dois formatos. Primeiro, uma
apresentação do seu percurso pelo local, com anotações, é feita para o HUD (heads-up
display). Como o HUD possui capacidades limitadas para entradas de texto, a aplicação
MANNA fornece interação baseada em voz. Outra apresentação, mais convencional, é
preparada para ser visualizada em monitores de alta resolução. Uma vez que esta se trata de
uma apresentação final, e os usuários não irão mais adicionar informações, mecanismos de
interação são removidos” (adaptado de Eisenstein; Vanderdonckt; Puerta, 2000).
O cenário narrado nos parágrafos anteriores e muitos outros podem ser concebidos
quando se pensa em sistemas que são cientes do contexto atual e podem realizar ações com
base nessas informações. Algumas questões associadas ao comportamento dos SSCs na
Computação Ubíqua, que podem ser observadas nesse cenário, são (Araújo, 2003):
A informação é acessada através de múltiplos dispositivos heterogêneos;
A aplicação segue o usuário em movimento;
Os dispositivos interagem entre si;
Algumas tarefas são executadas de forma autônoma;
Dispositivos diferentes apresentam visões diferentes da mesma aplicação;
O ambiente troca informações com os dispositivos e vice-versa;
A aplicação responde a mudanças no ambiente.
A seguir são apresentados alguns exemplos de SSCs que possuem tais
características.
Os guias turísticos móveis (Grün et al., 2008) têm por objetivo auxiliar o turista
durante suas viagens, fornecendo informações e serviços baseados na localização e
preferências do usuário. Os serviços fornecidos podem ser categorizados por diferentes
fatores, tais como: acomodação, emergência, entretenimento, gastronomia, navegação e
orientação, páginas amarelas, notícias, compras, esportes, atrações turísticas, transporte e
condições climáticas. Esses sistemas podem apresentar um mapa da localização corrente do
usuário contendo informações úteis do local visitado (Figura 1.2).
Figura 1.2. Ilustração de um guia turístico móvel (Fernandes, 2009).
O Enhanced 911 ou E-911 (E9-1-1 Institute, 2010) é um sistema baseado em
telecomunicações norte-americano que associa automaticamente o endereço físico do
usuário ao número telefônico de uma chamada de emergência, direcionando-a para uma
central de atendimento (Public Safety Answering Point - PSAP) mais apropriada àquele
endereço. As informações sobre o chamador e seu endereço são mostradas ao atendente do
PSAP imediatamente após a chegada da chamada, o que possibilita aos atendentes obterem
a localização da ocorrência sem a necessidade do usuário ter que informá-la. Esse sistema
apenas funciona na América do Norte quando o número de emergência 911 é discado.
O Call Forwarding (Want et al., 1992) é outro exemplo de SSC, o qual redireciona
as chamadas telefônicas destinadas a um usuário para um telefone próximo à localização
atual do usuário. Outro SSC, denominado Teleporting (Bennett; Richardson; Harter,
1994), mapeia dinamicamente a interface de uma aplicação mostrada no dispositivo do
usuário para os recursos disponíveis de outros dispositivos computacionais circundantes.
O Shopping Assistant (Asthana; Cravatts; Krzyzanowski, 1994) guia os usuários
durante suas compras em determinada loja, fornecendo detalhes dos itens, auxiliando na
localização dos mesmos dentro da loja, realizando análises comparativas de preços, e assim
por diante. O Conference Assistant (Dey et al., 1999) trata-se de outro SSC que usa uma
variedade de informações contextuais para auxiliar os participantes de uma conferência.
Esse sistema examina a agenda da conferência, os tópicos das apresentações, a localização
dos participantes e seus interesses de pesquisa para sugerir as apresentações mais
apropriadas. Assim que um participante entra em uma sala de apresentação, o sistema
automaticamente mostra o nome do palestrante, o título da apresentação, e outras
informações pertinentes.
Outros exemplos de sistemas sensíveis ao contexto podem ser encontrados no
trabalho de Chen e Kotz (2000).
1.3. Arquitetura Orientada a Serviços
O desenvolvimento de aplicações para diferentes domínios tem demandado a adoção de
tecnologias que agilizem as tarefas de desenvolvimento, tornando o desenvolvimento mais
eficiente e alinhado aos processos de negócio das organizações. A diversidade de
organizações, a variedade de serviços ofertados e a popularização da Internet levaram à
necessidade de oferecer serviços de forma mais flexível, padronizada e extensível, com a
finalidade de simplificar a relação entre clientes e fornecedores. Para as corporações que
trabalham com grandes sistemas distribuídos, a flexibilização da Tecnologia da Informação
(TI) é de extrema importância. A interoperabilidade dos sistemas corporativos pode ser
simplificada com a utilização da Arquitetura Orientada a Serviços (SOA).
O paradigma de computação orientada a serviço, Service Oriented Computing
(SOC), e sua respectiva arquitetura de suporte, Service Oriented Architecture (SOA),
são considerados atualmente os mais promissores na área de computação distribuída.
Esse paradigma prega a interoperabilidade e o fraco acoplamento entre elementos
básicos de software através da definição de interfaces neutras e da utilização de
protocolos de transporte padronizados. Serviços são unidades lógicas de software,
podendo encapsular um simples método ou um grande processo envolvendo múltiplos
colaboradores (Papazolou, Georgakopoulos, 2003).
SOA representa a mais recente confluência de modelos arquiteturais. Nos últimos
anos, SOA tem sido pauta de inúmeros debates e a opção preferida da indústria do setor de
TI. Desenvolver aplicações interoperáveis é uma necessidade de muitas empresas, devido
ao crescimento e expansão de seus serviços em diversos mercados de atuação. A riqueza
desse modelo manifesta-se pela noção de serviço, que transforma as referências da
modelagem do software, enfatizando aspectos mais próximos da perspectiva de valores de
negócios.
Os serviços web é uma tecnologia projetada para suportar interações máquina-
máquina interoperáveis sobre uma rede. O serviço web possui uma interface descrita em
um formato passível de processamento pela máquina, conhecido como Web Service
Description Language (WSDL). Outros sistemas interagem com o serviço web da
maneira definida na sua interface usando mensagens do Simple Object Access Protocol
(SOAP), tipicamente transportadas usando o HiperText Transfer Protocol (HTTP ) com
serialização da Extensible Markup Language (XML) e em conjunto com outros padrões
relacionados à web (W3C, 2004a).
1.3.1. SOA: Definição
Primeiramente, SOA é um conceito. Existem diversas definições para SOA na literatura,
mas é importante deixar claro algumas definições de SOA que não procedem. SOA não é
uma tecnologia, não pode ser reduzido a produtos de software, não é uma solução, não
atende todos os desafios tecnológicos aos quais estão submetidos os negócios de hoje, mas
sim da forma que a aplicação deve ser construída. A computação orientada a serviço é o
paradigma de computação que utiliza serviços como elementos fundamentais para o
desenvolvimento de aplicações (Papazoglou e Georgakopoulos, 2003).
Service Oriented Computing é um conceito bastante amplo que representa uma nova
geração de plataforma de computação distribuída. Englobam vários elementos como
princípios de design, padrões de projeto, linguagens de programação, hardware, frameworks,
processos e estratégias organizacionais. SOA é, basicamente, um modelo de arquitetura de
software na qual toda funcionalidade de negócio é construída com base em funções e
processos individualizados, denominados serviços. SOA define que os serviços sejam
desenvolvidos, implantados e integrados independentemente da aplicação e da plataforma
computacional na qual os serviços serão executados. O serviço deve funcionar de forma
independente do estado de outros serviços, além de possuir uma interface bem definida (Erl,
2007).
SOA tem o propósito de tratar os requisitos de baixo acoplamento,
desenvolvimento baseado em padrões, computação distribuída independente de protocolo,
mapeamento dos sistemas de informação da organização para todos os seus fluxos de
processos de negócios, integração de aplicações, gerência de transações, políticas de
segurança e coexistência de sistemas em múltiplas plataformas e também sistemas legados
(Papazoglou, Heuvel, Willem-jan, 2007). Apesar da abordagem orientada a serviços
requerer mais disciplina e planejamento, o retorno de investimento é elevado (Marks e Bell,
2006).
SOA se relaciona também com determinadas políticas e conjuntos de práticas que
pretendem criar um processo para facilitar a tarefa de encontrar, definir e gerenciar os
serviços disponibilizados. SOA permite que às organizações realizarem seus negócios e
obtenham vantagens tecnológicas por meio da combinação de inovação de processos,
estratégia de tecnologia e governança eficaz, as quais giram em torno da definição e
reutilização de serviços. O modelo de arquitetura de software beneficia a eficiência,
agilidade e produtividade no desenvolvimento de aplicações e esta alinhado com os
objetivos de Service Oriented Computing.
A adoção da arquitetura SOA provê vantagens no processo de desenvolvimento de
software (Erl, 2005). Entre elas destacam-se: Fraco acoplamento, Interoperabilidade,
Composição, Reusabilidade, Alta granularidade e Ubiquidade que devem prover as
seguintes funcionalidades:
Fraco acoplamento: é um conceito fundamental de SOA e dos grandes sistemas
distribuídos. Consiste em garantir que cada serviço seja o mais independente
possível de outros. Desta forma, ao se modificar um determinado serviço, os outros
não deverão ser afetados;
Interoperabilidade: Os serviços idealmente dever ser implementados com uso de
tecnologias padronizadas e disponíveis a um grande número de plataformas de
software. A utilização de protocolos e aplicação independente de plataforma resulta
em Interoperabilidade entre os serviços. Protocolos proprietários e fracamente
padronizados apresentam problemas de interoperabilidade entre softwares
desenvolvidos por diferentes fabricantes;
Composição: é a capacidade dos serviços possibilitar a execução de
funcionalidades complexas e completas dentro de um determinado negócio. Os
serviços podem ser compostos para formar novos serviços com um nível maior de
abstração e provendo funcionalidades agregadas.
Reusabilidade: é um elemento fortemente adotado na arquitetura orientada a
serviços. Por serem módulos independentes de código e fracamente acoplados à
aplicação os serviços podem ser facilmente reutilizados, resultando em um alto
nível de produtividade no desenvolvimento de software. O reúso de código gera
redução no tempo de desenvolvimento de aplicações, bem como redução nos
custos.
Alto Grau de Granularidade: o encapsulamento de funcionalidades no nível de
serviço evoca um Alto Grau de Granularidade nos componentes básicos da
arquitetura. Um objeto individual apresenta operações muito finas para prover
funcionalidades significativas no nível corporativo. Para o desenvolvimento de
aplicações complexas e extensas a alta granularidade traz vantagens na medida em
que detalhes de implementação são deixados à equipe de desenvolvimento
responsável por aquele serviço.
Ubiquidade: os serviços devem ser acessíveis a partir de qualquer lugar e a
qualquer momento facilitando a composição de serviços entre empresas.
1.3.2. SOA e os Web Services
A arquitetura orientada a serviços revigora a possibilidade para se incorporar avanços e
posicionar a tecnologia da informação no patamar de sofisticação condizente com o mundo
que cerca. Os sistemas baseados em serviços e tecnologia Internet, permitem a criação de
modelos simples e de alta escala, permitindo novos patamares para os ambientes
computacionais. Os Web Services surgem como uma evolução dos modelos de computação
distribuída. A adesão da Internet no mercado corporativo como fator de negocio surgiu à
necessidade de integrar aplicações além das redes locais e, por consequência, em ambientes
heterogêneos. A tecnologia Web Service é empregada nesse contexto com o objetivo de
integrar os sistemas de informação (W3C, 2004a).
Web Services são uma excelente ideia que temos hoje de implementar SOA (Erl,
2005). Existem ideias de que Web Services e SOA são sinônimos e que é impossível
desenvolver aplicações com arquitetura orientada a serviços sem o uso de Web Services.
Isso não é verdade, pois é possível implementar aplicações SOA usando tecnologias como
Java RMI, CORBA ou DCOM (Erl, 2007), mas essas tecnologias apresentam algumas
dificuldades. A Java RMI é muito ligada à linguagem Java e dificilmente se comunica com
outras linguagens de programação. A tecnologia CORBA tem o problema de possuir
protocolos complexos. A DCOM é uma tecnologia dependente da plataforma e totalmente
proprietária. Por esses motivos Web Services se tornou popular, pois tenta resolver esses
problemas criando protocolos de comunicação abertos que possam ser facilmente
integrados a diferentes plataformas e possui dois requisitos fundamentais: comunica-se via
protocolos Internet e o envio e recebimento de dados em formatados de documentos XML.
O conceito de Web Services teve seu início em meados de 2000 com a introdução da
primeira versão do protocolo Simple Object Access Protocol (SOAP), Web Services
Description Language (WSDL) versão 1.1 e de uma versão inicial do servidor Universal
Description, Discovery and Integration (UDDI). O Web Service é definido pela publicação de
um documento WSDL para descrever o serviço, e o cliente acessa esse documento publicado
através do UDDI ou no provedor de Web Services. Após o cliente receber as informações do
serviço é desenvolvido o software que realizará a troca de informações com o envio de
mensagens utilizando o protocolo SOAP através da chamada dos Web Services (W3C,
2004a).
A plataforma Web Services de segunda geração (extensões WS-*) proporcionar
eliminar algumas brechas relacionadas a serviços de qualidade na plataforma de primeira
geração. As áreas de segurança no nível de mensagens, transações de serviços cruzados e
troca de mensagens confiável são fornecidas pela plataforma de segunda geração.
Consistindo de inúmeras especificações que aprimoram o framework fundamental da troca
de mensagens, esse conjunto de tecnologias Web Services fornece um rico conjunto de
recursos muito mais complexo, tanto em termos de tecnologia quanto de design (Erl, 2007).
A identificação desses serviços, no entanto, não é uma tarefa simples e imediata. Em
geral são utilizadas duas abordagens para resolver esse problema: top-down e bottom-up. A
abordagem top-down permite que um processo ou sistema seja gradativamente decomposto
em partes menores até atingir um nível de serviços básicos. Por outro lado, a abordagem
bottom-up parte dos serviços já identificados ou oferecidos pelos sistemas da organização,
compondo-os gradativamente em serviços mais complexos e generalizados (Perepletchikov et
al., 2005).
1.3.3. Classificação de Serviços
Ao modelar serviços, fica claro que eles podem ser classificados dependendo do modelo de
lógica que encapsulam, do potencial de reúso que esta lógica possui e de como ela se
relaciona com os domínios existentes dentro do ambiente empresarial (Erl, 2007). Desta
forma, existem três classificações comuns de serviços, cujas camadas lógicas são ilustras na
Figura 1.3, os quais definem os modelos de serviços primários:
Serviços de Utilidade;
Serviços de Entidade; e
Serviços de Tarefa.
Os Serviços de Utilidade, também conhecido como serviços de aplicação, serviços
de infraestrutura, ou serviços de tecnologia, constituem nos serviços que contém lógica
independente de negócio, ou seja, são responsáveis por realizar atividades que podem ser
aplicadas a diversos tipos de negócio. Desta forma, possuem um potencial de reúso
bastante elevado. Algumas funcionalidades que estes serviços podem contemplar seriam
tratamento de exceções, ou autenticação de usuários.
Os Serviços de Entidade são os serviços relacionados às entidades envolvidas no
negócio, como, por exemplo, produtos, clientes, funcionários, fornecedores, entre outros.
Estes serviços também possuem um alto grau de reuso, porém menor do que os Serviços de
Utilidade, devido à sua relação mais próxima com o negócio.
Os Serviços de Tarefas tratam-se de serviços responsáveis pelos processos
específicos de cada negócio, como, por exemplo, uma análise das vendas. Nestes serviços,
pode ser necessário obter informações das várias entidades do negócio, bem como realizar
tarefas atividades mais genéricas, de forma que serviços de Entidade e de Utilidade podem
ser orquestrados para auxiliar na execução da Tarefa.
Figura 1.3. Camada de abstração dos Serviços (adaptada de Erl, 2007)
1.3.4. Principais Padrões utilizados pelos Web Services
Para que se possa construir uma arquitetura orientada a serviços são utilizados as
tecnologias envolvidas, baseados em eXtensible Markup Language (XML), na provisão da
arquitetura SOA no contexto dos Web Services.
O XML, acrônimo de Extensible Markup Language, trata-se de uma
metalinguagem, ou seja, uma linguagem utilizada para descrever outras linguagens (Daily,
2010). Tal linguagem descreve documentos XML, que são documentos em um formato de
texto simples e bastante flexível elaborado originalmente para atender aos desafios da
publicação eletrônica de larga escala (W3C, 2010). Estes documentos são constituídos de
tags, que por sua vez podem encapsular tags ou outros dados. A extensibilidade e a
natureza estruturada de XML permitem sua utilização na comunicação entre diferentes
sistemas, que de outra forma não poderiam se comunicar (Daily, 2010). Devido
principalmente a estas características, Web Services normalmente são implementados
utilizando XML como formato padrão de troca de dados. Para padronizar o formato das
mensagens XML, faz-uso de estruturas bem definidas chamadas Esquemas. O formato
mais comum de esquemas é o XSD, acrônimo de XML Schema Definition.
A Linguagem de Descrição dos Serviços Web aborda a necessidade de definir uma
gramática eXtensible Markup Language (XML) com o objetivo de descrever os Web
Services. A função do WSDL é fornecer uma documentação e detalhes técnicos dos Web
Services que além de descrever o serviço, especifica como acessá-lo e quais são as
operações ou métodos disponíveis para a chama e o desenvolvimento do serviço. A
implementação do serviço pode-se dar utilizando qualquer linguagem de programação e
plataforma. Pode-se utilizar ferramentas para geração de código que, a partir da
especificação da interface, geram os stubs e os skeletons do serviço, na linguagem de
programação desejada. Resumidamente, um documento WSDL usa os seguintes elementos
XML na definição do serviço:
Tipo (Type): contêiner para definições de tipos de dados. Usa algum sistema de
definição de tipos como por exemplo XML Schema Definition (XSD).
Operação (Operation): descrição abstrata de uma funcionalidade suportada pelo
serviço.
Associação (Binding): protocolo de comunicação concreto e especificação da
formatação dos dados para um tipo de porta específico.
Porta (Port): um único endpoint definido como a combinação de uma associação e
um endereço de rede.
Serviço (Service): uma coleção de portas agrupadas logicamente.
A linguagem WSDL (W3C, 2007a) define quatro tipos de interações entre o provedor
e o cliente do serviço, baseado na quantidade e direção das mensagens trocadas. É possível
que haja somente o recebimento de uma mensagem pelo provedor do serviço, caracterizando
uma interação em sentido único (one-way). Outra possibilidade é que exista o recebimento e o
envio de uma mensagem pelo provedor do serviço, caracterizando uma interação requisição-
resposta (request-response). Ainda, pode-se ter o envio e recebimento de uma mensagem
(solicit-response) ou apenas o envio de uma mensagem (notification) por parte do servidor.
O SOAP (W3C, 2007b) é um protocolo de comunicação no nível de aplicação que
define a formatação e codificação de mensagens XML a serem enviadas pela rede. O
protocolo define um mecanismo leve e simples para troca de informações estruturadas
entre pares em um ambiente descentralizado e distribuído (Walsh, 2002). É um protocolo
projetado para comunicação na Internet, podendo utilizar outros protocolos (e.g., HTTP ou
SMTP) para transporte de suas mensagens. O objetivo desse protocolo é prover um meio
de comunicação entre aplicações com diferentes tecnologias, executando em diferentes
sistemas operacionais e linguagens de programação. Ao utilizar protocolos padrões da
Internet ele não é bloqueado por firewalls nem por roteadores como outros protocolos de
aplicação (e.g., Internet Inter-ORB Protocol - IIOP).
A mensagem SOAP deve necessariamente conter um elemento envelope. Este por
sua vez possui um elemento cabeçalho (header) opcional e um elemento corpo (body)
mandatório. O elemento corpo representa os parâmetros de entrada e saída do serviço, ou
seja, a informação em si sendo transmitida. A mensagem ainda pode conter um elemento de
falha (fault) que provê informações sobre erros ocorridos durante o processamento da
mensagem.
O UDDI (OASIS, 2004) é um mecanismo que visa atender tanto ao cliente de Web
Service quanto ao provedor. A sua tarefa é fornecer ao provedor de Web Services os
protocolos necessários para que os Web Services sejam registrado, descobertos e
publicados na rede (Walsh, 2002; Newcomer, 2002). Funciona como uma agência de
registro de Web Services, similar às páginas amarelas de uma lista telefônica. Dado um
conjunto de parâmetros de especificação de um serviço (nome, qualidade, localização, entre
outros) a agência é responsável por encontrar serviços cadastrados que satisfaçam os
parâmetros fornecidos. A agência mantém um banco de dados centralizado dos serviços
web disponíveis na rede classificados por tipo de serviço, informações do provedor,
qualidade dos serviços e assim por diante. O protocolo para requisição dessas informações
também é definido, sendo este independente de plataforma, pois utiliza SOAP para
codificação das mensagens.
1.3.5. Composição Web Services
Os Web Services devem ser projetados a fim de permitir que possam ser utilizados por
outros serviços ou aplicações. As novas funcionalidades ou os novos padrões podem ser
adicionados aos serviços sem quebrar o contrato com os consumidores atuais do serviço,
mantendo as funcionalidades existentes anteriormente e a interoperabilidade (Erl, 2007). A
orquestração é um mecanismo de agregação ou composição de serviços visando à obtenção
de um novo serviço com funcionalidades mais complexas. É um componente importante da
arquitetura orientada a serviços, pois encapsula logicamente serviços de forma transparente
ao cliente. A orquestração permite que o desenvolvimento de novos serviços seja realizado
de forma adaptável, flexível e dinâmica as necessidades de negócios que se alteram
frequentemente (Chris, 2003).
A orquestração de serviços define um fluxo de execução de um processo, ou seja,
através de um arquivo de orquestração que é processado por um programa denominado
máquina de orquestração gerencia as chamadas e os fluxos da composição dos serviços.
Nesse arquivo são definidas as chamadas dos serviços componentes necessários à obtenção
do novo serviço. Como qualquer linguagem de programação, as linguagens de orquestração
possuem atribuição de variáveis, interações, e fluxos condicionais. Como a tecnologia mais
compatível com a arquitetura orientada a serviços é a de Web Services as linguagens e
tecnologias para composição de serviços que mais se desenvolveram foram aquelas que
compõem os serviços (Milanovic, Malek, 2004).
O objetivo da orquestração é descrever um processo do ponto de vista de quem
executa, ou seja, somente um ponto de vista de execução do processo é conhecido. A
menos que se tenha acesso ao código dos serviços componentes é impossível saber qual é o
fluxo de execução de cada um deles, pois somente as suas interfaces são conhecidas. A
função das interfaces é mostrar o comportamento estático do serviço enquanto que a
orquestração mostra o comportamento dinâmico do serviço.
A coreografia é um mecanismo de especificação de um protocolo de troca de
mensagens entre duas entidades participando em uma interação. A coreográfica esta inserida
no contexto em que as interações entre os serviços são tipicamente de troca de mensagens
ponto a ponto, síncronas e assíncronas, envolvendo duas ou mais partes, possivelmente de
longa duração e com manutenção de estado. O seu objetivo é especificar o contrato entre duas
entidades independentes de software localizadas em ambientes distintos. O desacoplamento é
a principal característica, pois possibilita que o serviço seja especificado sem revelar qualquer
detalhe sobre sua implementação e provê liberdade quanto à mudança de aspectos privados
do serviço sem afetar o protocolo já estabelecido (BEA Systems, 2003).
Os conceitos de coreografia e orquestração são bem próximos, o que causa algumas
divergências quanto à aplicação de cada um. Primeiro, os nomes em si já levam à analogia de
uma dança coreografada versus uma orquestra controlada por um condutor onde os
participantes reagem às influências externas como música e comportamento dos seus pares. A
coreográfica tem uma natureza colaborativa, isto é, na coreografia é definido um contrato de
interação em que ambas as partes colaboram para atingir um objetivo comum. Já a
orquestração revela o ponto de vista de uma única entidade interagindo com outras entidades.
1.4. Estudo de Caso
Os Web Services podem ser empregados para diferentes propósitos em diversos domínios de
aplicação. Em particular, o uso de Web Services que fornecem funcionalidades para a
adaptação de conteúdo de interfaces gráficas pode contribuir para agilizar o desenvolvimento
de SSCs que realizam adaptação de suas interfaces conforme o contexto da interação. Dessa
maneira, ao invés dos desenvolvedores criarem suas próprias bibliotecas de funções para
adaptação de conteúdo, os mesmos podem reutilizar serviços prontos e validados.
Com o intuito de ilustrar o emprego de Web Services para adaptação de conteúdo,
apresenta-se a seguir a descrição de uma aplicação como estudo de caso. Nas subseções
seguintes são apresentados os componentes de software utilizados no desenvolvimento do
protótipo dessa aplicação, os quais fornecem as funcionalidades de manipulação do
contexto e adaptação de conteúdo com o uso de Web Services.
Ambulance Space Positioning System (ASPS) (MARCONDES et al., 2010) é um
sistema que possibilita a visualização em tempo real da distribuição de ambulâncias no
mapa de uma cidade, podendo ser acessado a partir de diferentes dispositivos. Tal sistema
permite que a equipe de gerenciamento da frota possa monitorar a mobilidade das
ambulâncias e direcionar determinada ambulância para o atendimento de emergência em
um local próximo à região em que a mesma encontra-se atualmente.
Esse sistema, de natureza ubíqua, é composto por três aplicações distintas. O
posicionamento das ambulâncias é feito por meio da triangulação de antenas de telefonia
celular próximas às ambulâncias, a qual é realizada por um terminal Global System for
Mobile Communications (GSM) fixado em cada uma delas. A cada 10 segundos, os dados de
posicionamento são calculados e transmitidos pelo terminal GSM, via Hypertext Transfer
Protocol (HTTP), a uma central de processamento, onde são processados e armazenados em
uma base de dados. Uma aplicação Web disponibiliza uma interface para visualização do
mapa do município com as posições mais recentes das ambulâncias recuperadas da base de
dados. Em pequenos intervalos de tempo, a aplicação Web efetua requisições assíncronas ao
servidor usando AJAX para recuperar e atualizar no mapa a posição das ambulâncias.
A possibilidade de acesso à aplicação Web do ASPS a partir de diferentes
dispositivos leva à necessidade de adaptar suas interfaces gráficas, conforme o perfil do
dispositivo de acesso utilizado pelo gerenciador da frota.
1.4.1. Web Context Framework (WCF)
O Web Context Framework (WCF) abstrai as funcionalidades da camada de gerenciamento
de contexto associadas à aquisição, processamento e disseminação dos elementos contextuais
(Vieira; Tedesco; Salgado, 2009), de forma a facilitar a implementação de SSCs baseados na
Web. O WCF é incorporado tanto aos Web Services de adaptação de conteúdo quanto ao
módulo adaptador de conteúdo da própria aplicação para obter as informações do perfil do
dispositivo que guiarão a adaptação a ser realizada. A implementação do WCF foi feita em
Java. A Figura 1.4. mostra o modelo de componentes do WCF, o qual foi estruturado em três
módulos: Aquisição, Processamento e Disseminação.
Figura 1.4. Modelo de componentes do WCF
O Módulo de Aquisição abrange os componentes que acessam diretamente as
fontes de contexto para obter os elementos contextuais em sua forma original, ou seja, no
formato entregue por essas fontes. Esses componentes são chamados de adaptadores
(Santos, 2008), pois encapsulam os detalhes de acesso às diferentes fontes de contexto e
fornecem métodos abstratos para recuperação dos elementos contextuais implementando a
interface ICtxSrcAdapter. Essa interface contém os métodos
getContextualElement(ContextualElement ce) e getContextualElements(), que recuperam,
respectivamente, um elemento contextual específico e o conjunto de todos os elementos
contextuais disponíveis na fonte de contexto manipulada pelo adaptador correspondente.
As fontes de contexto são, por natureza, heterogêneas, autônomas e dinâmicas,
devido ao fato de existirem independentemente do CSS. Cada qual fornece um conjunto
específico de elementos contextuais que podem ser úteis para diferentes aplicações (Vieira;
Tedesco; Salgado, 2009). Dessa forma, no WCF existe um adaptador apropriado associado
a cada fonte de contexto, o qual utiliza drivers e APIs específicos da fonte de contexto a
qual está vinculado para acessar suas funcionalidades internas e recuperar os elementos
contextuais que são disponibilizados por essa fonte. Essa granulosidade torna o WCF mais
extensível, pois facilita a inclusão de novas fontes de contexto ou a remoção de fontes que
deixaram de existir ou tornaram-se desnecessárias.
Conforme se observa na Figura 1.4, atualmente encontra-se construído no WCF o
adaptador WURFLAdapter para acesso ao arquivo de configuração XML chamado
Wireless Universal Resource File (WURFL) (WURFL, 2010), o qual contém os perfis de
milhares4 de dispositivos de diferentes marcas e modelos existentes. O WURFL é utilizado
por desenvolvedores de software para guiar a criação de soluções apropriadas para
dispositivos específicos. Por ser um arquivo público, o WURFL recebe atualizações diárias
de desenvolvedores espalhados ao redor do mundo interessados em contribuir para a
completude e correção das informações nele contidas. Pelo fato de receber atualizações e
correções contínuas pela própria comunidade de desenvolvimento, o WURFL foi adotado
como fonte de contexto principal para obtenção dos perfis dos dispositivos no WCF.
A Figura 1.5 mostra um trecho de código do componente WURFLAdapter. É
possível notar na linha 3 a importação da API Java do WURFL, a qual permite recuperar os
perfis de dispositivos contidos no arquivo de configuração XML usando como parâmetro o
campo User-Agent da requisição Hypertext Transfer Protocol (HTTP) originada pelo
dispositivo de acesso. Nas linhas 25-35 tem-se a declaração dos objetos que manipulam o
WURFL. A partir da linha 52 em diante, é implementado o método para a obtenção dos
elementos contextuais associados ao perfil do dispositivo.
Figura 1.5. Trecho de código do WURFLAdapter.
Devido à natureza extensível pela qual o WCF foi projetado, outras fontes de
contexto, tais como User Agent Profile (UAProf) (OMA, 2001) e bases de dados de perfis
podem ser acrescentadas futuramente para complementar a obtenção dos elementos
contextuais associados ao perfil do dispositivo, o que implica na implementação dos
adaptadores específicos para acesso a essas fontes de contexto conforme ilustrado na
Figura 1.4. Além disso, fontes de contexto que fornecem elementos contextuais associados
ao usuário (e.g. base de dados que armazenam os perfis de usuário, câmeras de vídeo que
captam a localização atual do usuário), à rede de acesso (e.g. agentes de software que
monitoram as condições de tráfego da rede), dentre outros, também podem ser
incorporados ao WCF para torná-lo mais abrangente.
4 Na última atualização do WURFL disponível em 25/04/2010 foram contabilizados cerca de 13.120
perfis de dispositivos
O Módulo de Processamento engloba os componentes que manipulam os
elementos contextuais e os agrupam de acordo com as entidades do domínio que
caracterizam. Por esse motivo, esses componentes são chamados de agregadores. Cada
agregador é, portanto, uma abstração de uma determinada entidade do domínio que fornece
todos os elementos contextuais relacionados à entidade a qual está vinculado (Dey, 2001).
Por exemplo, na Figura 1.4 o componente DeviceAggregator representa o dispositivo de
acesso e interage diretamente com os adaptadores que acessam as fontes de contexto que
fornecem os elementos contextuais associados ao perfil do dispositivo.
No WCF, cada agregador é construído aplicando o padrão de projeto Façade
(Gamma et al., 1994). Dessa forma, os agregadores atuam como uma fachada que oculta a
complexidade inerente à manipulação dos diversos adaptadores do Módulo de Aquisição e
fornece uma interface única, chamada IAggregator, para obtenção dos elementos
contextuais de determinada entidade. As tarefas de decidir em que fonte(s) de contexto
recuperar um elemento contextual, transformar os elementos contextuais em um nível de
abstração apropriado quando necessário e solucionar os conflitos entre os valores de um
dado elemento contextual obtido de diferentes fontes são encapsuladas pelos agregadores.
Conforme ilustrado na Figura 1.4, além do agregador DeviceAggregator que
representa o dispositivo, agregadores que representam outras possíveis entidades do
domínio, tais como o usuário, a rede de acesso, etc., podem ser construídos para estender o
WCF na medida em que fontes de contexto que fornecem elementos contextuais associados
a essas entidades são acrescentadas ao framework.
Por fim, o Módulo de Disseminação do WCF é composto por um único
componente, chamado ContextManager, que disponibiliza os elementos contextuais
tratados no módulo de processamento aos consumidores de contexto por meio da interface
ICtxManager. Em relação aos consumidores de contexto, o ContextManager atua também
como uma fachada, pois oculta a manipulação dos diversos agregadores e fornece uma
interface única para obtenção dos elementos contextuais. A tarefa de determinar a partir de
qual agregador requisitar um dado elemento contextual é encapsulada pelo
ContextManager.
1.4.2. Adaptador de Conteúdo
O módulo adaptador de conteúdo, chamado ContentAdapter, consome os elementos
contextuais associados ao perfil do dispositivo adquiridos pelo WCF e realiza a adaptação
dinâmica da interface conforme o perfil do dispositivo obtido. Sua implementação foi
realizada utilizando a linguagem Java. Algumas das funcionalidades de adaptação de
conteúdo foram implementadas como Web Services, o que possibilita o reúso dessas
funcionalidades em diferentes aplicações. A Figura 1.6. apresenta o modelo de classes para
o ContentAdapter. A interface IContentAdaptation fornece os métodos abstratos para
adaptação dinâmica da interface da página Web.
Conforme se observa nas importações do modelo de classes Figura 1.6, para a construção
do ContentAdapter foram utilizadas as APIs Java Document Object Model (DOM) e
TagSoup. Essas APIs permitem, em tempo de execução, manipular e transformar
documentos eXtensible Markup Language (XML) que suportam a recomendação DOM do
World Wide Web Consortium (W3C), tais como XHTML e HTML.
Neste trabalho, empregou-se uma estratégia de adaptação híbrida para as interfaces.
Nessa estratégia tem-se a construção de algumas poucas versões mais genéricas da interface
adequadas para um determinado grupo de dispositivos (adaptação estática), e adequação de
alguns trechos do código durante a execução (adaptação dinâmica) para atender às
peculiaridades do perfil do dispositivo de acesso extraído do contexto da interação.
Figura 1.6. Modelo de classes para o ContentAdapter.
O funcionamento do ContentAdapter é ilustrado na Figura 1.7, considerando uma
aplicação Web desenvolvida com o framework Java Server Faces (JSF). Quando uma página
Web é requisitada (1), o Servlet da aplicação invoca o método dynamicAdapt() do
Servlet
ContentAdapter
WCF
WebContent
Mobile
index.jsp about.jsp
Desktop
index.jsp about.jsp
1
2
3
4
5
6
7
8
9
10
Requisição
HTTP
dynamicAdapt()
Resposta
Adaptação
dinâmica utilizando
Web Services
Seleção
da versão
Obtenção do
perfil do dispositivo
Busca do perfil
do dispositivo
Web Services de
adaptação de
conteúdo
Busca do perfil
do dispositivo
Figura 1.7. Funcionamento do ContentAdapter.
ContentAdapter (2), o qual requisita o perfil do dispositivo ao WCF (3). O WCF usa como
parâmetro o campo User-Agent da requisição HTTP para a obtenção do perfil do dispositivo a
partir das fontes de contexto disponíveis, neste caso, o WURFL (4). O perfil do dispositivo é
retornado ao ContentAdapter (5), que seleciona a página Web requisitada da versão genérica
da interface mais adequada ao perfil do dispositivo recuperado (6). Em seguida, o
ContentAdapter cria uma cópia da página escolhida na memória e identifica os trechos do
código que necessitam ser refinados para ajustarem-se ao tamanho de tela específico do
dispositivo e ao suporte fornecido pelo mesmo para componentes como imagens, tabelas,
campos de formulários, dentre outros (7). O ContentAdapter verifica as divergências entre os
trechos de código analisados e o perfil do dispositivo recuperado pelo WCF e aplica as
adaptações necessárias (8). Nessas adaptações, além de utilizar métodos próprios, o
ContentAdapter também invoca os Web Services de adaptação de conteúdo implementados.
A cópia adaptada da página é escrita pelo ContentAdapter no buffer de saída da resposta
HTTP (9) e finalmente enviada ao dispositivo do usuário por intermédio do Servlet (10).
A Figura 1.8 mostra um trecho do método adaptInput() do ContentAdapter, onde é
realizada a invocação do Web Service que realiza a adaptação de campos de entrada de
texto (<input type=”text”/> e <input type=”password”/>). Essa adaptação envolve o
redimensionamento desses campos conforme a largura de tela do dispositivo de acesso.
Conforme se observa na Figura 1.7, o nó <input> representado em um objeto do tipo Node
da API DOM é serializado em uma cadeia de caracteres (linha 359) e passado como
parâmetro ao Web Service juntamente com o valor do campo User-Agent da requisição
HTTP (linha 361). Este último parâmetro permite ao Web Service, o qual pode estar
hospedado em um servidor remoto, obter do WCF o perfil do dispositivo onde a requisição
foi efetuada para realizar a adaptação.
Figura 1.8. Método adaptInput() do ContentAdapter com a invocação do WebService.
A Figura 1.9 mostra um trecho do código do Web Service que realiza a adaptação
de campos de entrada de texto. Nas linhas 29-32 o nó <input> passado como parâmetro é
desserializado em um objeto Node. Em seguida, na linha 33, é instanciado um objeto
ContextManager do WCF, parametrizado com o campo User-Agent recebido pelo Web
Service. Nas linhas 34-36 é obtido o número de colunas da tela do dispositivo através do
WCF. Na linha 40 recupera-se o valor do atributo “size” do nó <input>. Por fim, nas linhas
44-45, o atributo “size” do campo de texto é reduzido caso seja maior que o número de
colunas da tela do dispositivo.
Figura 1.9. Trecho de código do WebService adaptInput.
Além do Web Service para adaptação de campos de entrada de texto, também foi
implementado um Web Service para adaptação de nós <div>, os quais representam uma
região de conteúdo dentro da interface Web. A adaptação desempenhada, neste caso,
envolve o redimensionamento desses nós de forma que seu conteúdo possa ajustar-se à
largura de tela do dispositivo de acesso utilizado. Além disso, no próprio ContentAdapter
foi implementado um método para adaptação de imagens, o qual redimensiona as imagens
de forma compatível à resolução de tela do dispositivo, bem como as transforma em um
formato adequado para visualização no mesmo, conforme o perfil recuperado.
1.4.3. Desenvolvimento do ASPS
O protótipo da aplicação Web do ASPS foi desenvolvido com a utilização dos
componentes de software apresentados anteriormente. A Figura 1.10 apresenta o código do
Servlet da aplicação, chamado ContextServlet, onde o ContentAdapter é empregado. É
possível observar na figura que o ContentAdapter é importado ao Servlet na linha 3 e
instanciado em um objeto chamado ca na linha 22. A linha 24 atualiza o objeto ca com os
Figura 1.10. Código do Servlet da aplicação.
novos objetos de requisição e resposta HTTP caso o objeto ca já tenha sido instanciado. A
invocação ao método dynamicAdapt() do ContentAdapter é realizada na linha 26. A partir
daí, o ContentAdapter realiza as adaptações necessárias à interface Web utilizando dos
Web Services, bem como de seus métodos próprios.
O protótipo foi executado nos emuladores do smartphone HTC G1 e do iPhone,
bem como em um desktop. A Figura 1.11 mostra o resultado das execuções nesses
dispositivos. A Figura 1.11 (a) e (b) mostra a execução da interface na tela do HTC G1 e do
iPhone, respectivamente. Em ambos os casos, a versão da interface entregue foi a versão
construída para dispositivos móveis. Para tornar visível a diferença obtida com a adaptação
dinâmica desempenhada pelos adaptadores de conteúdo contidos no ContentAdapter, são
mostradas a interface adaptada e sua correspondente sem adaptação. Na Figura 1.11 (a) é
mostrado o topo da interface que contém o logotipo da aplicação. É possível observar que
(a) Visualização no HTC G1:
com adaptação
da interfacesem adaptação
da interface
(b) Visualização no iPhone:
(c) Visualização em um desktop:
com adaptação
da interface
sem adaptação
da interface
Figura 1.11. Testes da execução da aplicação em três dispositivos distintos.
com a adaptação da interface o logotipo foi redimensionado para encaixar-se à tela do HTC
G1. A Figura 1.11 (b) mostra a parte inferior da mesma interface, onde se tem um painel de
abas que contém um mashup do Google Maps. É possível notar que através da adaptação
da interface, o painel de abas foi ajustado de forma a não extrapolar a largura de tela do
iPhone. A Figura 1.11 (c), por sua vez, mostra a interface visualizada num desktop. Neste
caso, a versão da interface entregue foi a construída para desktops.
1.5. Considerações Finais
O uso de Web Services na construção de SSCs torna mais ágil o processo de
desenvolvimento, uma vez que a reutilização de serviços prontos que fornecem
funcionalidades para adaptação de conteúdo e outros comportamentos sensíveis ao
contexto, elimina a necessidade da implementação dessas funcionalidades a partir do zero.
Além disso, os Web Services fornecem uma infraestrutura que permite a interoperabilidade
entre diferentes plataformas de execução, de forma que os diversos dispositivos usualmente
presentes em ambientes ubíquos possam usufruir dos serviços providos.
Referências
Advancing open standards for the information society. Inc.: UDDI Version 3.0.2. February
2010, http://uddi.org/pubs/uddi_v3.htm
Araújo, R. B. Araújo. (2003) “Computação ubíqua: princípios, tecnologias e desafios,” In: Proc.
XXI Simpósio Brasileiro de Redes de Computadores, Minicurso: Livro Texto, Natal, RN,
Brazil, 2003, p. 45-115.
Asthana, A., Cravatts, M., e Krzyzanowski, P. (1994). “An indoor wireless system for
personalized shopping assistance”. In: Proceedings of IEEE Workshop on Mobile
Computing Systems and Applications, Santa Cruz, California, IEEE Computer Society
Press, p. 69-74.
Baldauf, M., Dustdar, S., e Rosenberg, F. (2007) “A survey on context-aware systems”, In: Int.
J. Ad Hoc Ubiquitous Comput., Geneva, Switzerland, Inderscience Publishers, p. 263-277.
Bazire, M., e Brézillon, P. (2005) “Understanding Context Before Using It”, In: Proc. of the 5th
Int. and Interdisciplinary Conference, Paris, France, Springer Verlag, p. 29-40.
BEA Systems, International Business Machines Corporation, Microsoft Corporation,
SAP AG, Siebel Systems. Business Process Execution Language for Web Services
Version 1.1, Maio 2003.
Bennett, F., Richardson, T., e Harter, A. (1994). “Andy Harter. Teleporting - making
applications mobile”. In: Proceedings of IEEE Workshop on Mobile Computing Systems
and Applications, Santa Cruz, California, IEEE Press, p. 82-84.
Brézillon, P. (1999) “Context in Problem Solving: A Survey”, In: The Knkowledge Engineering
Review, vol. 18, n. 2, p. 1-40.
Brézillon, P., e Pomerol, J.-C. (1999) “Contextual Knowledge Sharing and Cooperation in
Intelligent Assistant Systems”, In: Le Travail Humain, PUF, Paris, v. 62, n. 3, p. 223-246.
Chen, H. An Intelligent Broker Architecture for Pervasive Context-Aware Systems, PhD
Thesis, University of Maryland, Baltimore County, 2004.
Chen, G., Kotz, D., A Survey of Context-Aware Mobile Computing Research, Relatório
Técnico TR2000-381, Dept. of Computer Science, Dartmouth College, 2000.
Coutaz, J., Crowley, J. L., Dobson, S., e Garlan, D. (2005) “Context is Key”, In:
Communications of the ACM, vol. 48, issue 3, New York, USA, ACM, p. 49-53.
Chris Peltz. Web Services Orchestration and Choreography. Computer, 2003.
Daily, P. G., “XML Basics and Benefits”. Disponível em
<http://www.intranetjournal.com/articles/200312/ij_12_08_03a.html>. Acesso em: 07 Maio
2010.
Dey, A. K. (2001) “Understanding and Using Context”, In: Personal Ubiquitous Computing,
vol. 5, issue 1, London, UK, Springer-Verlag, p. 4-7.
Dey, A. K., Futakawa, M., Salber, D., e Abowd, G. D. (1999). “The Conference Assistant:
Combining Context-Awareness with Wearable Computing”. In: Proceedings of the 3rd
International Symposium on Wearable Computer, San Francisco, CA, IEEE Computer
Society Press, p. 21-28.
Dourish, P. Where the action is: the foundation of embodied interaction. MIT Press, Cambridge,
2001.
E9-1-1 Institute. Disponível em: < http://www.e911institute.org/>. Acesso: Abril 2010.
Eisenstein, J., Vanderdonckt, J., e Puerta, A. (2000). “Adapting to mobile contexts with user-
interface modeling”. In: Proceedings of the 3rd IEEE Workshop on Mobile Computing
Systems and Applications, Monterey, California, p. 83-92.
Erl, T.: SOA Principles of Service Design. The Prentice Hall Service-Oriented Computing
Series from Thomas Erl. Prentice Hall PTR, 2007.
Erl, T.: Service-Oriented Architecture: Concepts, Technology & Design. The Prentice Hall
Service-Oriented Computing Series from Thomas Erl. Prentice Hall PTR, 2005.
Fernandes, P. C. C. UBIFEX: Uma Abordagem para Modelagem de Características de Linha de
Produtos de Software Sensíveis ao Contexto. Dissertação de Mestrado, Universidade Federal
do Rio de Janeiro, RJ, 2009.
Forte, M., de Souza, W. L., e do Prado, A. F. (2008) “Using Ontologies and Web Services for
Content Adaptation in Ubiquitous Computing”. In: Journal of Systems and Software, vol. 81,
n. 3, New York, USA, Elsevier Science, p. 368-381.
Gamma, E., Helm, R., Johnson, R., e Vlissides, J. M.. Design Patterns: Elements of Reusable
Object-Oriented Software. Addison-Wesley Professional, 1994.
Grün, C., Werthner, H., Pröll, B., et al. (2008) “Assisting Tourists on the Move - An Evaluation
of Mobile Tourist Guides”, In: Proc. of the 7th International Conference on Mobile Business,
Barcelona, Spain, IEEE Computer Society, p. 171-180.
Lucrédio, D. Uma Abordagem Orientada a Modelos para Reutilização de Software, Tese de
Doutorado, Universidade de São Paulo. Instituto de Ciências Matemáticas e de Computação,
São Carlos, SP, 2009.
Marks, E. A. e Bell, M., 2006, “Service-Oriented Architecture: a planning and
implementation guide for business and techonology”, John Willey & Sons Inc.
Newcomer, Eric. Understanding Web Services - XML, WSDL, SOAP, and UDDI. Addison
Wesley, 2002.
Nikola Milanovic e Miroslaw Malek. 2004. “Current Solutions for Web Service
Composition”. IEEE Internet Computing.
OASIS, Advancing open standards for the information society. Inc.: UDDI Version 3.0.2. 2004.
Disponível em: <http://uddi.org/pubs/uddi_v3.htm>. Acesso em: 07 Mario 2010.
OMA. 2001. WAG UAProf. Disponível em: http://www.openmobilealliance.org. Acesso:
Fevereiro, 2010.
Papazoglou M. P. e Georgakopoulos D. “Service-oriented computing: Introduction”.
Communications of the ACM, 46(10):24–28, Outubro 2003.
Papazoglou, M. P., Heuvel, e Willem-jan, 2007. “Service oriented architectures:
approaches, technologies and research issues”, VLDB Journal, Springer-Verlag.
Perepletchikov, M., Ryan, C., e Tari, Z. 2005. “The Impact of Software Development
Strategies on Project and Structural Software Attributes in SOA”. In: Proc. of On the
Move to Meaningful Internet Systems 2005: OTM Workshops, p. 442-451.
Santos, V.V., CEManTIKA: A Domain-Independent Framework for Designing Context-
Sensitive Systems, Tese de Doutorado, Universidade Federal de Pernambuco, PE, 2008.
Schilit, B., e Theimer M. (1994) “Disseminating Active Map Information to Mobile Hosts”, In:
IEEE Network, vol. 8, p. 22-32.
Viana, W., e Andrade, R. M. C. (2008) “XMobile: a MB-UID environment for semi-automatic
generation of adaptive applications for mobile devices”. In: Journal of Systems and Software,
vol. 81, n. 3, p. 382-394.
Vieira, V., Tedesco, P., e Salgado, A. C. (2009) “A Process for the Design of Context-Sensitive
Systems”, In: Proc. of the Int. Conference on Computer Supported Cooperative Work in
Design, IEEE, p. 143-148.
W3C. Web Services Architecture. 2004a. Disponível em: < http://www.w3.org/TR/ws-arch>
Acesso em: 07 Maio 2010.
W3C. Web Services Description Language (WSDL) Version 2.0 Part 1: Core Language. 2007.
Disponível em: http://www.w3.org/TR/wsdl20>. Acesso em: 07 Maio 2007.
W3C. Simple Object Access Protocol (SOAP) Version 1.2 Part 1: Messaging Framework
(Second Edition). April 2007, http://www.w3.org/TR/soap12-part1/.
Walsh A. E., editor. UDDI, SOAP, and WSDL: The Web Services Specification Reference
Book. Prentice Hall, 2002.
Want, R,, Hopper, A., Falcão, V., e Gibbons, J. (1992) “The Active Badge location system”. In:
ACM Transactions on Information Systems, vol. 10, n. 1, p. 91-102.
Weiser, M. (1999) “The computer for the 21st century”. In: ACM SIGMOBILE Mobile
Computing and Communications Review - Special issue dedicated to Mark Weiser, vol. 3, n.
3, p. 3-11.
WURFL. Wireless Universal Resource File. Disponível em: <http://wurfl.sourceforge.net>.
Acesso: Fevereiro, 2010.