Integrate

Recently I started to resurrect some old code that’s been laying around, begging for a project to be a part of forever. Basically, the client code that’s part of the HL7 Comm application has always been designed to be part of something larger. That something larger is the Integrate engine.

Basically, I’ve isolated the core functionality of all the clients used in HL7 Comm (and believe it or not there are quite a few) into interfaces for inbound and outbound clients as well as an abstract class for all integrate clients to extend. These clients all connect to what’s called a Processor Agent, which not only ensures the proper flow of data between components but can perform business logic on the data – transformations, filtering, database access, or anything else Java can do.

This processor agent is the core of the new HL7 Comm. Enabling users of the application to not only apply whatever business logic they like to the messages handled by the application, but you can also specify one or more inbound clients and zero or more outbound clients. HL7 Comm finally fulfills its promise to be a powerful, stand-alone mini-integration engine.

So what’s Integrate then? Integrate harnesses the power of all these clients as well as the concept of the processor agent (similar but not identical to that in HL7 Comm) to move data about. The difference is that a single Integrate instance can host multiple processor agents (PAs), and contains an embedded JMS engine (courtesy OpenJMS ) to move information between PAs. These intelligently load from configuration files that are built using a GUI editor, making configuration easy, and this same editor forms the basis of a control and monitoring package.

When can you see it? Well, the newest version of HL7 Comm will be out soon – definitely within the month. (It’s a huge rewrite – I hope I can get a number of testers using it.) It’ll give you some idea of how the pluggable client architecture of Integrate works. Beyond that, all I can say about when Integrate is out will be “when it’s ready”, which in this case is when the first cut of the engine actually works. Thanks to the large number of users of HL7 Comm, we can be reasonably sure that things will work properly from a client perspective. That gives me great confidence that the version 0.1 release will be a powerful tool on its own merit. However, the graphical configuration and monitoring will likely take a few releases to take shape.

Keep an eye on the Integrate project here and look at the BBS as well for updates.

Update: Here’s a list of currently supported clients in HL7 Comm.

  • FileIn – Reads a specified file in.
  • FileInByDir – Monitors a directory and reads all files in.
  • Hl7FileIn – Filters specified file for HL7 data.
  • Hl7FileInByDir – Monitors a directory and filters.
  • MllpThreadServer – Listens on port for generic MLLP connection.
  • Hl7ThreadServer – Listens on port for HL7 data
  • FileOut – Outputs to a specific file.
  • FileOutByDir – Outputs to a directory at intervals.
  • FileOutByTime – Outputs to files with timestamps.
  • MllpClient – Outputs an MLLP TCP/IP stream.
  • Hl7Client – Same but handles HL7 acks.
  • StandardOut – Outputs to standard out.