org.eclipse.ecf.remoteservice
Class AbstractRemoteService

java.lang.Object
  extended by org.eclipse.ecf.remoteservice.asyncproxy.AbstractAsyncProxyRemoteService
      extended by org.eclipse.ecf.remoteservice.AbstractRemoteService
All Implemented Interfaces:
java.lang.reflect.InvocationHandler, IRemoteService
Direct Known Subclasses:
AbstractClientService, RemoteServiceImpl

public abstract class AbstractRemoteService
extends AbstractAsyncProxyRemoteService
implements IRemoteService, java.lang.reflect.InvocationHandler

Abstract remote service implementation. Clients may subclass to avoid re-implementing methods from IRemoteService.

Since:
4.1

Nested Class Summary
 class AbstractRemoteService.AsyncArgs
           
 class AbstractRemoteService.ProxyClassLoader
           
 
Field Summary
protected static java.lang.Object[] EMPTY_ARGS
           
protected  java.util.concurrent.ExecutorService futureExecutorService
           
protected  int futureExecutorServiceMaxThreads
           
protected  org.eclipse.equinox.concurrent.future.IExecutor iFutureExecutor
           
 
Constructor Summary
AbstractRemoteService()
           
 
Method Summary
protected  java.util.List addAsyncProxyClasses(java.lang.ClassLoader cl, java.lang.Class[] interfaces)
           
