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 classAbstractRemoteService.AsyncArgsclassAbstractRemoteService.ProxyClassLoader
-
Field Summary
Fields Modifier and Type Field Description protected static Object[]EMPTY_ARGSprotected ExecutorServicefutureExecutorServiceprotected intfutureExecutorServiceMaxThreadsprotected org.eclipse.equinox.concurrent.future.IExecutoriFutureExecutor
-
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 benullclassName- 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:
callAsyncin classAbstractAsyncProxyRemoteService
-
callAsync
public org.eclipse.equinox.concurrent.future.IFuture callAsync(IRemoteCall call)
Description copied from interface:IRemoteServiceCall remote method specified by call parameter asynchronously, and immediately returnIFutureinstance. Returned IFuture will not benull, and allows the caller to retrieve the actual resulting value from the remote call (or exception).- Specified by:
callAsyncin 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:IRemoteServiceGet 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:
getProxyin 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:IRemoteServiceGet 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:
getProxyin 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 benulland 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:
invokein 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
nullunless subclasses override - Since:
- 8.2
-
callCompletableAsync
protected void callCompletableAsync(AbstractAsyncProxyRemoteCall call, IAsyncProxyCompletable completable)
- Specified by:
callCompletableAsyncin classAbstractAsyncProxyRemoteService- Parameters:
call- abstract remote callcompletable- async proxy completable- Since:
- 8.4
-
callFutureAsync
protected Future callFutureAsync(AbstractAsyncProxyRemoteCall call)
- Specified by:
callFutureAsyncin 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:
TimeoutExceptionExecutionExceptionInterruptedException- 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
-
-