You correctly state that ModeShape doesn't currently support journaled observation. However, it probably wouldn't be terribly complicated to implement something that uses Observation to log events to a database or other store. Using a JMS (durable) queue as you suggest would nicely decouple the receiving of the events (via your listener implementations) from the processing/storage of those events.
You would need to register listeners for each workspace. Also, long-running sessions are not a problem if you're just registering listeners; I'd recommend not using that session for anything else. Instead, if the listeners need to load nodes, they should use new sessions.
We would like to implement journaling, but it's lower priority on our roadmap at the moment.
Thank you for the feedback.
I implemented it this way it worked well.
As an additional feature, I needed to query my Journal againts a certain key, so I added a MessageDrivenBean that then persist the message informations in a relationnal database.
It probably could avoided by letting the messages on a queue and set a selector on my filter key, and then pass a different clientId to get the journal messages.