protected  void addRemoteServiceProxyToProxy(java.util.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.
protected  java.lang.Object callAsyncWithResult(IRemoteCall call, IRemoteCallListener listener)
           
protected  void callCompletableAsync(AbstractAsyncProxyRemoteCall call, IAsyncProxyCompletable completable)
           
protected  java.util.concurrent.Future callFutureAsync(AbstractAsyncProxyRemoteCall call)
           
protected  java.util.concurrent.Future callFutureAsync(IRemoteCall call)
           
protected  java.lang.String convertInterfaceNameToAsyncInterfaceName(java.lang.String interfaceName)
           
protected  java.lang.Object createProxy(java.lang.Class[] classes)
           
protected  java.lang.Object createProxy(java.lang.ClassLoader cl, java.lang.Class[] classes)
           
protected  IRemoteCall createRemoteCall(java.lang.String callMethod, java.lang.Object[] callParameters, long callTimeout)
           
 void dispose()
           
protected  java.lang.Class findAsyncRemoteServiceProxyClass(java.lang.Class c)
           
protected  java.lang.Class findAsyncRemoteServiceProxyClass(java.lang.ClassLoader cl, java.lang.Class c)
           
protected  AbstractRemoteService.AsyncArgs getAsyncArgs(java.lang.reflect.Method method, java.lang.Object[] args)
           
protected  java.lang.String getAsyncInvokeMethodName(java.lang.reflect.Method method)
           
protected  RemoteCall getAsyncRemoteCall(java.lang.String invokeMethodName, java.lang.Object[] asyncArgs)
           
protected  java.lang.String getCallMethodNameForProxyInvoke(java.lang.reflect.Method method, java.lang.Object[] args)
           
protected  java.lang.Object[] getCallParametersForProxyInvoke(java.lang.String callMethod, java.lang.reflect.Method proxyMethod, java.lang.Object[] args)
           
protected  long getCallTimeoutForProxyInvoke(java.lang.String callMethod, java.lang.reflect.Method proxyMethod, java.lang.Object[] args)
           
protected  long getDefaultTimeout()
           
protected  java.util.concurrent.ExecutorService getFutureExecutorService(IRemoteCall call)
           
protected  org.eclipse.equinox.concurrent.future.IExecutor getIFutureExecutor(IRemoteCall call)
           
protected abstract  java.lang.String[] getInterfaceClassNames()
           
 java.lang.Object getProxy()
          Get local proxy for remote interface.
 java.lang.Object getProxy(java.lang.ClassLoader cl, java.lang.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(java.lang.String methodName, ECFException e)
           
protected  void handleProxyException(java.lang.String message, java.lang.Throwable t)
           
 java.lang.Object invoke(java.lang.Object proxy, java.lang.reflect.Method method, java.lang.Object[] args)
           
protected  java.lang.Object invokeAsync(java.lang.reflect.Method method, java.lang.Object[] args)
           
protected  java.lang.Object invokeObject(java.lang.Object proxy, java.lang.reflect.Method method, java.lang.Object[] args)
           
protected  java.lang.Object invokeSync(IRemoteCall call)
           
protected  boolean isAsync(java.lang.Object proxy, java.lang.reflect.Method method, java.lang.Object[] args)
           
protected  java.lang.Class loadInterfaceClass(java.lang.ClassLoader cl, java.lang.String className)
           
protected  java.lang.Class loadInterfaceClass(java.lang.String className)
           
protected  void logWarning(java.lang.String string, java.lang.Throwable e)
           
protected  void setFutureExecutorService(java.util.concurrent.ExecutorService executorService)
           
protected  void setIFutureExecutor(org.eclipse.equinox.concurrent.future.IExecutor executor)
           
 
Methods inherited from class org.eclipse.ecf.remoteservice.asyncproxy.AbstractAsyncProxyRemoteService
callFuture
 
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 Detail

EMPTY_ARGS

protected static final java.lang.Object[] EMPTY_ARGS

futureExecutorServiceMaxThreads

protected int futureExecutorServiceMaxThreads
Since:
8.2

futureExecutorService

protected java.util.concurrent.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 java.util.concurrent.ExecutorService getFutureExecutorService(IRemoteCall call)
Since:
8.2

setFutureExecutorService

protected void setFutureExecutorService(java.util.concurrent.ExecutorService executorService)
Since:
8.2

getIFutureExecutor

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

setIFutureExecutor

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

getInterfaceClassNames

protected abstract java.lang.String[] getInterfaceClassNames()

getRemoteServiceID

protected abstract IRemoteServiceID getRemoteServiceID()

getRemoteServiceReference

protected abstract IRemoteServiceReference getRemoteServiceReference()

loadInterfaceClass

protected java.lang.Class loadInterfaceClass(java.lang.String className)
                                      throws java.lang.ClassNotFoundException
Throws:
java.lang.ClassNotFoundException

loadInterfaceClass

protected java.lang.Class loadInterfaceClass(java.lang.ClassLoader cl,
                                             java.lang.String className)
                                      throws java.lang.ClassNotFoundException
Throws:
java.lang.ClassNotFoundException
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 java.lang.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(java.util.List classes)
Since:
6.0

addAsyncProxyClasses

protected java.util.List addAsyncProxyClasses(java.lang.ClassLoader cl,
                                              java.lang.Class[] interfaces)
Since:
8.3

getProxy

public java.lang.Object getProxy(java.lang.ClassLoader cl,
                                 java.lang.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()
Since:
8.0

createProxy

protected java.lang.Object createProxy(java.lang.ClassLoader cl,
                                       java.lang.Class[] classes)
Since:
6.0

createProxy

protected java.lang.Object createProxy(java.lang.Class[] classes)

findAsyncRemoteServiceProxyClass

protected java.lang.Class findAsyncRemoteServiceProxyClass(java.lang.Class c)
Since:
3.3

findAsyncRemoteServiceProxyClass

protected java.lang.Class findAsyncRemoteServiceProxyClass(java.lang.ClassLoader cl,
                                                           java.lang.Class c)
Since:
6.0

convertInterfaceNameToAsyncInterfaceName

protected java.lang.String convertInterfaceNameToAsyncInterfaceName(java.lang.String interfaceName)

getCallParametersForProxyInvoke

protected java.lang.Object[] getCallParametersForProxyInvoke(java.lang.String callMethod,
                                                             java.lang.reflect.Method proxyMethod,
                                                             java.lang.Object[] args)

getCallTimeoutForProxyInvoke

protected long getCallTimeoutForProxyInvoke(java.lang.String callMethod,
                                            java.lang.reflect.Method proxyMethod,
                                            java.lang.Object[] args)

getCallMethodNameForProxyInvoke

protected java.lang.String getCallMethodNameForProxyInvoke(java.lang.reflect.Method method,
                                                           java.lang.Object[] args)

invokeObject

protected java.lang.Object invokeObject(java.lang.Object proxy,
                                        java.lang.reflect.Method method,
                                        java.lang.Object[] args)
                                 throws java.lang.Throwable
Throws:
java.lang.Throwable

invokeSync

protected java.lang.Object invokeSync(IRemoteCall call)
                               throws ECFException
Throws:
ECFException

isAsync

protected boolean isAsync(java.lang.Object proxy,
                          java.lang.reflect.Method method,
                          java.lang.Object[] args)
Since:
8.3

createRemoteCall

protected IRemoteCall createRemoteCall(java.lang.String callMethod,
                                       java.lang.Object[] callParameters,
                                       long callTimeout)
Since:
8.3

handleProxyException

protected void handleProxyException(java.lang.String message,
                                    java.lang.Throwable t)
                             throws org.osgi.framework.ServiceException
Throws:
org.osgi.framework.ServiceException
Since:
8.6

handleInvokeSyncException

protected void handleInvokeSyncException(java.lang.String methodName,
                                         ECFException e)
                                  throws java.lang.Throwable
Throws:
java.lang.Throwable
Since:
8.6

invoke

public java.lang.Object invoke(java.lang.Object proxy,
                               java.lang.reflect.Method method,
                               java.lang.Object[] args)
                        throws java.lang.Throwable
Specified by:
invoke in interface java.lang.reflect.InvocationHandler
Throws:
java.lang.Throwable

getAsyncRemoteCall

protected RemoteCall getAsyncRemoteCall(java.lang.String invokeMethodName,
                                        java.lang.Object[] asyncArgs)
Since:
8.4

invokeAsync

protected java.lang.Object invokeAsync(java.lang.reflect.Method method,
                                       java.lang.Object[] args)
                                throws java.lang.Throwable
Throws:
java.lang.Throwable
Since:
3.3

callAsyncWithResult

protected java.lang.Object callAsyncWithResult(IRemoteCall call,
                                               IRemoteCallListener listener)
Since:
8.2

callCompletableAsync

protected void callCompletableAsync(AbstractAsyncProxyRemoteCall call,
                                    IAsyncProxyCompletable completable)
Specified by:
callCompletableAsync in class AbstractAsyncProxyRemoteService
Since:
8.4

callFutureAsync

protected java.util.concurrent.Future callFutureAsync(AbstractAsyncProxyRemoteCall call)
Specified by:
callFutureAsync in class AbstractAsyncProxyRemoteService
Since:
8.4

callFutureAsync

protected java.util.concurrent.Future callFutureAsync(IRemoteCall call)
Since:
8.2

getAsyncArgs

protected AbstractRemoteService.AsyncArgs getAsyncArgs(java.lang.reflect.Method method,
                                                       java.lang.Object[] args)
Since:
3.3

getAsyncInvokeMethodName

protected java.lang.String getAsyncInvokeMethodName(java.lang.reflect.Method method)
Since:
3.3

logWarning

protected void logWarning(java.lang.String string,
                          java.lang.Throwable e)

dispose

public void dispose()
Since:
8.2