Package org.eclipse.ecf.remoteservice

# Class AbstractRemoteService

java.lang.Object
org.eclipse.ecf.remoteservice.asyncproxy.AbstractAsyncProxyRemoteService
org.eclipse.ecf.remoteservice.AbstractRemoteService

All Implemented Interfaces:
  `InvocationHandler`, `IRemoteService`

Direct Known Subclasses:
  `AbstractClientService`, `RemoteServiceImpl`

public abstract class AbstractRemoteService extends AbstractAsyncProxyRemoteService implements IRemoteService, InvocationHandler
Abstract remote service implementation. Clients may subclass to avoid re-implementing methods from IRemoteService.

Since:
  4.1

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`class`
`AbstractRemoteService.AsyncArgs`
`class`
`AbstractRemoteService.ProxyClassLoader`

## Field Summary

Fields
Modifier and Type
Field
Description
`protected static final Object[]`
`EMPTY_ARGS`
`protected ExecutorService`
`futureExecutorService`
`protected int`
`futureExecutorServiceMaxThreads`
`protected org.eclipse.equinox.concurrent.future.IExecutor`
`iFutureExecutor`

## Constructor Summary

Constructors
Constructor
Description
`AbstractRemoteService()`

## Method Summary

Modifier and Type
Method
Description
`protected List`
`addAsyncProxyClasses(ClassLoader cl, Class[] interfaces)`
`protected void`
`addRemoteServiceProxyToProxy(List classes)`
`protected org.eclipse.equinox.concurrent.future.IFuture`
`callAsync(AbstractAsyncProxyRemoteCall call)`
`org.eclipse.equinox.concurrent.future.IFuture`
`callAsync(IRemoteCall call)`
Call remote method specified by call parameter asynchronously, and immediately return `IFuture` instance.
`Future<Object>`
`callAsync(IRemoteCall call, Callable<Object> callable)`
`protected Object`
`callAsyncWithResult(IRemoteCall call, IRemoteCallListener listener)`
`protected Future<Object>`
`callAsyncWithTimeout(IRemoteCall call, Callable<Object> callable)`
`protected void`
`callAsyncWithTimeout(IRemoteCall call, Callable<IRemoteCallCompleteEvent> callable, IRemoteCallListener callback)`
`protected void`
`callCompletableAsync(AbstractAsyncProxyRemoteCall call, IAsyncProxyCompletable completable)`
`protected Future`
`callFutureAsync(AbstractAsyncProxyRemoteCall call)`
`protected Future`
`callFutureAsync(IRemoteCall call)`
`Object`
`callSync(IRemoteCall call, Callable<Object> callable)`
`protected String`
`convertInterfaceNameToAsyncInterfaceName(String interfaceName)`
`protected Object`
`createProxy(Class[] classes)`
`protected Object`
`createProxy(ClassLoader cl, Class[] classes)`
`protected IRemoteCallCompleteEvent`
`createRCCE(Object result, Throwable e)`
`protected IRemoteCallCompleteEvent`
`createRCCEFailure(Throwable e)`
`protected IRemoteCallCompleteEvent`
`createRCCESuccess(Object result)`
`protected IRemoteCall`
`createRemoteCall(String callMethod, Object[] callParameters, long callTimeout)`
`void`
`dispose()`
`protected Class`
`findAsyncRemoteServiceProxyClass(Class c)`
`protected Class`
`findAsyncRemoteServiceProxyClass(ClassLoader cl, Class c)`
`protected AbstractRemoteService.AsyncArgs`
`getAsyncArgs(Method method, Object[] args)`
`protected String`
`getAsyncInvokeMethodName(Method method)`
`protected RemoteCall`
`getAsyncRemoteCall(String invokeMethodName, Object[] asyncArgs)`
`protected String`
`getCallMethodNameForProxyInvoke(Method method, Object[] args)`
`protected Object[]`
`getCallParametersForProxyInvoke(String callMethod, Method proxyMethod, Object[] args)`
`protected long`
`getCallTimeoutForProxyInvoke(String callMethod, Method proxyMethod, Object[] args)`
`protected long`
`getDefaultTimeout()`
`protected ExecutorService`
`getFutureExecutorService(IRemoteCall call)`
`protected org.eclipse.equinox.concurrent.future.IExecutor`
`getIFutureExecutor(IRemoteCall call)`
`protected abstract String[]`
`getInterfaceClassNames()`
`Object`
`getProxy()`
Get local proxy for remote interface.
`Object`
`getProxy(ClassLoader cl, Class[] interfaces)`
Get local proxy for remote interface.
`protected IRemoteService`
`getRemoteService()`
`protected abstract IRemoteServiceID`
`getRemoteServiceID()`
`protected IRemoteServiceProxyCreator`
`getRemoteServiceProxyCreator()`
`protected abstract IRemoteServiceReference`
`getRemoteServiceReference()`
`protected void`
`handleInvokeSyncException(String methodName, ECFException e)`
`protected void`
`handleProxyException(String message, Throwable t)`
`Object`
`invoke(Object proxy, Method method, Object[] args)`
`protected Object`
`invokeAsync(Method method, Object[] args)`
`protected Object`
`invokeObject(Object proxy, Method method, Object[] args)`
`protected Object`
`invokeReturnAsync(Object proxy, Method method, Object[] args)`
`protected Object`
`invokeSync(IRemoteCall call)`
`protected boolean`
`isAsync(Object proxy, Method method, Object[] args)`
`protected boolean`
`isInterfaceAsync(Class interfaceClass)`
`protected boolean`
`isMethodAsync(String methodName)`
`protected boolean`
`isOSGIAsync()`
`protected Class`
`loadInterfaceClass(ClassLoader cl, String className)`
`protected Class`
`loadInterfaceClass(String className)`
`protected void`
`logWarning(String string, Throwable e)`
`protected void`
`setFutureExecutorService(ExecutorService executorService)`
`protected void`
`setIFutureExecutor(org.eclipse.equinox.concurrent.future.IExecutor executor)`

