3 SERVIÇOS DE DESCOBERTA E CONTEXTO
3.3 Arquitetura do framework
3.3.1 Agentes de Recursos (AR)
Os Agentes de Recursos são os elementos da infra-estrutura responsáveis por coletar os dados de contexto dos diversos sensores presentes no ambiente no qual as aplicações sensíveis ao contexto encontram-se presentes. Eles atuam como intermediários entre os sensores e as aplicações cientes do contexto tornando as informações de contexto disponíveis, além de responder às consultas de monitoramento realizadas sobre os recursos, escondendo detalhes de baixo nível utilizados no sensoriamento e aquisição de dados brutos. Para que isso seja possível, é necessária a existência uma interface uniforme para que a aplicação não tenha que estar ciente dos detalhes específicos de cada tipo de mecanismo de sensoriamento. Isto está de acordo com a abordagem centrada em middleware que foi apresentada na Seção 1.2.
Cada AR possui associado a ele uma descrição em XML que deverá ser registrada em um Serviço de Registro e Diretório (SRD) discutido logo a seguir. Esta descrição está associada à descrição do tipo de recursos discutida na Seção 3.2. Ou seja, as descrições da Seção 3.2 descrevem os tipos de recursos que poderão estar presentes no contexto de execução das aplicações enquanto que as descrições de recursos representam descrições de diferentes instâncias destes tipos. Cada tipo de recurso tem o suporte de um ou mais ARs correspondentes que, como mencionado, é a entidade da infra-estrutura responsável por prover os dados de contexto do recurso que ele representa.
A Listagem 4 apresenta o XSD utilizado para registrar ARs no Serviço de Registro e Diretório.
Na linha 4 está presente o elemento ResourceRegister indicando que se trata de uma mensagem de registro de AR. Na linha 6 o elemento Type informa o tipo do recurso. Este tipo deve estar previamente registrado no RDS. Através desta informação, o SRD é capaz de validar as propriedades do AR com as propriedades do tipo, garantindo a consistência dos dados informados (tipo correto de dado, limites inferior e superior válidos, etc.).
O elemento opcional Description (linha 7) é utilizado para fornecer um texto livre legível por humanos cujo objetivo é descrever o AR. A linha 8 contém o elemento Attributes
que contém a relação de atributos do AR. As linhas 13 a 16 contêm o nome (elemento Name) e o valor (elemento Value) de cada atributo. Todo atributo presente na descrição do tipo do recurso tem que ser declarado na descrição do AR, com os valores consistentes com os tipos e restrições dos atributos previamente declarados.
1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
3 attributeFormDefault="unqualified" elementFormDefault="qualified"> 4 <xsd:element name=”ResourceRegister”/>
5 <xsd:sequence>
6 <xsd:element name=”Type” type=”xsd:string”/>
7 <xsd:element name=”Description” type=”xsd:string” minOccurs=”0”/> 8 <xsd:element name=”Attributes” minOccurs=”0”>
9 <xsd:complexType> 10 <xsd:sequence>
11 <xsd:element name=”Attribute” maxOccurs=”unbounded”> 12 <xsd:complexType>
13 <xsd:attribute name=”Name”
14 type=”xsd:NCName” use=”required”/> 15 <xsd:attribute name=”Value” type=”xsd:anySimpleType” 16 use=”required”/> 17 </xsd:complexType> 18 </xsd:element> 19 </xsd:sequence> 20 </complexType> 21 </xsd:element>
22 <xsd:element name="URI" type="xsd:anyURI" /> 23 <xsd:element name="IP" type="xsd:string" />
24 <xsd:element name="CollectInterval" type="xsd:long" /> 25 <xsd:element name="Tecnologies">
26 <xsd:complexType> 27 <xsd:sequence>
28 <xsd:element name="Tecnology" maxOccurs="unbounded"> 29 <xsd:complexType>
30 <xsd:attribute name="Type" type="xsd:string" 31 use="required" />
32 <xsd:attribute name="URL" type="xsd:anyURI" 33 use="required" /> 34 </xsd:complexType> 35 </xsd:element> 36 </xsd:sequence> 37 </xsd:complexType> 38 </xsd:element> 39 </xsd:sequence> 40 </xsd:element> 41 </xsd:schema>
Listagem 4 - XSD para registro de Agentes de Recursos no SRD
A linha 22 contém o elemento URI que é o identificador único do AR em todo o ambiente de execução da aplicação. É de responsabilidade da pessoa que implanta o AR especificar a URI. Caso já exista um AR registrado com este URI no SRD o mesmo não efetuará o registro do AR. A linha 23 indica a localização do AR (elemento IP).
CollectInterval (linha 24). Este dado é importante, pois dependendo da natureza da aplicação,
a mesma pode estar interessada em ARs cujos valores desta propriedade estejam dentro de intervalos pré-definidos.
O elemento Tecnologies (linha 25) contém uma relação de informações sobre as diferentes tecnologias de comunicação com as quais o AR é capaz de lidar. O atributo Type (linha 30) contém um nome indicativo do tipo de tecnologia com a qual o AR é capaz de se comunicar (serviço web ou RMI, por exemplo), enquanto que o atributo URL informa a localização do serviço com a indicação do protocolo com o qual o AR é capaz de lidar.
A Listagem 5 apresenta a mensagem XML enviada por um AR do mesmo tipo que o apresentado na Listagem 3.
1 <?xml version="1.0" encoding="UTF-8"?> 2 <ResourceRegister>
3 <Type>StorableProcessing</Type>
4 <Description>Processing AR with storage at leme machine</Description> 5 <Attributes>
6 <Attribute Name=”CPUClock” Value=”Dynamic” /> 7 <Attribute Name=”TotalMemory” Value=”2048” /> 8 <Attribute Name=”FreeMemory” Value=”Dynamic” /> 9 <Attribute Name=”CPUIdle” Value=”Dynamic” /> 10 <Attribute Name=”TotalDisk” Value="60000” /> 11 <Attribute Name=”DiskFree” Value=”Dynamic” /> 12 <Attribute Name=”OSName” Value=”Linux” /> 13 </Attributes> 14 <URI>leme.pel.uerj.br/ProcessingAgent</URI> 15 <IP>152.92.155.196</IP> 16 <CollectInterval>5</CollectInterval> 17 <Tecnologies> 18 <Tecnology Type=”webservice” 19 URL=”http://leme.pel.uerj.br:1978/ProcessingAgent?wsdl”/> 20 <Tecnology Type=”rmi” 21 URL=”rmi://leme.pel.uerj.br/ProcessingAgent”/> 22 </Tecnologies> 23 </Resource>
Listagem 5 - Mensagem para registro de um Agente de Recurso
Nesta mensagem está contido na linha 3 o tipo do Agente de Recurso (StorableProcessing) e seus atributos (linhas 6 a 12). As propriedades CPUClock,
TotalMemory, FreeMemory e CPUIdle não estão presentes na Listagem 3, mas pertencem ao
tipo SimpleProcessing (Listagem 2). Como o tipo SimpleProcessing é o supertipo de
StorableProcessing este último herda automaticamente suas propriedades.
Os valores das propriedades CPUClock (linha 6), FreeMemory (linha 8), CPUIdle (linha 9) e DiskFree (linha 11) são declarados como dinâmicos (Dynamic). Esta informação indica que os valores destas propriedades podem sofrer variações ao longo do tempo, ou seja,
seus valores variam de acordo com o contexto de execução no qual a aplicação se encontra e serão disponibilizadas através do Serviço de Contexto (SC) a ser discutido mais tarde nesta seção.
O AR sendo registrado é identificado de forma única através de seu URI (linha 14). Esta identificação nada tem a ver com a tecnologia com a qual o AR foi construído ou com a(s) tecnologia(s) de comunicação que o AR utiliza para se comunicar. Ele tem que ser único em todo o domínio no qual o RDS encontra-se inserido.
Nas linhas 18 e 19 é informado que o AR é capaz de se comunicar através de um serviço web e que a definição do serviço encontra-se disponível em
http://leme.pel.uerj.br:1978/ProcessingAgent?wsdl. Além de se comunicar através de serviço
web, o AR é capaz de se comunicar através de RMI (RMI, 2008) (linha 20) e que o proxy para o objeto Java que representa o Agente de Recursos pode ser localizado através da URL
rmi://leme.pel.uerj.br/ProcessingAgent.