THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
ServiceCallContext - immutable user parameter map that will be implicitly passed to the service (and interceptor) on every method call.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
public interface ServiceCallContext { public String attribute(String name); public byte[] binaryAttribute(String name); } |
ServiceCallInterceptor - intercepts service method calls.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
public interface ServiceCallInterceptor extends Serializable { // Called BEFORE the service method is executed. public default void onInvoke(String mtd, Object[] args, @NullableServiceContext ServiceCallContext callCtxctx) throws ServiceInterceptException { // No-op. } // Called AFTER the service method is executed. public default void onComplete(String mtd, @Nullable Object res, @NullableServiceContext ServiceCallContext callCtxctx) throws ServiceInterceptException { // No-op. } // Called when onInvoke, onComplete or service method throws an exception. public default void onError(String mtd, Throwable err, @NullableServiceContext ServiceCallContext callCtxctx) { // No-op. } } |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
ServiceCallInterceptor security = new ServiceCallInterceptor() { @Override public void onInvoke(String mtd, Object[] args, ServiceCallContextServiceContext ctx) { // Check permission before execution of the method. if (!CustomSecurityProvider.get().access(mtd, ctx.attribute("sessionId"))) throw new SecurityException("Method invocation is not permitted"); } } ServiceCallInterceptor audit = new ServiceCallInterceptor() { @Override public void onInvoke(String mtd, Object[] args, ServiceCallContextServiceContext ctx) { // Record an event before execution of the method. AuditProvider.get().recordStartEvent(mtd, ctx.currentCallContext().attribute("sessionId")); } @Override public void onComplete(String mtd, @Nullable Object res, ServiceCallContextServiceContext ctx) { AuditProvider.get().recordFinishEvent(mtd, ctx.currentCallContext().attribute("sessionId")); } @Override public void onError(String mtd, Throwable err, ServiceCallContextServiceContext ctx) { AuditProvider.get().recordError(mtd, ctx.currentCallContext().attribute("sessionId"), err.getMessage()); } } // Set context parameters for service proxy. ServiceCallContext ctx = ServiceCallContext.builder().put("sessionId", sessionId).build(); ServiceConfiguration svcCfg = new ServiceConfiguration() .setName("service") .setService(new MyServiceImpl()) .setMaxPerNodeCount(1) .setInterceptors(security, audit); // Deploy service. ignite.services().deploy(svcCfg); MyService proxy = ignite.services().serviceProxy("service", MyService.class, false, ctx, 0); // A business method call to be intercepted. proxy.placeOrder(order1); proxy.placeOrder(order2); |
...