### Methods inherited from class org.eclipse.ecf.remoteservice.asyncproxy.AbstractAsyncProxyRemoteService

`callFuture, isReturnAsync`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.eclipse.ecf.remoteservice.IRemoteService

`callAsync, callSync, fireAsync`

## Field Details

### EMPTY_ARGS

protected static final Object[] EMPTY_ARGS

### futureExecutorServiceMaxThreads

protected int futureExecutorServiceMaxThreads

Since:
  8.2

### futureExecutorService

protected ExecutorService futureExecutorService

Since:
  8.2

### iFutureExecutor

protected org.eclipse.equinox.concurrent.future.IExecutor iFutureExecutor

Since:
  8.2

## Constructor Details

### AbstractRemoteService

public AbstractRemoteService()

## Method Details

### getFutureExecutorService

protected ExecutorService getFutureExecutorService(IRemoteCall call)

Parameters:
  `call` - the remote call to get the ExecutorService for
Returns:
  ExecutorService
Since:
  8.2

### setFutureExecutorService

protected void setFutureExecutorService(ExecutorService executorService)

Parameters:
  `executorService` - the ExecutorService to use for this remote service
Since:
  8.2

### getIFutureExecutor

protected org.eclipse.equinox.concurrent.future.IExecutor getIFutureExecutor(IRemoteCall call)

Parameters:
  `call` - the IRemoteCall to get the IExecutor for
Returns:
  IExecutor the executor to use for the given call instance.
Since:
  8.2

### setIFutureExecutor

protected void setIFutureExecutor(org.eclipse.equinox.concurrent.future.IExecutor executor)

Parameters:
  `executor` - executor
Since:
  8.2

### getInterfaceClassNames

protected abstract String[] getInterfaceClassNames()

### getRemoteServiceID

protected abstract IRemoteServiceID getRemoteServiceID()

### getRemoteServiceReference

protected abstract IRemoteServiceReference getRemoteServiceReference()

### loadInterfaceClass

protected Class loadInterfaceClass(String className) throws ClassNotFoundException

Throws:
  `ClassNotFoundException`

### loadInterfaceClass

protected Class loadInterfaceClass(ClassLoader cl, String className) throws ClassNotFoundException

Parameters:
  `cl` - the ClassLoader to load the interface class. Will not be `null`
  `className` - the interface class to load
Returns:
  Class the class loaded. Must not be `null`
Throws:
  `ClassNotFoundException` - if class cannot be found
Since:
  6.0

### getRemoteService

protected IRemoteService getRemoteService()

### getDefaultTimeout

protected long getDefaultTimeout()

### callAsync

protected org.eclipse.equinox.concurrent.future.IFuture callAsync(AbstractAsyncProxyRemoteCall call)

Specified by:
  `callAsync` in class `AbstractAsyncProxyRemoteService`

### callAsync

public org.eclipse.equinox.concurrent.future.IFuture callAsync(IRemoteCall call)
Description copied from interface: `IRemoteService`
Call remote method specified by call parameter asynchronously, and immediately return `IFuture` instance. Returned IFuture will not be `null`, and allows the caller to retrieve the actual resulting value from the remote call (or exception).

