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 HipacSnoopLiquid CoDIMS-CA Linguagem específica Sim Eventos compostosNãoSim DistribuiçãoNão Sim Novos operadoresNãoSimNãoSim
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 DadosNome Origem dos dados Tipo dos dados Registros de Pacientes (idPaciente,nome,idade, sexo,fumante) ProntuárioServidor do hospital Relacional ECG de pacientes (idPaciente, FC, data-hora) ECGSensor no paciente XML Temperatura de pacientes (idPaciente, temperatura, data-hora) TemperaturaSensor 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
Temp = 40 Frequencia = 65 Frequencia = 91 Temp > 39 FC > 90 Fumante = “sim”
Conjuntos resultado Resultset do operador Scan: Temperatura Resultset do operador Scan: frequência cardíaca Resultset do operador And: Resultset do operador Scan: paciente Resultset do operador Join:
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
Armazenamento histórico - XML ECG sinaisVitais 10:02:05 00:01:
Fonte indisponível - XML 2007/03/01 23:42: /03/01 23:51: /02/01 10:40: /02/01 11:20:36
Event Report - XML anomaliaECG
Perfil SELECT * FROM medico m WHERE m.especialidade = “oftamologista” 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);}