We want to have an application which is a centralized source of records, and other applications reference it/rely on it for data. All those other applications can make updates the the data held within this centralized source.

For example imagine these records are employees, and some properties may include job title, work number, pay rate, etc... All this employee data is stored in this centralized application.

Other systems may query this system for employee data, and in turn may send updates.

Some applications will want to know exactly when a particular record is updated by any other application, specifically on certain properties of the records. An example may be that App 1 wants to know exactly when the job title property of any employee record is updated. App 2 though might only want to be notified of the pay rate property being updated.

So we want to do these notifications by JMS and were wondering how exactly to implement JMS for it. JMS has two basic modes: point-to-point and publish-subscribe. If we want to use point-to-point which I think is the way to go, then how do we handle the fact that App 1 only wants messages when one property is updated while App 2 only wants messages when another property is updated? Then maybe there is App 3 which wants messages whenever either property changes! Does this mean we need to create a separate queue for each application custom tailored to what properties they care about, or is there a more generic solution?

The other mode publish-subscribe would have two main flaws with it, one being that the messages do not persist if the subscribed application is down. Though I suppose this may not actually be a problem with using durable subscriptions. However with this method doesn't it mean every subscriber will get every message posted? So if I send out a message that some property was updated then every application will receive that message whether they care about it or not, correct? We'd like to avoid that.

So is the only solution to have separate point-to-point queues for each app?

Or is there some nifty way to do it with a dynamic system where the applications can change what properties they care about on the fly and we wont have to create/modify message queues just maybe update a table driving the thing and everything is handled.