Specified by:
  `callAsync` in interface `IRemoteService`
Parameters:
  `call` - the remote call to make. Must not be `null` .
Returns:
  IFuture the asynchronous result to allow the caller to poll for whether the result `IFuture.isDone()`, and then to `IFuture.get()` the actual result.

### getProxy

public Object getProxy() throws ECFException
Description copied from interface: `IRemoteService`
Get local proxy for remote interface. The local proxy may then be used to make remote method calls transparently by invoking the local proxy method

Specified by:
  `getProxy` in interface `IRemoteService`
Returns:
  Object that implements the interface specified in the IRemoteServiceReference instance used to retrieve the IRemoteService object. The result may then be cast to the appropriate type. Will not be `null`.
Throws:
  `ECFException` - If some problem in creating the proxy. The underlying problem is conveyed in the nested exception.

### addRemoteServiceProxyToProxy

protected void addRemoteServiceProxyToProxy(List classes)

Parameters:
  `classes` - the interface classes to add to
Since:
  6.0

### addAsyncProxyClasses

protected List addAsyncProxyClasses(ClassLoader cl, Class[] interfaces)

Parameters:
  `cl` - ClassLoader to use to add async proxy classes
  `interfaces` - the Class[] of interface classes
Returns:
  List the list of interfaces plus any async proxy interface classes.
Since:
  8.3

### getProxy

public Object getProxy(ClassLoader cl, Class[] interfaces) throws ECFException
Description copied from interface: `IRemoteService`
Get local proxy for remote interface. The local proxy may then be used to make remote method calls transparently by invoking the local proxy method

Specified by:
  `getProxy` in interface `IRemoteService`
Parameters:
  `cl` - ClassLoader to use to create the proxy class. Must not be `null`.
  `interfaces` - array of Class that has the loaded interface classes. Must not be `null` and should have dimension of one or more.
Returns:
  Object that implements the given interfaceClasses. The result may then be cast to the one of the types given in interfaceClasses. Will not be `null`
Throws:
  `ECFException` - If some problem in creating the proxy. The underlying problem is conveyed in the nested exception.
Since:
  6.0

### getRemoteServiceProxyCreator

protected IRemoteServiceProxyCreator getRemoteServiceProxyCreator()

Returns:
  IRemoteServiceProxyCreator
Since:
  8.0

### createProxy

protected Object createProxy(ClassLoader cl, Class[] classes)

Parameters:
  `cl` - ClassLoader for proxy creation
  `classes` - the Class[] for proxy classes
Returns:
  Object the proxy implementing the given Class[]
Since:
  6.0

### createProxy

protected Object createProxy(Class[] classes)

### findAsyncRemoteServiceProxyClass

protected Class findAsyncRemoteServiceProxyClass(Class c)

Parameters:
  `c` - Class
Returns:
  Class
Since:
  3.3

### findAsyncRemoteServiceProxyClass

protected Class findAsyncRemoteServiceProxyClass(ClassLoader cl, Class c)

Parameters:
  `cl` - ClassLoader
  `c` - Class
Returns:
  Class
Since:
  6.0

### convertInterfaceNameToAsyncInterfaceName

protected String convertInterfaceNameToAsyncInterfaceName(String interfaceName)

### getCallParametersForProxyInvoke

protected Object[] getCallParametersForProxyInvoke(String callMethod, Method proxyMethod, Object[] args)

### getCallTimeoutForProxyInvoke

protected long getCallTimeoutForProxyInvoke(String callMethod, Method proxyMethod, Object[] args)

### getCallMethodNameForProxyInvoke

protected String getCallMethodNameForProxyInvoke(Method method, Object[] args)

### invokeObject

protected Object invokeObject(Object proxy, Method method, Object[] args) throws Throwable

Throws:
  `Throwable`

### invokeSync

protected Object invokeSync(IRemoteCall call) throws ECFException

Throws:
  `ECFException`

### isAsync

protected boolean isAsync(Object proxy, Method method, Object[] args)

Parameters:
  `proxy` - proxy instance
  `method` - the java Method invoked
  `args` - arguments
Returns:
  true if given proxy/method/args combination represents an async proxy class
Since:
  8.3

### createRemoteCall

protected IRemoteCall createRemoteCall(String callMethod, Object[] callParameters, long callTimeout)

Parameters:
  `callMethod` - call method
  `callParameters` - call parameters
  `callTimeout` - call timeout
Returns:
  IRemoteCall remote call created. Should not be `null`
