Class 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
  • 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

      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