Skip to end of metadata
Go to start of metadata

Introduction

Getting started

Prerequisites

The Open eHealth Integration Platform (IPF) is based on Apache Camel. It is therefore important that you have a good understanding how Camel works before continuing with the IPF documentation. For a general Camel overview go the project's main page. Camel tutorials can be found on a separate tutorials page. A recommended starting point is the tutorial introducing Camel steadily in a real life integration.

Application development on the Open eHealth Integration Platform (IPF) follows Enterprise Integration Patterns. Integration platforms or service buses won't help you unless you have a good understanding of the principles and concepts of messaging solutions. This book gives you excellent hints how to design messaging-based integration solutions.

Initial reading

After you've learned some basics about Apache Camel the best way to start with IPF is to read through the IPF overview section. It will give you a high-level view of the features provided by IPF including some links to more detailed documentation. The IPF architecture section starts with diagrams of the physical components that make up IPF. A short description of the component namspaces and the individual components is given as well.

Infrastructure setup

Before you start working with IPF make sure that you've read the IPF development pages. These will explain how to

First project

The first steps tutorial is a good starting point for creating your first IPF project. It demonstrates how to use IPF project archetypes for creating a project and walks through the key project artifacts. A simple message processing example will introduce some core features of IPF. You can find further tutorials on the IPF tutorials page.

IPF overview

The Open eHealth Integration Platform (IPF) provides interfaces for health-care related integration solutions.
An prominent example of an healthcare-related use case of IPF is the implementation of interfaces for transactions specified in IHE profiles. IPF can be easily embedded into any Java application and additionally supports deployments inside OSGi environments.
Failure recovery and high-availability features support application developers implementing non-functional requirements.

IPF is built upon and extends the Apache Camel routing and mediation engine. It has an application programming layer based on the Groovy programming language and comes with comprehensive support for message processing and connecting systems in the eHealth domain. IPF provides domain-specific languages (DSLs) for implementing Enterprise Integration Patterns in general-purpose as well as healthcare-specific integration solutions.

The following table summarizes the IPF features.

Feature Description
Support for eHealth integration profiles A set of components for creating actor interfaces as specified in IHE and Continua integration profiles. IPF currently supports creation of actor interfaces for the IHE profiles XDS.a, XDS.b, PIX, PDQ, PIXv3, PDQv3, QED, XCPD, XCA, XCA-I, XCF, XPID, PCD, as well as for Continua profiles HRN and WAN.
HL7 message processing Basis for HL7 message processing is the HL7 DSL, the HAPI extensions and the HL7 validation DSL. These provides the basis for implementing HL7 message processing routes.
CDA support A domain-specific language for building and navigating CDA documents. This DSL supports the creation of structurally correct CDA documents by enforcing CDA-relevant schema definitions but without dealing with low-level XML details.
Apache Camel IPF is based on Apache Camel. For an overview of Camel's rich feature set (which can be fully used in IPF applications) refer to the project's integration patterns and integration components pages.
Groovy scripting layer With IPF you define integration routes with the Groovy programming language. It is more than a mere usage of Camel's domain-specific language (internal DSL or fluent API) inside Groovy: Camel's native DSL has been extended to support e.g. the usage of closures (for inline definitions of message processors, routing rules etc.) and also provides a DSL extension mechanism to define custom extensions to the Camel DSL.
DSL extension mechanism The DSL extension mechanism is a Groovy meta-programming-based mechanism for defining new DSL elements to be used in integration routes. This is especially useful if you want to provide custom language elements for re-occurring message processing patterns or if you want to design a project-specific message processing DSL (e.g. one that is related to the HL7 domain).
DSL extension index An index of all predefined DSL extensions provided by IPF.
Core features These are domain-neutral message processors and DSL extensions usable for general-purpose message processing. For XML message processing there is special Groovy XML support.
Flow management A platform service to monitor, query, audit, replay and cleanup message flows. The management interfaces are based on JMX.
OSGi support Enables the deployment of IPF components (bundles) to OSGi platforms. IPF service bundles register platform services at the OSGi service registry for consumption by IPF applications. Extender bundles control the activation of DSL extensions inside an OSGi environment.
Performance measurement DSL and tools to determine the performance characteristics of IPF applications. These allow for measuring the processing time of messages for routes or route parts as well as the message throughput. Performance measurement results can be viewed with a web browser.
Quality of service IPF provides extensions, guidance and solution blueprints (code examples) for implementing non-functional requirements. Covered topics are transactional messaging, flow management, load-balaning and high-availability.
Module adapters An infrastructure for including platform-independent message processing libraries into platform-specific message processing routes. An alternative is Camel's bean integration mechanism.
Tutorials A bunch of tutorials that help you get started with IPF.
Guidelines Guidelines for IPF application development. For example, the DSL extensions guide describes how to write you own DSL extensions.
Project templates Maven archetypes for most commonly used IPF project types, ranging from simple embedded integration solutions to cluster configurations supporting high-availability scenarios. Usage examples of IPF features are provided as well.

