1. The major limitation of java.util.concurrent.Future class is lack of a good way to listen for future completion asynchronously. Even though Java futures are asynchronous in nature and meant to eliminate synchronous waits, the only way to get a future result is to synchronously wait for future completion. In many cases this defeats the purpose and Java futures cannot be used.

    To avoid this problem in GridGain we created our own future which allows for asynchronous listening for future completion. In addition to that we have also resolved the inconveniences of error handling and added 'duration()'method to tell users how long the future took to execute. Here is how you can add a listener to get notified, say for completion of putAsync(..) operation on distributed cache:

    ...
    GridCache<Integer, String> cache = grid.cache();

    // Asynchronously put a value into cache.
    GridFuture<String> fut = cache.putAsync(1, "1");

    // Pass in a closure which will be called whenever future completes.
    fut.listenAsync(new GridInClosureX<GridFuture<String>>() {
    public void applyx(GridFuture<String> fut) throws GridException {
    V previousValue = fut.get();

    long duration = fut.duration();

    System.out.println("Finished cache put operation [prev=" +
    previousValue + ", duration=" + duration + "ms]");
    }
    });
    ...

    GridFuture is used for all asynchronous operations in GridGain, including both, compute and data grid features. Hope you find it useful.

     

    10

    View comments

About me
About me
- Antoine de Saint-Exupery -
- Antoine de Saint-Exupery -
"A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away."
Blog Archive
Blogs I frequent
Loading
Dynamic Views theme. Powered by Blogger.