Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 251897

Summary: [remotesvcs] add asynchronous IRemoteServiceContainerAdapter.getRemoteServiceReferences()
Product: [RT] ECF Reporter: Scott Lewis <slewis>
Component: ecf.remoteservicesAssignee: ecf.core-inbox <ecf.core-inbox>
Status: RESOLVED DUPLICATE QA Contact:
Severity: enhancement    
Priority: P3 CC: mayworm, slewis
Version: 2.0.0Keywords: plan
Target Milestone: ---   
Hardware: All   
OS: All   
Whiteboard:

Description Scott Lewis CLA 2008-10-23 15:08:26 EDT
Currently, the remote services container adapter interface (IRemoteServiceContainerAdapter) has a potentially blocking method for getting remote references (getRemoteServiceReferences).

An asynchronous method (i.e. one that does not potentially block) for getting remote service references should be added to the API, so that clients can choose to use blocking and/or non-blocking calls to get remote service references.
Comment 1 Scott Lewis CLA 2008-10-23 15:19:17 EDT
Here is a possible API using IAsyncResult (future):

org.eclipse.ecf.core.util.IAsyncResult;

public IAsyncResult asyncGetRemoteServiceReferences(ID[] idFilter, String clazz, String filter) throws InvalidSyntaxException;

Here are some possible javadocs for this method:

	/**
	 * Asynchronously returns an array of <code>IRemoteServiceReference</code> objects. The
	 * returned array of <code>IRemoteServiceReference</code> objects contains
	 * services that were registered under the specified class and match the
	 * specified idFilter, and filter criteria.
	 * <p>
	 * The IAsyncResult is returned immediately, and subsequent calls to {@link IAsyncResult#get()}
	 * or {@link IAsyncResult#get(long)} will return the actual results received.  The type of
	 * the Object returned from {@link IAsyncResult#get()} will be IRemoteServiceReference [].
	 * 
	 * <p>
	 * The list is valid at the time of the call to this method, however since
	 * the Framework is a very dynamic environment, services can be modified or
	 * unregistered at anytime.
	 * 
	 * <p>
	 * <code>idFilter</code> is used to select a registered services that were
	 * registered by a given set of containers with id in idFilter. Only
	 * services exposed by a container with id in idFilter will be returned.
	 * 
	 * <p>
	 * If <code>idFilter</code> is <code>null</code>, all containers are
	 * considered to match the filter.
	 * 
	 * <p>
	 * <code>filter</code> is used to select the registered service whose
	 * properties objects contain keys and values which satisfy the filter. See
	 * {@link Filter} for a description of the filter string syntax.
	 * 
	 * <p>
	 * If <code>filter</code> is <code>null</code>, all registered services
	 * are considered to match the filter. If <code>filter</code> cannot be
	 * parsed, an {@link InvalidSyntaxException} will be thrown with a human
	 * readable message where the filter became unparsable.
	 * 
	 * @param idFilter
	 *            an array of ID instances that will restrict the search for
	 *            matching container ids If null, all remote containers will be
	 *            considered in search for matching IRemoteServiceReference
	 *            instances. May be <code>null</code>.
	 * 
	 * @param clazz
	 *            the fully qualified name of the interface class that describes
	 *            the desired service. Must not be <code>null</code>.
	 * @param filter
	 *            The filter criteria. May be <code>null</code>.
	 * @return IAsyncResult that through subsequent calls to IAsyncResult#get() will return
	 *         IRemoteServiceReference [] with IRemoteServiceReferences matching given search criteria. 
	 *         Will not return <code>null</code>.
	 * 
	 * @throws InvalidSyntaxException If filter contains an invalid filter string that cannot be parsed.
	 */


comments/thoughts?

Comment 2 Scott Lewis CLA 2008-12-09 10:25:14 EST
marking as duplicate

*** This bug has been marked as a duplicate of bug 250716 ***