HL7 Comm and Other Updates

Well, the new version of HL7 Comm is out. It’s pretty cool, I must admit. Does fun stuff like runtime reflection and class based polymorphism to dynamically load specific client types on demand. It also dynamically loads business and acknowledgment logic as well, which means that creating custom logic, custom clients or doing pretty much anything with the software is possible. It’s the world’s easiest to use mini-integration engine. I can’t wait until I have the full version available to use. Go get the beta (link’s on the right) right now!

I have some other news that I’m dying to share, but unfortunately there’s not room in this margin. Hopefully by Thursday I’ll be able to spill the beans.

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.

Tale of Two Kitties

A few weeks ago we were taking our oldest cat Nomad into the vet for a routine checkup but when we arrived he wasn’t acting his normal self. He had started to hyperventilate, his gums were pale and his pupils dilated. He gets stressed out going to the vets but this was abnormal even for him. The vet put him on oxygen and gave him some lasics (can’t figure out what the spelling is, but they help remove fluid from the lungs) and let him chill for a few hours.

We took him home hoping that getting him back to his own environment would calm him down. Unfortunately, after two days his breathing was still abnormal, and any stress would make him hyperventilate. We decided to take him to the vet’s again, although this time to a different one, as we thought the other vet shouldn’t have let him go home with us two days before.

The new vet immediately saw him in his distress and performed a series of xrays. They revealed a heart about 50% larger than is normal. The vet wrote a referral to a specialist clinic and Nomad and I immediately drove off to this new hospital.

There the vet immediately put him on oxygen and ordered and ultrasound and echo. She put him on lasics and enalapril and decided to keep him for a few days for observation. The diagnosis was some sort of unspecified cardiomyopathy, heart failure, basically. Thankfully, when I went back to pick him up he was breathing regularly, and with a regular regimen of pills we hoped he could remain relatively healthy, perhaps even for years.

We went out of town (to Austin for a conference) for a few days and during this time had Nomad borded at a medical clinic where we were sure he’d get the proper care. Unfortunately as soon as I picked him up and brought him home he started hyperventilating again. This time was worse than before, you could hear fluid in his lungs and he would lay down to cough. It was horrible watching him.

We ran him back to the vet (the second vet, the specialist wasn’t available). By the time we got there he was coughing up fluids and really struggling for breath. His gums were pure white, he was definitely oxygen deprived. After consulting with the vet we decided that stabilizing him again wasn’t likely to be in his best interest. It takes several days and he’s likely in considerable pain during the process. Plus if it only lasts for a few days, it’s just not practical to spend over $2000 just to get a few relatively peaceful days for the cat. We decided to euthanize him so that he wouldn’t be in any more discomfort.

Watching him and petting him while he was injected and died was pretty sad, but it was better than watching him struggle for breath and coughing up fluids. This is my favorite picture of Nomad and how I’ll always remember him.

Nomad’s little brother (not literally, they’re not brothers and he’s quite a bit bigger) Leo was clearly distressed without his playmate. So we decided to rescue a new cat for him to play with. So yesterday we adopted Luna from the APL. It’s funny, she’s fully grown but looks like a miniature version of Leo (7 pounds versus 16) – they have nearly identical coloration and markings. They’re still hissing at each other on occasion, but it seems like they’ll get along with a bit of tme.

I’ll post some pictures of Luna when I get some good ones.

Update: I don’t think I ever mentioned, we had adopted a dog named Max back around December. Unfortunately we did end up having to give Max back to the adoption agency. Our great dog experiment ended rather in failure.

nule.org Downtime

As some kind folks pointed on on the nule.org bbs (thanks, Chris) this website was down for a bit. The domain got renewed, but I didn’t communicate properly with the administrators that I wanted it renewed so the DNS servers for the domain got reset. Weird but true. Time to take out that 10 year lease on the name, I think.

In other news, I’m just coming back from a 5 day trip to Austin, TX. Still getting caught up on everything. If you’re expecting emails, phonecalls, bbs posts or anything else from me, give me a few days.