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 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
-
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 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
-
-
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()
-
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 benull
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 classAbstractAsyncProxyRemoteService
-
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 returnIFuture
instance. Returned IFuture will not benull
, and allows the caller to retrieve the actual resulting value from the remote call (or exception).- Specified by:
callAsync
in interfaceIRemoteService
- Parameters:
call
- the remote call to make. Must not benull
.- Returns:
- IFuture the asynchronous result to allow the caller to poll
for whether the result
IFuture.isDone()
, and then toIFuture.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 interfaceIRemoteService
- 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 classesinterfaces
- 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 interfaceIRemoteService
- Parameters:
cl
- ClassLoader to use to create the proxy class. Must not benull
.interfaces
- array of Class that has the loaded interface classes. Must not benull
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 creationclasses
- the Class[] for proxy classes- Returns:
- Object the proxy implementing the given Class[]
- Since:
- 6.0
-
findAsyncRemoteServiceProxyClass
protected Class findAsyncRemoteServiceProxyClass(Class c)
- Parameters:
c
- Class- Returns:
- Class
- Since:
- 3.3
-
findAsyncRemoteServiceProxyClass
protected Class findAsyncRemoteServiceProxyClass(ClassLoader cl, Class c)
- Parameters:
cl
- ClassLoaderc
- 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 instancemethod
- the java Method invokedargs
- 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 methodcallParameters
- call parameterscallTimeout
- 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 exceptiont
- 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 namee
- 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 interfaceInvocationHandler
- Throws:
Throwable
-
getAsyncRemoteCall
protected RemoteCall getAsyncRemoteCall(String invokeMethodName, Object[] asyncArgs)
- Parameters:
invokeMethodName
- invoke method nameasyncArgs
- 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 invokedargs
- 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 calllistener
- 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 classAbstractAsyncProxyRemoteService
- Parameters:
call
- abstract remote callcompletable
- async proxy completable- Since:
- 8.4
-
callFutureAsync
protected Future callFutureAsync(AbstractAsyncProxyRemoteCall call)
- Specified by:
callFutureAsync
in classAbstractAsyncProxyRemoteService
- 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
- methodargs
- 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
-
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
-
-