Class InvocationHandler<T>
- Type Parameters:
T- The type is the interface this invocation handler will handle invocations for, i.e. the type of the service (getComponent()) and the type of the stub representing the service.
- All Implemented Interfaces:
InvocationHandler
T in a
distributed environment.
It catches the API method calls to the proxy object that represents the
service to the caller (i. e. the client) and delegates them to the
communication submodule that is responsible for
doing the remote calls on the remote service the proxy object is a proxy for.
If a callback object is passed within a parameter to the requested method, then the handler creates a callback URI, associates this URI with the passed callback object and passes this URI to the skeleton responsible for the execution of the requested method on server side instead of the callback object itself.
With this URI the receiver skeleton can create a stub/proxy object intended to do remote callback invocations on the callback object associated with the given callback URI.
The invocation handler only delegates calls to methods of the service
interface, which are neither annotated with ProxyIgnore nor with
ProxyFollow.
Calls to methods which are annotated with ProxyIgnore, are dismissed.
Calls to methods which are annotated with Replaces will be replaced by the method
described in the annotation. All further then applies to the replacing method, i. e. using cached
values for an immutable (replacing) method or following the proxy. Replacing methods may switch
from virtual to static invocation (i. e. from an instance method to a class method). In this case
the parameter values are shifted by one and the first parameter will be the provided object
instance. The replacing method has to consider this appropriately, i. e. the first parameter has
to be of the appropriate type (of the object instance).
Additionally, replacing may take place locally. In this case the method call on the proxy will
not be forwarded but executed locally instead of remote.
The return value of methods annotated with Immutable will cached internally using a
WeakReference. Consecutive calls will then use this cached value if it is still present.
Calls to methods which are annotated with ProxyFollow, are replied with another proxy
object.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final booleanWhether this invocation handler is a callback object, that is, it is a stub that has been created for a callback parameter in an invocation message.The interface, this is a proxy for.protected final longThe time span in milliseconds which a lazy method is considered immutable.protected final LoggerMy logger.The cache containing whether a class has a proxy annotation (ProxyAllow,ProxyCallbackorServerSideProxyAllow) or implementsServerSideProxy.protected final URIThe original (logical) URI identifying the remote service to call, in case a URI mapping was applied on the remote identifier URI.protected final URIThe (physical) service URI of the ADEPT2 component this object is a proxy for. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedInvocationHandler(InvocationTarget invTarget, AtomicLong invId, long lazyTime, URI remoteObjectIdentifier, URI registeredIdentifier, boolean callback, Stack<Method> preceder, long cachingRemItInitAliveTime, long cachingRemItAliveTimeExt, Map<Class<?>, Boolean> proxyAnnotCache, Logger logger) Create an invocation handler for the configured component name, following the provided methods to the interface this is a proxy for.protectedInvocationHandler(InvocationTarget invTarget, AtomicLong invId, long lazyTime, URI remoteObjectIdentifier, URI registeredIdentifier, boolean callback, Stack<Method> preceder, Map<Class<?>, Boolean> proxyAnnotCache, Logger logger) Deprecated, for removal: This API element is subject to removal in a future version.InvocationHandler(InvocationTarget invTarget, AtomicLong invId, long lazyTime, URI remoteIdentifier, URI registeredIdentifier, Class<T> remoteInterface, boolean callback, long cachingRemItInitAliveTime, long cachingRemItAliveTimeExt, Map<Class<?>, Boolean> proxyAnnotCache, Logger logger) Create a new invocation handler.InvocationHandler(InvocationTarget invTarget, AtomicLong invId, long lazyTime, URI remoteIdentifier, URI registeredIdentifier, Class<T> remoteInterface, boolean callback, Map<Class<?>, Boolean> proxyAnnotCache, Logger logger) Deprecated, for removal: This API element is subject to removal in a future version. -
Method Summary
Modifier and TypeMethodDescriptionGets the (physical) service URI of the ADEPT2 component this object is a proxy for.protected longGenerates unique invocation IDs.
-
Field Details
-
logger
My logger. -
proxyAnnotCache
The cache containing whether a class has a proxy annotation (ProxyAllow,ProxyCallbackorServerSideProxyAllow) or implementsServerSideProxy. This is shared across different invocation handlers.nullif no caching should be used.- See Also:
-
checkIface(Class)
-
lazyTime
protected final long lazyTimeThe time span in milliseconds which a lazy method is considered immutable. -
remoteIdentifier
The (physical) service URI of the ADEPT2 component this object is a proxy for. -
registeredIdentifier
The original (logical) URI identifying the remote service to call, in case a URI mapping was applied on the remote identifier URI. -
callback
protected final boolean callbackWhether this invocation handler is a callback object, that is, it is a stub that has been created for a callback parameter in an invocation message. -
iface
The interface, this is a proxy for.
-
-
Constructor Details
-
InvocationHandler
@Deprecated(since="15.0.0", forRemoval=true) public InvocationHandler(InvocationTarget invTarget, AtomicLong invId, long lazyTime, URI remoteIdentifier, URI registeredIdentifier, Class<T> remoteInterface, boolean callback, Map<Class<?>, Boolean> proxyAnnotCache, Logger logger) Deprecated, for removal: This API element is subject to removal in a future version.Create a new invocation handler.- Parameters:
invTarget- The invocation target providing the callback export and the invocation delegate to send messages to.invId- The count of each invocation to each have its unique ID.lazyTime- The time span in milliseconds which a lazy method is considered immutable.remoteIdentifier- The (physical) service URI of the ADEPT2 component this object is a proxy for.remoteInterface- The interface of the ADEPT2 component, withTdefining the generic type of this handler.registeredIdentifier- The original (logical) URI identifying the remote service to call, in case a URI mapping was applied on the original URI.callback- Whether this invocation handler is a callback object, that is, it is a stub that has been created for a callback parameter in an invocation message.proxyAnnotCache- The cache containing whether a class has a proxy annotation (ProxyAllow,ProxyCallbackorServerSideProxyAllow) or implementsServerSideProxy. This is shared across different invocation handlers.nullif no caching should be used.logger- The class-specific logger for this invocation handler.
-
InvocationHandler
public InvocationHandler(InvocationTarget invTarget, AtomicLong invId, long lazyTime, URI remoteIdentifier, URI registeredIdentifier, Class<T> remoteInterface, boolean callback, long cachingRemItInitAliveTime, long cachingRemItAliveTimeExt, Map<Class<?>, Boolean> proxyAnnotCache, Logger logger) Create a new invocation handler.- Parameters:
invTarget- The invocation target providing the callback export and the invocation delegate to send messages to.invId- The count of each invocation to each have its unique ID.lazyTime- The time span in milliseconds which a lazy method is considered immutable.remoteIdentifier- The service URI of the ADEPT2 component this object is a proxy for.remoteInterface- The interface of the ADEPT2 component, withTdefining the generic type of this handler.registeredIdentifier- The original URI identifying the remote service to call, in case a URI mapping was applied on the original URI.callback- Whether this invocation handler is a callback object, that is, it is a stub that has been created for a callback parameter in an invocation message.cachingRemItInitAliveTime- The time in milliseconds to keep a caching remote iterator created for each received remote iterator alive after creating it and before accessing it.cachingRemItAliveTimeExt- The time in milliseconds to extend the alive time of a caching remote iterator created for each received remote iterator.proxyAnnotCache- The cache containing whether a class has a proxy annotation (ProxyAllow,ProxyCallbackorServerSideProxyAllow) or implementsServerSideProxy. This is shared across different invocation handlers.nullif no caching should be used.logger- The class-specific logger for this invocation handler.
-
InvocationHandler
@Deprecated(since="15.0.0", forRemoval=true) protected InvocationHandler(InvocationTarget invTarget, AtomicLong invId, long lazyTime, URI remoteObjectIdentifier, URI registeredIdentifier, boolean callback, Stack<Method> preceder, Map<Class<?>, Boolean> proxyAnnotCache, Logger logger) Deprecated, for removal: This API element is subject to removal in a future version.Create an invocation handler for the configured component name, following the provided methods to the interface this is a proxy for.Invocation handler for
ProxyFollowobjects are created automatically within this class.- Parameters:
invTarget- The invocation target providing the callback export and the invocation delegate to send messages to.invId- The count of each invocation to each have its unique ID.lazyTime- The time span in milliseconds which a lazy method is considered immutable.remoteObjectIdentifier- The (physical) service URI of the ADEPT2 component this object is a proxy for.registeredIdentifier- The original (logical) URI identifying the remote service to call, in case a URI mapping was applied on the remote object identifier.callback- Whether this invocation handler is a callback object, that is, it is a stub that has been created for a callback parameter in an invocation message.preceder- The stack of methods of the component, to reach the object this is a proxy for.proxyAnnotCache- The cache containing whether a class has a proxy annotation (ProxyAllow,ProxyCallbackorServerSideProxyAllow) or implementsServerSideProxy. This is shared across different invocation handlers.nullif no caching should be used.logger- The class-specific logger for this invocation handler.
-
InvocationHandler
protected InvocationHandler(InvocationTarget invTarget, AtomicLong invId, long lazyTime, URI remoteObjectIdentifier, URI registeredIdentifier, boolean callback, Stack<Method> preceder, long cachingRemItInitAliveTime, long cachingRemItAliveTimeExt, Map<Class<?>, Boolean> proxyAnnotCache, Logger logger) Create an invocation handler for the configured component name, following the provided methods to the interface this is a proxy for.Invocation handler for
ProxyFollowobjects are created automatically within this class.- Parameters:
invTarget- The invocation target providing the callback export and the invocation delegate to send messages to.invId- The count of each invocation to each have its unique ID.lazyTime- The time span in milliseconds which a lazy method is considered immutable.remoteObjectIdentifier- The service URI of the ADEPT2 component this object is a proxy for.registeredIdentifier- The original URI identifying the remote service to call, in case a URI mapping was applied on the remote object identifier.callback- Whether this invocation handler is a callback object, that is, it is a stub that has been created for a callback parameter in an invocation message.preceder- The stack of methods of the component, to reach the object this is a proxy for.cachingRemItInitAliveTime- The time in milliseconds to keep a caching remote iterator created for each received remote iterator alive after creating it and before accessing it.cachingRemItAliveTimeExt- The time in milliseconds to extend the alive time of a caching remote iterator created for each received remote iterator.proxyAnnotCache- The cache containing whether a class has a proxy annotation (ProxyAllow,ProxyCallbackorServerSideProxyAllow) or implementsServerSideProxy. This is shared across different invocation handlers.nullif no caching should be used.logger- The class-specific logger for this invocation handler.
-
-
Method Details
-
getRemoteIdentifier
Gets the (physical) service URI of the ADEPT2 component this object is a proxy for.- Returns:
- The (physical) service URI of the ADEPT2 component this object is a proxy for.
-
getComponent
- Returns:
- The component (i.e. a
Proxy).
-
nextInvocationId
protected long nextInvocationId()Generates unique invocation IDs.- Returns:
- A new invocation ID.
-
invoke
- Specified by:
invokein interfaceInvocationHandler- Throws:
Throwable
-
InvocationHandler(InvocationTarget, AtomicLong, long, URI, URI, boolean, Stack, long, long, Map, Logger)instead.