[this message was reposted]
I have sliced and diced the Cache interface slightly: as a previous poster suggested, I re-examined the need for 4 types of the same method (e.g. put()). Also, the parm list was too long for my taste.
I reduced each of the put(), putAll(), clear() and remove() methods to 2 instances: a default instance (e.g. put(Object, Object)) and an instance taking Options as 3rd parameter. That way, we can override the defaults for the current cache too, but don't have to use those long arg lists.
So, to override putting a transient entry into a (otherwise) replicated cache, instead of
cache.put("key", "value", true) // "true" for transient
you can say
cache.put("key", "value", Options.TRANSIENT);
I hope this reduces some of the clutter.
I should have a version that replicates updates asynchronously and synchronously by the end of next weekend, locking will take another one or two weeks.