Since:
  8.3

### handleProxyException

protected void handleProxyException(String message, Throwable t) throws ServiceException

Parameters:
  `message` - message for exception
  `t` - Throwable to wrap
Throws:
  `ServiceException` - thrown if subclasses do not override
Since:
  8.6

### handleInvokeSyncException

protected void handleInvokeSyncException(String methodName, ECFException e) throws Throwable

Parameters:
  `methodName` - method name
  `e` - exception thrown if subclasses do not override
Throws:
  `Throwable` - thrown if subclasses to not override
Since:
  8.6

### invokeReturnAsync

protected Object invokeReturnAsync(Object proxy, Method method, Object[] args) throws Throwable

Throws:
  `Throwable`
Since:
  8.13

### isOSGIAsync

protected boolean isOSGIAsync()

Since:
  8.13

### isInterfaceAsync

protected boolean isInterfaceAsync(Class interfaceClass)

Since:
  8.13

### isMethodAsync

protected boolean isMethodAsync(String methodName)

Since:
  8.13

### invoke

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable

Specified by:
  `invoke` in interface `InvocationHandler`
Throws:
  `Throwable`

### getAsyncRemoteCall

protected RemoteCall getAsyncRemoteCall(String invokeMethodName, Object[] asyncArgs)

Parameters:
  `invokeMethodName` - invoke method name
  `asyncArgs` - asynch arguments
Returns:
  RemoteCall remote call created. Should not be `null`
Since:
  8.4

### invokeAsync

protected Object invokeAsync(Method method, Object[] args) throws Throwable

Parameters:
  `method` - java Method invoked
  `args` - arguments
Returns:
  Object async future result. Should be of type IFuture, Future, or CompletableFuture
Throws:
  `Throwable` - thrown if some problem invoking async
Since:
  3.3

### callAsyncWithResult

protected Object callAsyncWithResult(IRemoteCall call, IRemoteCallListener listener)

Parameters:
  `call` - remote call
  `listener` - remote call listener
Returns:
  Object will be `null` unless subclasses override
Since:
  8.2

### callCompletableAsync

protected void callCompletableAsync(AbstractAsyncProxyRemoteCall call, IAsyncProxyCompletable completable)

Specified by:
  `callCompletableAsync` in class `AbstractAsyncProxyRemoteService`
Parameters:
  `call` - abstract remote call
  `completable` - async proxy completable
Since:
  8.4

### callFutureAsync

protected Future callFutureAsync(AbstractAsyncProxyRemoteCall call)

Specified by:
  `callFutureAsync` in class `AbstractAsyncProxyRemoteService`
Parameters:
  `call` - abstract async proxy remote call
Returns:
  Future future result
Since:
  8.4

### callFutureAsync

protected Future callFutureAsync(IRemoteCall call)

Parameters:
  `call` - remote call
Returns:
  Future future result
Since:
  8.2

### getAsyncArgs

protected AbstractRemoteService.AsyncArgs getAsyncArgs(Method method, Object[] args)

Parameters:
  `method` - method
  `args` - args
Returns:
  AsyncArgs async arguments
Since:
  3.3

### getAsyncInvokeMethodName

protected String getAsyncInvokeMethodName(Method method)

Parameters:
  `method` - java method invoked
Returns:
  String synchronous method name without asynchronous suffix (i.e. fooAsync to foo)
Since:
  3.3

### logWarning

protected void logWarning(String string, Throwable e)

### callAsync

public Future<Object> callAsync(IRemoteCall call, Callable<Object> callable)

Since:
  8.13

### callSync

public Object callSync(IRemoteCall call, Callable<Object> callable) throws InterruptedException, ExecutionException, TimeoutException

Throws:
  `TimeoutException`
  `ExecutionException`
  `InterruptedException`
Since:
  8.13

### dispose

public void dispose()

Since:
  8.2

### callAsyncWithTimeout

protected Future<Object> callAsyncWithTimeout(IRemoteCall call, Callable<Object> callable)

Since:
  8.13

### createRCCESuccess

protected IRemoteCallCompleteEvent createRCCESuccess(Object result)

Since:
  8.13

### createRCCEFailure

protected IRemoteCallCompleteEvent createRCCEFailure(Throwable e)

Since:
  8.13

### createRCCE

protected IRemoteCallCompleteEvent createRCCE(Object result, Throwable e)

Since:
  8.13

### callAsyncWithTimeout

protected void callAsyncWithTimeout(IRemoteCall call, Callable<IRemoteCallCompleteEvent> callable, IRemoteCallListener callback)

Since:
  8.13