The Great JCache Pull request :)

This is a potential problem cause. You are doing remote operations while holding a lock and if a second thread wants to do the same thing, it will block without controlling how long. It probably is better to work with a future; the first threads put a future in a map and the second thread gets the future. 

We use the same technique in the HazelcastInstanceFactory