Details
-
Sub-task
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
Description
Implement support for passing implicit "request" attributes from the proxy to the Java service.
Implementation notes.
- If no caller attributes are passed - there should be no performance overhead when executing service methods.
- Attributes allow only string and byte[] values and does not permit nulls in key/values.
- Currently, the context should be immutable, but in the future, it should be possible to change it through the interceptor.
- ServiceResource annotation allows to inject service/proxy, we must provide the ability to transparently pass the context to the injected service.
Public API changes:
New methods in IgniteServices to pass caller context to service proxy.
public <T> T serviceProxy(String name, Class<? super T> svcItf, boolean sticky, ServiceCallContext callCtx) public <T> T serviceProxy(String name, Class<? super T> svcItf, boolean sticky, ServiceCallContext callCtx, long timeout)
New method in ServiceContext for getting caller context inside the service method.
/** * Gets context of the current service call. * * @return Context of the current service call, possibly {@code null}. * @see ServiceCallContext */ @Nullable public ServiceCallContext currentCallContext();
New interface ServiceCallContext
public interface ServiceCallContext { public String attribute(String name); public byte[] binaryAttribute(String name); }
And the builder ServiceCallContextBuilder for creating ServiceCallContext.
New property in ServiceResource annotation.
/** * Flag indicating that the service call context should be passed to the injected service. * * @return {@code True} if the service call context should be passed to the injected service. */ public boolean forwardCallerContext() default false;
Attachments
Issue Links
- is required by
-
IGNITE-15795 .NET: Request attributes for a .NET service
- Resolved
- relates to
-
IGNITE-15829 Request attributes for a service in thin clients.
- Resolved
- links to