Uma Arquitetura para Acesso e Integração de
Dados em Aplicações Sensíveis ao Contexto
Natália Quirino de Oliveira
Orientador: Prof. Dr. Alvaro Cesar Pereira Barbosa
Mestrado em Informática
Universidade Federal do Espírito Santo
Contexto e motivação
Computação ubíqua
Aplicações sensíveis ao contexto
Automatizar tarefas
Situação do usuário
Situação do ambiente
Contexto e motivação
Integração de dados contextuais
Vários domínios
Projetos DBMware, Infraware, CoDIMS,
Telecardio
Infraware
CoDIMS original
Outras instâncias: CoDIMS-G, MECD
E, neste trabalho, o CoDIMS-CA
Objetivo
Nova instância do CoDIMS (CoDIMS-CA) para
atender aos projetos Infraware e Telecardio
Definição de uma arquitetura para integração
de dados contextuais
Definição de uma estratégia para execução
distribuída de consultas
Overview
Para atingir os objetivos:
Conceitos e Tecnologias
Requisitos
Trabalhos Relacionados
Conceitos e Tecnologias
Framework
Componentes
Wrappers
Metadados
Ontologias
Bancos de dados: ativos, temporais,
espaciais
Requisitos
Acesso e integração de dados
Entrega ativa de dados
Dinamismo das informações
Metadados
Perfil de usuário
Configuração e extensibilidade
Histórico contextual
Prioridade entre consultas
Trabalhos relacionados
Nexus
DBGlobe
Mogatu
MoCA
Awareness
Trabalhos relacionados
Sub-conjuntos de requisitos atendidos
Trabalhos relacionados
Aspectos de entrega
Hipac Snoop Liquid
Linguagem
específica
Eventos compostos
Sim
Sim
Sim
Sim
Não
Sim
Sim
Sim
Distribuição
Não
Não
Sim
Sim
Novos operadores
Não
Sim
Não
Sim
CoDIMS-CA
Arquitetura conceitual
Diagrama de componentes
Diagrama de classes
Diagrama de classes (cont.)
Exemplo de Aplicação: Telemedicina
Monitorar ininterruptamente e remotamente
pacientes que têm doenças crônicas
Isquemia do miocárdio
Integração de eletrocardiograma, outros
sinais vitais, prontuário do paciente
Exemplo de Aplicação: Projeto Telecardio
Exemplo de Aplicação:
Deseja-se monitorar um paciente que se encontra
em casa, com um dispositivo holter que se
comunica uma unidade base local. A unidade base
se comunica com o servidor localizado no hospital
Dados são gerados pelo holter a cada 30 segundos
Monitoramento periódico ou emergências
Integração de dados de prontuário, ECG
(freqûencia cardíaca) e temperatura
Subscrição em formato SQL-Like
SELECT p.idPaciente, p.nome, p.idade,
last 10 e.FC values
FROM paciente p, ecg e, temperatura t
WHEN e.FC onIncrease AND e.FC > 90 AND
t.temperatura onIncrease AND t.temperatura
> 39 AND p.fumante = “sim”
Fontes Utilizadas
Fonte de Dados
Nome
Registros de Pacientes
Prontuário
(idPaciente,nome,idade,
sexo,fumante)
ECG de pacientes
ECG
(idPaciente, FC,
data-hora)
Temperatura
Temperatura de
pacientes
(idPaciente,
temperatura,
data-hora)
Origem dos
dados
Tipo dos
dados
Servidor do
hospital
Relacional
Sensor no
paciente
XML
Sensor no
paciente
TXT
Web services criados
A seguinte distribuição foi utilizada no estudo
de caso
Enfoque na distribuição das fontes de dados
Árvore de execução de consultas
Conjunto resultado
Plano de Execução de Consultas
<operator execution-step ="1"><Scan table="Temperatura">
<column name="idPaciente" /> <column name=“temperatura"/>
<constraint leftArg=”temperatura” operation=”bigger” rightArg=”39”/>
<constraint OnIncrease column name=“temperatura"/>
<consumer id="3"/> </scan> </operator>
<operator execution-step ="2"> <Scan table=”ECG”>
<column name="idPaciente" /> <column name="FC"/>
<constraint leftArg=”FC” operation=”bigger” rightArg=”90”/>
<constraint OnIncrease column name="FC"/>
<consumer id="3"/> </scan> </operator>
<operator execution-step ="3"> <And left-producer="1" right-producer="2">
<constraint leftArg="idPaciente" operation="equals" rightArg="idPaciente"/><consumer
id="5"/></And></operator>
<operator execution-step ="4"> <Scan table="Prontuario">
<column name="idPaciente” /> <column name=“idade "/><column name="nome "/>
<constraint leftArg=”fumante” operation=”equals” rightArg=”sim” />
<consumer id=”5”/> </scan></operator>
<operator execution-step="5"> <Join left-producer="3" right-producer="4">
<constraint leftArg="idPaciente" operation="equals" rightArg="idPaciente"/>
</ join></operator>
Gerente de tarefas
Histórico de
eventos
Processador de
consultas
Fabrica de MECs
MEC
Metadados
OP
aoAumentar
Fabrica de agentes
OP and
OP
aoAumentar
Agente
OP Join
Agente
OP scan
Fumante = “sim”
FC > 90
Temp > 39
WrapperECG
Temp = 40
Frequencia
Frequencia= =9165
WrapperMédico
Conjuntos resultado
Resultset do operador Scan: Temperatura
<Resultset xmlns="">
<tupla xmlns="" idPaciente="00001" temperatura=“40"/>
<tupla xmlns="" idPaciente="00002" temperatura=“40"/></Resultset>
Resultset do operador Scan: frequência cardíaca
<Resultset xmlns="">
<tupla xmlns="" idPaciente="00001" FC="92" />
<tupla xmlns="" idPaciente="00003" FC="93" />
</Resultset>
Resultset do operador And:
<Resultset xmlns="">
<tupla xmlns="" idPaciente="00001" FC="92“ temperatura=“40”/></Resultset>
Resultset do operador Scan: paciente
<Resultset xmlns="">
<tupla xmlns="" idPaciente="00001“ nome=“Fulano da Silva” idade="52" sexo=”masculino”
fumante="sim” /> </Resultset>
Resultset do operador Join:
<Resultset xmlns="">
<tupla xmlns="" id_paciente="00001" temperatura=“40" FC=”92” idade="52” sexo=”masculino”
fumante="sim /></Resultset>
Implementação
JDOM
SAX
Tomcat
NetBeans
PostgreSQL
Conclusão
Avanços na popularização de dispositivos
Computação ubíqua, sistemas sensíveis ao
contexto: maior interação com os usuários
Necessidade de arquiteturas apropriadas
Nova instância do CoDIMS, o CoDIMS-CA
Contribuições
Lista de requisitos para integração de dados contextuais
Máquina de execução de consultas distribuida para
entrega ativa de dados
Fábricas e distribuição de agentes e operadores
Arquitetura configurável e flexível
Definição de esquemas XML
Implementação do protótipo
Reutilização do framework CoDIMS
Publicações
Requisitos atendidos
Acesso e integração de dados
Entrega ativa de dados
Dinamismo das informações
Metadados
Perfil de usuário
Configuração e extensibilidade
Histórico contextual
Prioridade entre consultas
Requisitos não atendidos
Contexto espaço-temporal
Linguagens específicas
Modificações na ACID
Mobilidade
Comparação com outras arquiteturas
Distinções na detecção de eventos e
processamento de consultas
Estratégia de execução de consulta
Adição de novos componentes
Trabalhos futuros
Otimização dinâmica de consultas
Estatísticas e gerenciamento de fontes
Desenvolvimento de wrappers (imagens médicas,
GPS)
Tolerância a falhas
Estudos sobre novos componentes (histórico, perfil)
Estudo de grids para integração de dados
contextuais
Agradecimentos
CNPq e FAPES, pelo apoio financeiro
UFES/PPGI, pela oportunidade e
conhecimento recebido
Alunos do PET Engenharia de Computação
(Bruna Colnago e Igor Magri), pelo apoio na
implementação
Uma Arquitetura para Acesso e Integração de
Dados em Aplicações Sensíveis ao Contexto
Natália Quirino de Oliveira
Orientador: Prof. Dr. Alvaro Cesar Pereira Barbosa
Mestrado em Informática
Universidade Federal do Espírito Santo
Subscrição histórico - XML
<?xml version="1.0" ?>
<subscription xmlns="http://www.w3schools.com">
<substype valor="Last-values"></substype>
<appid valor="111"></appid>
<userid valor="222"></userid>
<usergroup valor="333"></usergroup>
<atributos>
<atributo valor="ECG"></atributo>
<atributo valor="pressao"></atributo>
</atributos>
</subscription>
Armazenamento histórico - XML
<?xml version="1.0" encoding="UTF-8"?>
<historico>
<atributo>ECG</atributo>
<tabela>sinaisVitais</tabela>
<inicioArmazenamento>10:02:05</inicioArmazenamento>
<granularidade>00:01:00</granularidade>
<valor>90</valor>
<valor>87</valor>
</historico>
Fonte indisponível - XML
<fonteIndisponivel idFonte=”1234”>
<periodo>
<dataInicio> 2007/03/01 23:42:22
<dataFinal> 2007/03/01 23:51:32
</periodo>
<periodo>
<dataInicio> 2007/02/01 10:40:11
<dataFinal> 2007/02/01 11:20:36
</periodo>
</fonteIndisponivel>
</dataInicio>
</dataFinal>
</dataInicio>
</dataFinal>
Event Report - XML
<eventReport>
<tipo>anomaliaECG</tipo>
<idEvento></idEvento>
</eventoInicial timestamp=10:20:13 evento=”ev1”>
</intermediario timestamp=10:21:42 evento=”ev2”>
</eventoFinal timestamp=10:21:42 evento=”ev4”>
</disparo timestamp=”10:21:59”>
</eventReport>
Perfil
SELECT * FROM medico m
WHERE m.especialidade = “oftamologista”
<perfil>
<coluna nome="bairro" valor="Jardim Camburi" eliminatorio="false" />
<coluna nome="convenio" valor="Casufes" eliminatorio="true" />
</perfil>
SELECT * from medico m
WHERE m.especialidade = “oftamologista” AND m.convenio = “casufes”
ORDER BY m.bairro
Interfaces para Web Services
public interface InterfaceSubscricao {
public void popularSubscricao(String arquivo);}
public interface InterfaceAgente {
public void iniciarMonitoramento();
public void pausarMonitoramento();
public void cancelarMonitoramento();
public void run();}
public interface InterfaceGerenciaFonte {
public void checarTodasFontes();
public void checarFonte(Fonte f);
public void monitorarStatusFontes();
public void alertarDesconexao(Fonte f);}
Interfaces para Web Services (cont.)
public interface InterfacePerfil {
public void popularPerfil(int idUsuario, String arquivo);
public void personalizarConsulta(String arqPerfil, String arqConsulta);
public void consultarPerfil(int idUsuario);}
public interface InterfaceHistorico {
public Vector obterDadosHistoricos(String atributo, String tabela);
public void armazenarHistorico(String atr, String tab, String valor);
public void iniciarArmazenamento(String atributo, String tabela);
public void pausarArmazenamento(String atributo, String tabela);}
public interface InterfaceGerenciaTarefas {
public void checarMaiorPrioridade();
public void adicionarSubscricao(Subscricao s);
public void removerSubscricao(int id);}