Martin Krasser & Christian Ohr ICW AG Die Open ehealth Integration Platform (IPF)
Martin Krasser Position Software architect and engineer @ ICW Fokus Verteilte Systeme Anwendungsintegration, Systemintegration Sicherheit in verteilten Systemen Open Source Projekte Open ehealth Integration Platform (Founder) http://gforge.openehealth.org/gf/project/ipf Apache Camel (Committer) http://camel.apache.org...
Christian Ohr Position Software architect and engineer @ ICW Fokus Anwendungsentwicklung Anwendungsintegration Mitarbeit in ehealth-standardisierungsgremien Open Source Projekte Open ehealth Integration Platform (Committer) http://gforge.openehealth.org/gf/project/ipf HAPI (Contributor) http://hl7api.sourceforge.net
Agenda IPF Grundlagen Anwendungsfälle Healthcare Standards und IPF Beispiel & Demo: IHE Transaktion (ITI-8)
Integrationsoptionen Presentation Layer Service Layer Portals Mashups Messages, SOA/ROA (Business Logic) Other Applications Other Applications IPF Data Store Shared DB Replication Other Applications
Was ist IPF? Open Source Java/Groovy Integrations-Framework für den Healthcare Bereich Hilft dem Entwickler, Healthcare Standards (HL7, IHE, CDA...) zu implementieren Fokus auf erweiterbare Healthcare DSLs Basiert auf dem Apache Camel Integrations-Framework Deployment Optionen: embedded, standalone und distributed Integrations-Platform auf OSGi Basis Dynamisches Laden/Entladen von Integrationsanwendungen Development and monitoring tools (IPF Tools Projekt) IPF als Eclipse plugin Open Source seit Nov. 2008 http://gforge.openehealth.org/gf/project/ipf/ Letztes Release: IPF 2.0.0 Apache 2 Lizenz
Was ist IPF? Artikel Introduction to the Open ehealth Integration Platform, by Martin Krasser http://architects.dzone.com/articles/introduction-openehealth
Was ist Apache Camel? Open Source Java Integrations-Framework framework that focuses on making integration easier and more accessible to developers concrete implementations of all the widely used Enterprise Integration Patterns connectivity to a great variety of transports and APIs easy to use Domain Specific Language (DSL) to wire EIPs and transports together From: Apache Camel: Integration Nirvana, by Jonathan Anstey http://architects.dzone.com/articles/apache-camel-integration
Camel Architektur Components Domain-specific languages (DSL) Connectivity to external systems or resources. More than 70 components! Endpoints Extension points Send/receive messages to/from external systems Processors Transform, validate, filter, router etc. Routes Endpoints connected by processors using DSL
Bsp.: Programmieren mit Camel Überblick Enterprise Integration Patterns (EIPs) Domänenspezifische Sprache (DSL) Beispiel Filterung von XML Nachrichten über HTTP http://somewhere.com:8080/subscribers http://somewhere.com:8090/subscribers D D HTTP Endpoint (inbound) XPath Filter HTTP Endpoint (outbound) Camel DSL (Java) from("jetty:http://0.0.0.0:8090/subscribers") // inbound HTTP endpoint.filter().xpath("/person[@name='john']") // XPath filter.to("http://somewhere.com:8080/subscribers"); // outbound HTTP endpoint ICW Developer Conference
Anwendungsfall: Krankenhaus Unterschiedliche Szenarien Patientenverwaltung Leistungsanforderung Medizinische Dokumentation Medizinische Spezialanwendungen Heterogene Systemlandschaft Einsatz vieler unterschiedlicher vernetzter Anwendungen Ausgeprägte Historie Standardfall: ereignisgetriebene Kommunikation
ehealth Enterprise PatientenManagement Küche Labor-IS Klinisches Informationssystem Radiologie-IS PACS Archiv
Enterprise Departments
Community Integration
Cross-Community Integration
PatientenManagement Küche Labor-IS Klinisches Informationssystem Radiologie-IS PACS Archiv
Standards
PatientenManagement Klinisches Informationssystem Archiv Register Patient IHE PIX Profile HL7 v2.3 ADT^A01 MLLP (Socket) Register Document IHE XDS.b Profile? ebxml WebService (Soap 1.2) HTTP(S) Audit IHE ATNA Profile RFC 3881 Syslog UDP
Wie kann IPF dabei helfen? Unterstützung bei funktionaler Integration über Standards Datenaustausch (z.b. HL7, CDA) Transportprotokolle (z.b. MLLP, HTTP, WebServices) Kapselung kompletter Standard-Stacks IHE IT-Infrastructure (ITI) HITSP
IPF Camel Erweiterungen Integrationskomponenten IHE Profile: XDSa, XDSb, PIX (v2/v3), PDQ (v2/v3),... IHE Profil (Konzept) IHE Actor 2 IHE Actor 3 Actor Interface Actor Interface IHE Transaction 1 IHE Transaction 2 Application Layer Integration Layer Actor Interface IHE Actor 1 Application Component Integration Component Message Application Layer
IPF Camel Erweiterungen Content DSL HL7v2 DSL CDA/CCD DSL Routing (Camel) DSL Erweiterungen HL7/CDA Validierung... Schematron Validierung... Groovy closure support... DSL Erweiterungsmechanismus auf Groovy Basis Zur Definition neuer DSL Elemente (z.b. für projekt-spezifische DSLs)
Bsp.: Programmieren mit IPF Überblick Routing DSL Erweiterungen Content DSL (HL7v2) Beispiel Validierung und Filterung von HL7 Nachrichten über HTTP? D HTTP Endpoint (inbound) HL7 Validator D HL7 Filter HTTP Endpoint (outbound) from('jetty:http://0.0.0.0:8090/admissions').unmarshal().ghl7().validate().ghl7().filter {it.in.body.pid[8].value == 'F'}.to('http://localhost:8080/admissions') // // // // // IPF DSL (Groovy) inbound HTTP endpoint HL7 parser HL7 validator HL7 filter using HL7 DSL outbound HTTP endpoint
Bsp: IHE ITI-8 Patientenmanagement HL7 HL7 msg msg MLLP Integration layer ADT-A01: Patient admission ADT-A08: Patient update ACK, NAK? Patient Service Service layer Klinisches Informationssystem IHE ITI-8
Bsp: Integration layer HL7 HL7 msg msg MLLP IHE ITI-8 endpoint Bean binding endpoints A01 Transformer? A08 Transformer on error HL7 message validation Message queue Contentbased router Mail server user2@localhost HL7 to domain object transformer