Desenvolvimento de um Sistema de Informação Médica com Web Services e MDA Área de Concentração: Ciência da Computação Aluna: Simone Azevedo Bandeira de Melo Orientador: Prof. Ph. D. Zair Abdelouahab
Agenda Introdução Área Médica, MDA e Web Services Trabalhos Relacionados Sistema de Informação Médica Proposto Transformações de Modelos Prototipagem do Sistema Proposto Considerações Finais 2
Introdução Problema Abordado Solução Proposta 3
Problema Abordado Os sistemas de informação médica possuem diversas informações, que geralmente não são compartilhadas entre as instituições médicas Os sistemas não são interoperáveis A grande maioria dos sistemas é baseada em diferentes plataformas de hardware e software 4
Solução Proposta Propomos um sistema de informação médica baseado em Web Services e MDA para fornecer interoperabilidade entre aplicações de instituições médicas Web Services é um padrão para o desenvolvimento de sistemas que utilizam entidades distribuídas em plataformas diferentes na Internet 5
Solução Proposta A modelagem do sistema de informação médica proposto seguiu uma abordagem MDA Um modelo independente de plataforma foi criado para o sistema proposto Este modelo é aplicado a diferentes plataformas 6
Objetivos Desenvolvimento de um sistema de informação médica utilizando plataformas de Web Services na abordagem MDA Desenvolver um modelo independente de plataforma (PIM) para o sistema médico proposto Desenvolver metamodelos para as plataformas de Web Services em JWSDP e WSOracle 7
Objetivos Usar transformações de modelos Aplicar especificações de correspondências Criar e executar regras de transformação Usar a transformação do PIM do sistema de informação médica para os Modelos específicos da plataforma (PSMs) para gerar parte do código. 8
Sistemas e Tecnologias de Informação na Área de Saúde Dados - dados de um paciente Informação - diagnóstico de um paciente Conhecimento - Informações aplicadas na resolução de um problema ou na tomada de uma decisão Dados informação conhecimento 9
MDA Model Driven Architecture Usa modelos no desenvolvimento de softwares Prover soluções para o problema de desenvolvimento, manutenção, produtividade, favorecer a interoperabilidade e a portabilidade 10
MDA conformesto MOF conformesto conformesto transformation language ATL conformesto UML source metamodel transformation rules target metamodel WSOracle from to conformesto exec conformesto PIM source model source transformation engine target target model PSM 11
Web Services Resposta usando WSDL Descrição do Serviço usando WSDL Registro UDDI Consulta ao Diretório de Serviços PUBLICAÇÃO DESCOBERTA Mensagens SOAP LIGAÇÃO Provedor de Serviços Requisição e Resposta XML baseado no WSDL Consumidor de Serviços 12
Trabalhos Relacionados a Área Médica Características MIDster HealthNet 1. Versão HealthNet 2. Versão SET-WS Sistema Proposto 1- Sistema de compartilhamento de imagens médicas? SIM NÃO NÃO NÃO SIM 2- Sistema de apoio a 2ª opinião em saúde e ao telediagnóstico? NÃO SIM SIM SIM SIM 3 - Sistema especialista? NÃO NÃO NÃO SIM NÃO 4 - Baseado em Web Services SIM NÃO SIM SIM SIM 5 - Bases de dados centralizada? NÃO SIM NÃO NÃO NÃO 6 - Bases de dados distribuída? SIM NÃO SIM SIM SIM 7 - Bases de conhecimento? NÃO NÃO NÃO SIM NÃO 8 - Desenvolvido com MDA NÃO NÃO NÃO NÃO SIM 13
Trabalhos Relacionados a MDA Um Framework de Transformação de Modelos para a Construção Automatizada de Modelos UML para Modelos de Desempenho. AMBROGIO, Andréa. WOSP 05, July 2005 14
Trabalhos Relacionados a MDA Aplicando a abordagem MDA para Aplicações de B2B: Mapeamentos BÉZIVIN, Jean; HAMMOUDI, Slimane; LOPES, Denivaldo; JOUAULT, Frédéric. (WMDD 2004) ECOOP 2004 15
Sistema de Informação Médica Proposto Cenários do Sistema de Informação Médica 1 Web Services 2 Web Services DataBase Doctor Internet Medical Center DataBase 3 Web Services Doctor Medical Center 4 DataBase 16
Sistema de Informação Médica Proposto Arquitetura do Sistema de Informação Médica Servidor com a Base de Informações Médica Aplicação de Acesso a Base de Conhecimento Servidor Web Servidor de Aplicações Interface da Aplicação Interface da Aplicação Usuário especializado Usuário especializado 17
Médico entrevista paciente, para levantar histórico desse paciente (composto) Associa doença ao paciente (composto) Associa exame ao paciente (composto) Associa sintoma ao paciente (composto) Associa cirurgia ao paciente (composto) Associa medicamento ao paciente Clinica do paciente (examina fisicamente o paciente ) Não Novos sintomas foram observados Sim Seleciona os dados coletados de (Doenças,Sintomas, Medicamentos, Cirurgia e Exames) f) compartilhamento de informações remotas Associar dados obtidos a base de doenças x sintomas (local e remota) Gera uma lista de doenças no centro médico local Contactar centro médico remotamente via Web Service Solicita lista de doenças x sintomas Dar Diagnóstico Diferencial Dados são suficientes para diagnóstico presuntivo Sim Dar Diagnóstico Presuntivo Não Retorna a lista de doenças compatívéis Gera a lista de doenças do centro remoto Dados são suficientes para diagnóstico definitivo Sim Não Solicita Exames Complementares Analisa Exames Complementares Dar Diagnóstico Definitivo
PIM em UML Doenças DiagnosticoDefinitivo Médico * +CadastrarDoenças() : void +RemoverDoenças() : void * +VerificarDadosSuficientesDD() : bool +ProverDiagnósticoDefinitivo() * 1 +ProcurarMédico() : void +ListarMédicos() : void Exames 1 DiagnosticoPresuntivo * +CadastrarExames() : void +RemoverExames() : void * +VerificarDadosSuficientesDP() : bool +CriarListaProvaveisDoenças() : Doenças ListaGeral Cirurgias 1 DiagnosticoDiferencial +ObterListaRemota() : void +ObterListaLocal() : void +ListaDoençasCompatíveis() : Doenças +ObterListaGeral() : ListaGeral * * +CadastrarCirurgias() : void +RemoverCirurgias() : void Sintomas +CadastrarSintomas() : void +RemoverSintomas() : void * * «datatype» <<Service>> Lista Remota * +EncontrarBasesInformaçãoCompartilhadas() +CriarListaRemota() : Doenças ListaResumida * Medicamentos +CadastrarMedicamentos() : void +RemoverMedicamentos() : void Paciente * ListaLocal +CriarListaLocal() : Doenças +MostrarListaRezumida() : void +CadastrarPaciente() : void +RemoverPaciente() : void +AssociarDoenças() : void +AssociarSintomas() : void 19
Metamodelo UML Extraído da especificação da UML v. 1.4 20
Metamodelo Java Estendido da Tese de Doutorado LOPES, Denivaldo, Estudo e aplicações de uma abordagem MDA para as plataformas de Services Web., Universidade de Nantes, Nantes, 2005. 21
Metamodelo WSOracle 22
Template WSOracle 23
Metamodelo JWSDP Estendido da Tese de Doutorado LOPES, Denivaldo, Estudo e aplicações de uma abordagem MDA para as plataformas de Services Web., Universidade de Nantes, Nantes, 2005. 24
Template JWSDP 25
Transformações de modelos PIM { Modelo Fonte (UML) PSM { transformação modelo-à-modelo Modelo Alvo (WSDL) Modelo Alvo (WSOracle) Modelo Alvo (JWSDP) transformação modelo-à-código Código { Código-Fonte (XML) Código-Fonte (Java), arquivos de desenvolvimento e configuração Código-Fonte (Java), arquivos de desenvolvimento e configuração 26
Transformação de UML para WSOracle Arquivos de Configuração são arquivos em formato XML que dão suporte a execução do Web Service Arquivos de Serviços são arquivos.java que implementam a interface e o serviço propriamente dito Etapas para gerar regras: Etapa 1 Gerar regras de transformação para os arquivos de configuração Etapa2 Gerar regras de transformação para os arquivos de serviços 27
Transformação de UML para WSOracle As transformações foram geradas obedecendo os seguintes passos: Mapeamento Manual EscritadaRegra Geração do PSM Geração do Código-Fonte 28
Transformação de UML para WSOracle Mapeamentos para os arquivos de Configuração Mapeamentos Nome De UML Para WSOracle C2Web Class WebApp C2OracleWebServices Class OracleWebServices C2WebServices Class WebServices C2Application Class Application C2OrionApplication Class OrionApplication C2DataSources Class DataSources C2JavaWSDLMapping Class JavaWSDLMapping 29
Regra de Transformação C2Web para os arquivos de Configuração 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 -- == File : UML2WSORACLE_Deploy.atl Module UML2WSORACLE; Create OUT : WSORACLE from IN : UML; Rule C2Web{ from c: UML!Class (c.stereotype ->exists(e e.name='service')) to webapp : WSORACLE!WebApp( xmlns <- 'http://java.sun.com/xml/ns/j2ee' xsi <- 'http://www.w3.org/2001/xmlschema-instance', version <- '2.4', servlet <- serv, Servletmapping <- smpp ), serv: WSORACLE!Servlet( description <- 'Web Service ' + c.namespace.name + 'SoapHttpPort', displayname <- 'Web Service ' + c.namespace.name + 'SoapHttpPort', servletname <- c.name + 'SoapHttpPort', Servletclass <- c.namespace.name + '.' + c.name, Loadonstartup <- '1' ), smpp : WSORACLE!ServletMapping( name <- c.namespace.name + 'SoapHttpPort', urlpattern <-c.namespace.name + 'SoapHttpPort' ) } 30
Transformação de UML para WSOracle Execução da regra C2Web em ATL para os arquivos de configuração PSM 31
Transformação de UML para WSOracle Execução da regra WSORACLE_Deploy2SC_query em ATL para os arquivos de configuração 32
Transformação de UML para WSOracle Regra WSORACLE_Deploy2SC_query 1 2 3 4 query _WSORACLE_Deploy2SC_query = WSORACLE!WebApp.allInstances()-> Select(e e.oclistypeof(wsoracle!webapp))-> collect(x x.tostring().writeto('c:/sourcecode/oracle/j2ee/' + 'MedicalSystem' + '/' +'web.xml'))->size() + 5 6... Uses _WSORACLE_2SC; 1 2 3 4 5 6 7 8 helper context WSORACLE!WebApp def: tostring() : String = '<?xml version="1.0" encoding="utf-8"?>\n' + '\t<web-app xmlns="'+ self.xmlns+'"\n'+ '\t\txsi.schemalocation="'+ self.xsi +'"\n' + '\t\tversion="'+ self.xsi +'">\n' + self.servlet.tostring() + self.servletmapping.tostring() + '</web-app>'; 33
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <?xml version = '1.0' encoding = 'windows-1252'?> <XMI xmi.version = '1.2' timestamp = 'Tue Feb 07 15:57:59 GMT-03:00 2006'> <XMI.header> <XMI.documentation> <XMI.exporter>Netbeans XMI Writer</XMI.exporter> <XMI.exporterVersion>1.0</XMI.exporterVersion> </XMI.documentation> </XMI.header> <XMI.content> <WSORACLE.web.WebApp xmi.id = 'a1' xmlns ='http://java.sun.com/xml/ns/j2ee' xsi = 'http://www.w3.org/2001/xmlschema-instance' version = '2.4'> <WSORACLE.web.WebApp.servletmapping> <WSORACLE.web.ServletMapping xmi.id = 'a2' name = 'SistemaInformacoesMedicoSoapHttpPort' urlpattern = 'SistemaInformacoesMedicoSoapHttpPort'/> </WSORACLE.web.WebApp.servletmapping> <WSORACLE.web.WebApp.servlet> <WSORACLE.web.Servlet xmi.id = 'a3' description = 'Web Service SistemaInformacoesMedicoSoapHttpPort' displayname = 'Web Service SistemaInformacoesMedicoSoapHttpPort' servletname = 'ListaRemotaSoapHttpPort' servletclass = 'SistemaInformacoesMedico.ListaRemota' loadonstartup = '1'/> </WSORACLE.web.WebApp.servlet> </WSORACLE.web.WebApp> </XMI.content> </XMI> 34
Transformação de UML para WSOracle Mapeamentos para os arquivos de Serviço Mapeamentos Nome P2JP C2JC I2I M2M Pinout2JP A2F Ae2F DT2JPT De UML Package Class Interface Method + Operation Parameter Attribute AssociationEnd DataType Para JAVA1.5 JPackage JClass JInterface Jmethod JParameter Jfield Jfield JprimitiveType 35
Regra de Transformação P2JP e C2JClass para os arquivos de Serviços 1 2 3 4 5 6 7 Rule P2JP{ From pck : UML!Package to jp : JAVAM!JPackage( Name <-pck.name, jelements <- pck.ownedelement ) } 1 2 3 4 5 6 7 8 9 10 11 rule C2JClass{ from c : UML!Class (c.stereotype -> exists(e e.name='service')) to conf : JAVAM!JClass( name <- c.name, *** annotation <- annot ), annot:javam!annotation( value <- '@WebService(name = ' + c.name + ',servicename = ' + c.name + ',targetnamespace=http://' + c.name + '.ws' ) } 36
Transformação de UML para WSOracle Execução da regra P2JP e C2JClass em ATL para os arquivos de serviços PSM 37
Transformação de UML para WSOracle Execução da regra Java2SourceCode_query em ATL para os arquivos de serviços 38
Transformação de UML para WSOracle Regra Java2SourceCode_query 1 2 3 4 5 query Java2SourceCode_query = JAVA!JClassifier.allInstances()-> select(e e.oclistypeof(java!jclass) or e.oclistypeof(javam!jinterface))-> collect(x x.tostring().writeto('c:/sourcecode/oracle/j2ee/' + x.jpackage.name.replaceall('.', '/') + '/' + x.name + '.java')); 6 7... uses Java2SourceCode; 39
Transformação de UML para WSOracle 1 package sistemainformacoesmedico; 2 @WebService (name = "ListaRemota", servicename="listaremota", targetnamespace = "http://sistemainformacoesmedico.ws") 3 public Class ListaRemota { 4 public ListaRemota() { 5 } 6 @WebResult (name="result", targetnamespace="http://sistemainformacoesmedico.ws") 7 @WebMethod (operationname = "EncontrarBasesInformacoesCompartilhadas", action="") 8 public int EncontrarBasesInformacoesCompartilhadas () { 9 } 10 @WebResult (name="result", targetnamespace="http://sistemainformacoesmedico.ws") 11 @WebMethod (operationname = "CriarListaRemota", action="") 12 public int CriarListaRemota () { 13 } 14 } 40
Transformação de UML para JWSDP Arquivos de Configuração Arquivos de Serviços Etapas para gerar regras: Etapa 1 Gerar regras de transformação para os arquivos de configuração Etapa2 Gerar regras de transformação para os arquivos de serviços 41
Transformação de UML para JWSDP As transformações foram geradas obedecendo os seguintes passos: Mapeamento Manual EscritadaRegra Geração do PSM Geração do Código-Fonte 42
Transformação de UML para JWSDP Mapeamentos para os arquivos de Configuração Mapeamentos Nome De UML Para JWSDP C2ConfigInterface Class ConfigInterface C2ConfigWsdl Class ConfigWsdl C2WebServices Class WebServices C2Web Class Web C2JavaWSDLMapping Class JavaWSDLMapping 43
Regra de Transformação C2ConfigInterface para os arquivos de Configuração 1 -- == File : UML2JWSDP_Deploy.atl 2 Module UML2_JWSDP_Deploy; 3 Create OUT : JWSDP from IN : UML; 4 Rule C2ConfigInterface{ 5 from c : UML!Class (c.stereotype -> exists(e e.name='service')) 6 to conf : JWSDP!_Configuration( 7 xmlns <- 'http://java.sun.com/xml/ns/jax-rpc/ri/config', 8 service <- serv 9 ), 10 serv: JWSDP!Service( 11 name <- c.name, 12 targetnamespace <- 'http://' + c.namespace.name + '.org/wsdl', 13 typenamespace <- 'http://' + c.namespace.name + '.org/wsdl', 14 packagename <- c.namespace.name, 15 interface <- interf 16 ), 17 interf : JWSDP!Interface( 18 name <- c.feature.name 19 ) 24 } 44
Transformação de UML para JWSDP Execução da regra C2ConfigInterface em ATL para os arquivos de configuração PSM 45
Transformação de UML para JWSDP Execução da regra _JWSDP_Deploy2SC_query em ATL para os arquivos de configuração 46
Transformação de UML para JWSDP Regra _JWSDP_Deploy2SC_query 1 query _JWSDP_Deploy2SC_query = 2 JWSDP!_Configuration.allInstances()-> 3 select(e e.oclistypeof(jwsdp!_configuration))-> 4 collect(x x.tostring().writeto('c:/sourcecode/jwsdp/j2ee/' +' 'SistemaInformacaoMedica' + '/' + 'configinterface.xml'))->size() + 5... 6 Uses _JWSDP_2SC; 1 helper context JWSDP!_Configuration def: tostring() : String = 2 '<?xml version="1.0" encoding="utf-8"?>\n' + 3 '<configuration xmlns="'+self.xmlns+'">\n'+ 4 self.service.tostring()+ 47
Resultado 1 <?xml version = '1.0' encoding = 'windows-1252'?> 2 <XMI xmi.version = '1.2' timestamp = 'Tue Aug 09 17:53:59 GMT-03:00 2005'> 3 <XMI.header> 4 <XMI.documentation> configinterface 5 <XMI.exporter>Netbeans XMI Writer</XMI.exporter> 6 <XMI.exporterVersion>1.0</XMI.exporterVersion> 7 </XMI.documentation> Configuration +xmlns : String +configuration +service 1 * Service +name : String +targetnamespace : String +typenamespace : String +packagename : String 8 </XMI.header> 1 * +service +interface 9 <XMI.content> 1 0 1 1 1 2 1 3 1 4 <JWSDP.configinterface.Service xmi.id = 'a1' name = 'Lista Remota' targetnamespace = 'http://modelo 2.org/wsdl' typenamespace = 'http://modelo 2.org/wsdl'' packagename = 'SistemadeInformacaoMedica'/> < JWSDP.configinterface._Configuration xmi.id = 'a2' xmlns = 'http://java.sun.com/xml/ns/jax-rpc/ri/config'/> Interface +name : String 1 5 1 6 <JWSDP.configinterface.Interface xmi.id = 'a3'/> </XMI.content> </XMI> 48
Transformação de UML para JWSDP Mapeamentos para os arquivos de Serviço Mapeamentos Nome P2JP C2JC I2I M2M Pinout2JP A2F Ae2F DT2JPT De UML Package Class Interface Method + Operation Parameter Attribute AssociationEnd DataType Para JAVA1.5 JPackage JClass JInterface Jmethod JParameter Jfield Jfield JprimitiveType 49
Regra de Transformação P2JP e C2JClass para os arquivos de Serviços 1 2 3 4 5 6 7 Rule P2JP{ From pck : UML!Package to jp : JAVAM!JPackage( Name <-pck.name, jelements <- pck.ownedelement ) } 1 2 3 4 5 6 7 8 9 10 11 rule C2JClass{ from c : UML!Class (c.stereotype -> exists(e e.name='service')) to conf : JAVAM!JClass( name <- c.name, *** annotation <- annot ), annot:javam!annotation( value <- '@WebService(name = ' + c.name + ',servicename = ' + c.name + ',targetnamespace=http://' + c.name + '.ws' ) } 50
Transformação de UML para JWSDP Execução da regra P2JP e C2JClass em ATL para os arquivos de serviços PSM 51
Transformação de UML para JWSDP Execução da regra Java2SourceCode_query em ATL para os arquivos de serviços 52
Transformação de UML para JWSDP Regra Java2SourceCode_query 1 2 3 4 5 query Java2SourceCode_query = JAVA!JClassifier.allInstances()-> select(e e.oclistypeof(java!jclass) or e.oclistypeof(javam!jinterface))-> collect(x x.tostring().writeto('c:/sourcecode/oracle/j2ee/' + x.jpackage.name.replaceall('.', '/') + '/' + x.name + '.java')); 6 7... uses Java2SourceCode; 53
Transformação de UML para JWSDP 1 package sistemainformacoesmedico; 2 public Class ListaRemota { 3 public ListaRemota() { 4 } 5 public int EncontrarBasesInformacoesCompartilhadas () { 6 } 7 public int CriarListaRemota () { 8 } 9 } 54
Transformações de modelos <<Service>> ListavRemota +CriarListaRemota():Doenças PIM PSM Arquivo de Configuração <WSORACLE.web.WebApp xmi.id = 'a5' xmlns = 'http://java.sun.com/xml/ns/j2ee' xsi = 'http://www.w3.org/2001/xmlschema-instance' version = '2.4'> <WSORACLE.web.WebApp.servletmapping> <WSORACLE.web.ServletMapping xmi.id = 'a6' name = 'MedicalDiagnoseSoapHttpPort' urlpattern = 'MedicalDiagnoseSoapHttpPort'/> </WSORACLE.web.WebApp.servletmapping> <WSORACLE.web.WebApp.servlet> <WSORACLE.web.Servlet xmi.id = 'a7' description = 'Web Service MedicalDiagnoseSoapHttpPort' displayname = 'Web Service MedicalDiagnoseSoapHttpPort' servletname = 'RemoteListSoapHttpPort' servletclass = 'MedicalDiagnose.RemoteList' loadonstartup = '1'/> </WSORACLE.web.WebApp.servlet> </WSORACLE.web.WebApp> <WSORACLE.web.WebApp xmi.id = 'a1' xmlns ='http://java.sun.com/xml/ns/j2ee' xsi = 'http://www.w3.org/2001/xmlschema-instance' version = '2.4'> <WSORACLE.web.WebApp.servletmapping> <WSORACLE.web.ServletMapping xmi.id = 'a2' name = 'SistemaInformacoesMedicoSoapHttpPort' urlpattern = 'SistemaInformacoesMedicoSoapHttpPort'/> </WSORACLE.web.WebApp.servletmapping> 55
Protótipo do Sistema Com o propósito de fazer testes sobre o modelo proposto e com base nos esqueletos de código obtidos através da abordagem MDA O protótipo foi desenvolvido para o ambiente Web O protótipo foi desenvolvido com o intuito de acessar e manipular bases com informações médicas através de Web Services 56
Protótipo do Sistema A interface do serviço foi criada Nome dos Métodos do Serviço CadastrarCirurgias CadastrarDoencas CadastrarExames CadastrarMedicamentos CadastrarSintomas CadastrarPaciente RemoverExames AssociarDoencas AssociarSintomas RemoverMedicamentos EncontrarBasesInformacaoCompartilhadas CriarListaRemota 57
Protótipo do Sistema A interface gráfica com o usuário 58
Protótipo do Sistema A interface gráfica com o usuário 59
Conclusão O desenvolvimento do sistema de informação médica colocou em evidência o processo de transformação de PIM para o PSM, utilizado em MDA O desenvolvimento do protótipo visava validar a utilização de Web Services como uma ferramenta para troca de informação médica 60
Contribuições Desenvolvimento da arquitetura do sistema de informação médica proposto Desenvolvimento do modelo independente de plataforma para o sistema de informação médica Desenvolvimento do metamodelo WSOracle Extensão do metamodelo JWSDP da versão 1.3 para a versão 1.5 61
Contribuições Extensão do metamodelo Java da versão 1.3 para a versão 1.5 Criação das especificações de correspondências e das regras de transformação entre o PIM (UML) e os PSM, WSOracle e JWSDP 62
Trabalhos Futuros Usar o Modelo PIM para outras plataformas como a da IBM e dotnet Acrescentar padrões de segurança no uso dos Web Services Pesquisar metodologias e algoritmos para geração semi-automática de definições de transformação a partir de especificações de correspondências Adicionar o controle de versões entre o desenvolvimento dos modelos e a criação das regras 63
Publicação Simone A. B. Melo, Denivaldo Lopes, Zair Abdelouahab: Developing Medical Information System with MDA and Web Services. Software Engineering Research and Practice 2006: 562-568 64
Agradecimentos Obrigada! Dúvidas? 65