I decided to try the HTTPSession feature as discussed in: https://issues.jboss.org/browse/WFLY-1891
I found that it causes HttpSessionBindingListener to be called multiple times, and I verified that there are multiple 'cacheEntryRemovedListeners' registered in CacheNotifierImpl in the infinispan project, one per servlet context / war file within the ear file.
Obviously the Serlvet spec says session sharing is not allowed, so there is no guidance to fall back on, but I was a bit surprised by this behaviour. Also it made me wonder if there any potential class loading / visibility issues here - ie what would happen if you added an implementation of the listener to the session that was only packaged with a particular war file - aren't the war files still in isolated class loaders?
I'm not quite sure how this could be possible, unless something is misconfigured. When using session sharing, only 1 session manager is used for all web applications within an EAR. The session manager registers itself as a @CacheEntryRemoved listener only once.
Can you post the contents and structure of your EAR?