IPF code repositories

The code repository of the IPF main project is located at

The code repositories of the IPF subprojects are located at

IPF subprojects

Since version 2.0 of IPF several existing components as well as newly developed components have been moved to IPF subprojects. There are currently two IPF subprojects which are described in the following subsections.

IPF Tools

This project provides Eclipse-based development, administration and monitoring tools for the Open eHealth Integration Platform.

  • The development tools support developers in creating, testing and packaging IPF applications within the Eclipse plugin development environment (PDE). IPF applications created with these tools can be deployed and operated on OSGi R4.1 platforms. Part of the development tools is the IPF Runtime - the OSGi edition of IPF.
  • The administration and monitoring tools are Eclipse plugins for managing IPF platform and application resources. Examples are JMX-based system management clients or the IPF platform manager.

Links:

IPF Runtime

Deprecation
Beginning with IPF 2.5 we will discontinue distributing the IPF runtime. Instead, IPF provides OSGi features to be used in Apache Karaf.
  • The IPF Runtime project provides an OSGi-based runtime environment for IPF applications. The IPF Runtime is an IPF distribution that is running on the Equinox OSGi platform. Find out more in the IPF Runtime Wiki.

Links:

IPF Lab

This project is the incubation area for the projects Open eHealth Integration Platform and Open eHealth Integration Platform Tools. Contributions of new features from the IPF community will be mainly done in this project. New features may come from existing IPF applications or are developed from scratch directly in the IPF Lab. This project also hosts components from current research activities such as integrating IPF into cloud-computing environments or into different web application frameworks.

Links:

IPF architecture

IPF architecture in OSGi environments described elsewhere
IPF's architecture in OSGi environments is described in the architecture section of the OSGi support page. It complements the information presented here.

Architecture overview

The following figure gives an overview of the IPF modules, their dependencies and their names (abbreviated package names). The modules of the ihe subpackages are shown in the next section. The last subsection describes the modules in more detail. The module names match the jar file names in the Maven repository. The IPF architecture is also closely related to the project structure in the code repository.

Architecture overview eHealth modules

The next figure shows the IPF eHealth modules. The Camel-independent modules are contained in the ipf.commons.ihe package, Camel-specific eHealth integration modules are contained in the ipf.platform-camel.ihe package. These modules can be used to implement actor interfaces of standard IHE and Continua transactions, as well for implementation of project-specific ones. For list of currently supported IHE transactions visit the eHealth support pages.

IPF and OSGi

All IPF modules have been designed to run on an OSGi R4 version 4.1 platform. The osgi package additionally containes specialized OSGi bundles such as extender bundles and configuration fragments (not shown). For a detailed description about IPF and OSGi refer to the OSGi support section.

IPF Modules

