The idea to do replication layer on top makes good sense. My only issue with it is catching up a host that is not in sync with other other hosts.
As for the tomcat session replication, I believe the entire context is replicated, if xindice was stored in memory in the context I believe it would be replicated. As to concurrent modification. I plan on writing on a single node. I do not need transactional replication. I just need a reasonably in sync copy to be on all the nodes. Lets say I want optimistic replication and locking. The application is not write intensive. So right now jgroups + xindici in memory looks good. Thanks.