Messaging Core was designed to be an all-purpose distributed transactional messaging system. Some of the issues it addresses are:
1. Transactional support. The core makes possible for a client to send messages transactionally, it insures atomicity, isolation and recoverability.
2. Persistence. This is required by the transactional layer. You can think it as a layer that adds persistence in top of JGroups. However, we also have the concept of reliable/non-reliable messages, and we try to leverage as much as possible the reliable multicasting capabilities of JGroups. We don't want to persist non-reliable messages if this can be avoided.
3. Distributed support. The core peers can form "groups" among which we replicate messages or share load. The group support is built, obviously, in top of JGroups. Currently, I am only working with (and testing) LAN based groups, but JGroups has the potential to make the transition to WAN based groups relatively easy, and this is definitely something I think the ESB team would be interested in.