Hi,

While working on the new cluster events implementation of these  
methods of DsoCluster:

Set<DsoNode>         getNodesWithObject(Object object)
Map<?, Set<DsoNode>> getNodesWithObjects(Collection<?> objects)
<K> Set<K>           getKeysForOrphanedValues(Map<K, ?> map)

I'm obviously going through our whole channel, messages, stages SEDA  
infrastructure to communicate with the L2 and get the response back to  
the L1. I'm currently working on blocking these methods until the  
response from the server comes back.

This leads me to think that it might be maybe more useful to redesign  
the API to be asynchronous with callbacks instead of blocking the  
executing threads. It's always possible for users to adapt async to  
sync, but not the other way around. I can definitely imagine  
situations where it's more important to free the executing thread  
immediately than to have the convenience of having a blocking response  
as a method return.

The methods would then become:

void getNodesWithObject(Object object, NodesWithObjectsResult callback)
void getNodesWithObjects(Collection<?> objects, NodesWithObjectsResult  
callback)
void getKeysForOrphanedValues(Map<K, ?> map, OrphanedKeysResult  
callback)

With the callback interfaces something like:

public interface NodesWithObjectsResult {
   void gotResults(Map<?, Set<DsoNode>> results);
}

public interface OrphanedKeysResult<K> {
   void getResults(Set<K> results);
}

The methods could then be used like this:

cluster.getNodesWithObject(foo, new OrphanedKeysResult() {
     public void gotResults(Map<?, Set<DsoNode>> results) {
       // do stuff with results
     }
   });

Note that I just quickly typed these in the email, so there might be  
typos/errors in the code.

What do you think?

Geert

--
Geert Bevin
Terracotta - http://www.terracotta.org
Uwyn "Use what you need" - http://uwyn.com
RIFE Java application framework - http://rifers.org
Flytecase Band - http://flytecase.be
Music and words - http://gbevin.com

_______________________________________________
tc-dev mailing list
tc-dev@lists.terracotta.org
http://lists.terracotta.org/mailman/listinfo/tc-dev

Reply via email to