Module Name Prefix Description
ipf-commons IPF base modules that are Apache Camel-independent
ipf-modules Apache Camel-independent functionality to handle eHealth specific data formats, like HL7 or CDA libraries
ipf-osgi IPF OSGi infrastructure and configuration bundles
ipf-platform-camel Extensions to the Apache Camel routing and mediation engine. These extensions together with Apache Camel are referred to as the Open eHealth Integration Platform (IPF) from a technical viewpoint
ipf-tutorials Tutorials demonstrating the features of the Open eHealth IPF (not shown in any of the figures)
ipf-archetypes IPF Maven project archetypes (not shown in any of the figures)
Module Description
ipf-commons-core Defines the common message processing API to be implemented by components contained in the ipf-modules. ipf-platform-camel provides special integration points for components implementing this common API. The API was defined for implementing message processing components independent of a certain integration infrastructure like Apache Camel. This increases their re-usability and allows applications to implement light-weight message processing functionality without implementing an integration platform or enterprise service bus
ipf-commons-flow Contains a flow management service used to monitor, query, audit and replay message flows. The management interfaces are based on JMX (no Camel dependencies)
ipf-commons-ihe-core Generic support classes for the implementation of eHealth integration profiles
ipf-commons-ihe-ws Data format-agnostic support for Web Service-based transactions
ipf-commons-ihe-hl7v2 Transport-agnostic support for HL7v2-based transactions (custom message structures, validation utilities, etc.)
ipf-commons-ihe-hl7v2ws Support for transactions which send HL7v2 payload over Web Services, e.g. IHE PCD and Continua WAN
ipf-commons-ihe-hl7v3 Support for transactions which send HL7v3 payload over Web Services, e.g. IHE PIXv3, PDQv3, QED, XCPD
ipf-commons-ihe-xds Utilities and the actor interfaces for the IHE XDS.a, XDS.b and XCA transactions
ipf-commons-map bi-directional mapping functionality for Strings and HL7v2 message elements
ipf-commons-lbs Utilities for large binaries and javax.activation.DataSource implementations to represent stored binaries
ipf-commons-event Camel-independent part of the Event infrastructure
ipf-commons-test Camel-independent support for HTTP-based integration and performance tests
ipf-commons-xml An XML library with focus on validation (XML Schema, Schematron)and transformation (XSLT, XQuery)
ipf-modules-cda-core Set of HL7 CDA schemas and schematron validation rules. Some of the supported profiles are: CDA, CCD, Lab TF3, PHMR, HITSP C32, HITSP C37.
ipf-modules-cda-oht Utilities for creating, parsing, navigating and rendering CDA documents based on the OHT CDA Tools version 1.1.0. Also includes support for several CDA profiles.
ipf-modules-cda-mdht Utilities for parsing, validating and rendering CDA documents based on the newer OHT's Model-Driven Health Tools (MDHT).
ipf-modules-hl7 Extensions to the HAPIlibrary (HL7v2 processing)
ipf-modules-hl7dsl Domain-specific language for handling HL7v2 messages, based on the HAPI library
ipf-osgi-commons See IPF bundle overview
ipf-osgi-extender-basic See IPF bundle overview
ipf-osgi-extender-spring See IPF bundle overview
ipf-osgi-config-log See IPF bundle overview
ipf-osgi-config-jms See IPF bundle overview
ipf-osgi-config-flow-repository See IPF bundle overview
ipf-osgi-config-flow-manager See IPF bundle overview
ipf-platform-camel-core Required by most other ipf-platform-camel component. Contains:
ipf-platform-camel-flow Camel DSL extensions for Flow management for integrating ipf-commons-flow into Camel routes. The DSL extensions are built with the DSL extension mechanism
ipf-platform-camel-event Camel DSL extensions of the event infrastructure
ipf-platform-camel-hl7 HL7 message processing DSL for integrating ipf-modules-hl7 and ipf-modules-hl7dsl into Camel routes.
ipf-platform-camel-lbs-core The Camel DSL extensions of the large binary support mechanism as well as the interface to adapt various endpoint technologies to the LBS
ipf-platform-camel-lbs-cxf Adaptor implementations for using CXF endpoints with the large binary support
ipf-platform-camel-lbs-http Adaptor implementations for using HTTP/Jetty endpoints with the large binary support
ipf-platform-camel-lbs-mina Adaptor implementations for using MINA/HL7 endpoints with the large binary support
ipf-platform-camel-ihe-atna Special ATNA audit senders
ipf-platform-camel-ihe-continua Support for Continua HRN and other transactions which use special payload types inside of ebXML-based Web Service messages
ipf-platform-camel-ihe-mllp Utilities and the actor interfaces for MLLP-protocol based transactionsIHE Support aggregator page
ipf-platform-camel-ihe-hl7v2 Transport-agnostic support for HL7v2-based transactions
ipf-platform-camel-ihe-hl7v2ws Support for transactionswhich send HL7v2 payload over Web Services, e.g. IHE PCD and Continua WAN  
ipf-platform-camel-ihe-hl7v3 Support for transactions which send HL7v3 payload over Web Services, e.g. IHE PIXv3, PDQv3, QED and XCPD
ipf-platform-camel-ihe-xds Support for transactions which send ebXML payload over Web Services, e.g. IHE XDS and XCA
ipf-platform-camel-test Utilities for measuring performance characteristics of IPF applications. It provides DSL extensions used to measure processing time of messages (for route parts and whole routes) and the message throughput. Performance measurement reports can be created as well
ipf-tutorials-basic A Hello World-level tutorial for getting started with ipf-platform-camel
ipf-tutorials-flow A tutorial demonstrating IPF flow management features
ipf-tutorials-hl7 A tutorial demonstrating HL7 message processing features
ipf-tutorials-lbs A tutorial demonstrating the use of the LBS with CXF and HTTP endpoints
ipf-tutorials-osgi-* A tutorial demonstrating how to write IPF OSGi applications
ipf-tutorials-ref A complete reference application that may be used as blueprint for production-ready IPF applications. The reference application is a comprehensive demonstration of IPF features
ipf-tutorials-xds A tutorial that demonstrates how to use IPF XDS components
ipf-archetype-* Archetypes for creating IPF integration projects with a ready-to-use Maven 2 and Eclipse configuration plus an example route and unit tests
Labels:
None
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.