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);}