On 16 May 2009, at 00:47, Adrian Cole wrote:
Well, this could be useful in many contexts, even outside of
infinispan.
One thing to consider is the three ways things finish in Futures:
completion, cancellation, and exception. I suspect the listener
interface may want to handle all three, or some object that
encapsulates those states.
Well, the listener just notifies that a future is done, passing back a
reference to the same future. Any sane implementation of the listener
would then call future.get() to test for exceptions, or test
future.isCancelled() if it cares.
I kindof like this flow in that case:
Future f = cache.putAsync(k, v).andInform(listener);
+1 to a builder-like API.
where NotifyingFuture has a method:
NotifyingFuture andInform(NotifyingFutureListener listener)
interesting stuff...
what do you think?
-Adrian
jclouds
On Sat, May 16, 2009 at 1:27 AM, Manik Surtani <manik(a)jboss.org>
wrote:
While the new async API has been getting rave reviews, someone did
bring up async notifications. E.g.,
Future f = cache.putAsync(k, v);
f.get();
But what if I don't want to wait on f.get(), I'd rather be told when
the future is done so I can do an f.get()?
Sounds pretty useful to me. But just wanted to sound you guys on
the API choices for notifications.
My immediate thought was to use the existing notification API. You
register a cache listener, annotate a method with @RpcCallMade,
receive an RpcCallMadeEvent. But this is probably pretty useless,
since you couldn't associate the notification with the specific put
you've just done. Even if you have the key in the event (which is
unlikely - since we need to use the same event for all cache
operations, some which take > 1 key such as putAll()), multiple
threads could be working on the same key.
Another approach is to design a sub-interface to Future.
NotifyingFuture.
public interface NotifyingFuture extends Future {
void addListener(NotifyingFutureListener l);
}
public interface NotifyingFutureListener {
void futureDone(Future f);
}
WDYT?
--
Manik Surtani
manik(a)jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org
_______________________________________________
infinispan-dev mailing list
infinispan-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev
--
Manik Surtani
manik(a)jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org