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.
Before you start working with IPF make sure that you've read the IPF development pages. These will explain how to
- Setup the development environment.
- Checkout and compile the sources (optional).
- Import the IPF sources into Eclipse (optional).
- Create new projects using archetypes (see also IPF Tutorials).
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.
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.
|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.|
The code repository of the IPF main project is located at
The code repositories of the IPF subprojects are located at
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.
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.
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.
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.
|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.
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.
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.
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.
|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)|
|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|