Class AbstractRemoteService

    • Field Detail

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

      • AbstractRemoteService

        public AbstractRemoteService()
    • Method Detail

      • 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()
      • 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
      • getDefaultTimeout

        protected long getDefaultTimeout()
      • 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)
      • 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
      • 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
      • 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
      • callFutureAsync

        protected Future callFutureAsync​(IRemoteCall call)
        Parameters:
        call - remote call
        Returns:
        Future future result
        Since:
        8.2
      • 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
      • dispose

        public void dispose()
        Since:
        8.2