Hi, Pavel

Is it possible to provide type-safe API for ServiceProxyContext ?
I think constructions like int arg1 = ctx.attribute("arg1"); are error
prone.

Can we make something like this :

//Signature with two generic params which allow the compiler to check
if the service will be called with the wrong type context.

public <T extends ContextedWith<CtxType>, CtxType> T
serviceProxyTyped(ClusterGroup prj, String name, Class<? super T >
srvcCls, CtxType optCtx, boolean sticky, long timeout)

//new interface which services with scoped context should implement

public interface ContextedWith<T> {
T getCtx();
}

// implementation can delegate to Map-like context or be POJO.
interface MyServiceContext {
int getArg1();
String getUserId();
}

class MyService implements ContextedWith<MyServiceContext> {
void doThings() {
MyServiceContext ctx = getCtx();

System.out.println("ctx.getArg1() = " + ctx.getArg1());
}

@Override public MyServiceContext getCtx() {
return ServiceProxyContext.current();
}
}

WDYT?

Best regards, Ed.

On Fri, 8 Oct 2021 at 13:26, Pavel Pereslegin <xxt...@gmail.com> wrote:

> Hello Igniters!
>
> I want to implement a feature to support a custom "caller" context in
> ignite services (see example in ticket description [1]).
>
> Sometimes, when using Ignite services, it becomes necessary to pass
> custom parameters from the "request source" to the service. This is
> most commonly used to track the origin of a service call (user id,
> request id, session id eg see this user question [2]).
> At the moment, the only way to pass such parameters to a service is by
> adding argument(s) to all called methods of the service, which makes
> the code messy and also complicates development and maintenance.
>
> I propose letting the user set a custom context for the service proxy
> and implicitly pass that context to the methods being called. This
> function should not affect the execution of service methods in any way
> unless the user has specified a context.
>
> An example of using the proposed API [1].
> PoC (except thin clients) [3].
>
> WDYT?
>
> [1] https://issues.apache.org/jira/browse/IGNITE-15572
> [2]
> https://stackoverflow.com/questions/57459071/apache-ignite-service-grid-service-call-context
> [3] https://github.com/apache/ignite/pull/9440
>

Reply via email to