public static OperationProcessingChain createOperationProcessingChain(FactoryService service) { return OperationProcessingChain.create(new Filter() { @Override public FilterReturnCode processRequest(Operation op, OperationProcessingContext context) { if (op.getAction() == Action.POST) { handlePatchPostPut(service, op); } return FilterReturnCode.CONTINUE_PROCESSING; } }); }
public static OperationProcessingChain createOperationProcessingChain( AuthCredentialsService service) { return OperationProcessingChain.create(new Filter() { @Override public FilterReturnCode processRequest(Operation op, OperationProcessingContext context) { switch (op.getAction()) { case DELETE: handleDelete(service, op, this); break; case PATCH: case POST: case PUT: handlePatchPostPut(service, op); break; default: } return FilterReturnCode.CONTINUE_PROCESSING; } }); }
private static OperationProcessingChain constructFailingServiceOperationProcessingChain(Service s) { return OperationProcessingChain.create(new Filter() { @Override public FilterReturnCode processRequest(Operation op, OperationProcessingContext context) { if (op.getAction() != Action.DELETE) { return FilterReturnCode.CONTINUE_PROCESSING; } context.setSuspendConsumer(o -> { s.sendRequest(Operation.createGet(s, TestFailingStatefulService.FACTORY_LINK) .setCompletion((oo, e) -> { context.resumeProcessingRequest(op, FilterReturnCode.FAILED_STOP_PROCESSING, e); op.fail(ex); })); }); return FilterReturnCode.SUSPEND_PROCESSING; } }); }
private static OperationProcessingChain constructFailingServiceOperationProcessingChain(Service s) { return OperationProcessingChain.create(new Filter() { @Override public FilterReturnCode processRequest(Operation op, OperationProcessingContext context) { if (op.getAction() != Action.DELETE) { return FilterReturnCode.CONTINUE_PROCESSING; } context.setSuspendConsumer(o -> { s.sendRequest(Operation.createGet(s, TestFailingStatefulService.FACTORY_LINK) .setCompletion((oo, e) -> { context.resumeProcessingRequest(op, FilterReturnCode.FAILED_STOP_PROCESSING, e); op.fail(ex); })); }); return FilterReturnCode.SUSPEND_PROCESSING; } }); }
private OperationProcessingChain getServiceOperationProcessingChain(Service service) { OperationProcessingChain chain = service.getOperationProcessingChain(); if (chain == null) { chain = OperationProcessingChain.create(); service.setOperationProcessingChain(chain); } return chain; } }
protected OperationProcessingChain constructOpProcessingChain() { this.authorizationFilter = new AuthorizationFilter(); return OperationProcessingChain.create( new AuthenticationFilter(), this.authorizationFilter, new RequestRateLimitsFilter(), new ForwardRequestFilter(), new ServiceAvailabilityFilter()); }
@Override public OperationProcessingChain getOperationProcessingChain() { if (super.getOperationProcessingChain() != null) { return super.getOperationProcessingChain(); } OperationProcessingChain opProcessingChain = OperationProcessingChain.create( new TransactionalRequestFilter(this)); setOperationProcessingChain(opProcessingChain); return opProcessingChain; } }
/** * A chain of filters, each of them is a {@link java.util.function.Predicate <Operation>}. When {@link #processRequest} is called * the filters are evaluated sequentially, where each filter's {@link java.util.function.Predicate <Operation>#test} can return * <code>true</code> to have the next filter in the chain continue process the request or * <code>false</code> to stop processing. */ @Override public OperationProcessingChain getOperationProcessingChain() { if (super.getOperationProcessingChain() != null) { return super.getOperationProcessingChain(); } RequestRouter myRouter = new RequestRouter(); myRouter.register( Action.PATCH, new RequestRouter.RequestBodyMatcher<>( StrictUpdateRequest.class, "kind", StrictUpdateRequest.KIND), this::handlePatchForStrictUpdate, "Strict update version check"); OperationProcessingChain opProcessingChain = OperationProcessingChain.create(myRouter); setOperationProcessingChain(opProcessingChain); return opProcessingChain; }
@Override public OperationProcessingChain getOperationProcessingChain() { if (super.getOperationProcessingChain() != null) { return super.getOperationProcessingChain(); } OperationProcessingChain opProcessingChain = OperationProcessingChain.create( new TransactionalRequestFilter(this)); setOperationProcessingChain(opProcessingChain); return opProcessingChain; } }
@Override public OperationProcessingChain getOperationProcessingChain() { if (super.getOperationProcessingChain() != null) { return super.getOperationProcessingChain(); } OperationProcessingChain opProcessingChain = OperationProcessingChain.create( new TransactionalRequestFilter(this)); setOperationProcessingChain(opProcessingChain); return opProcessingChain; }
@Override public OperationProcessingChain getOperationProcessingChain() { if (super.getOperationProcessingChain() != null) { return super.getOperationProcessingChain(); } OperationProcessingChain opProcessingChain = OperationProcessingChain.create( new TransactionalRequestFilter(this)); setOperationProcessingChain(opProcessingChain); return opProcessingChain; } }
@Override public OperationProcessingChain getOperationProcessingChain() { if (super.getOperationProcessingChain() != null) { return super.getOperationProcessingChain(); } OperationProcessingChain opProcessingChain = OperationProcessingChain.create( new TransactionalRequestFilter(this)); setOperationProcessingChain(opProcessingChain); return opProcessingChain; }
@Override public OperationProcessingChain getOperationProcessingChain() { if (super.getOperationProcessingChain() != null) { return super.getOperationProcessingChain(); } OperationProcessingChain opProcessingChain = OperationProcessingChain.create( new TransactionalRequestFilter(this)); setOperationProcessingChain(opProcessingChain); return opProcessingChain; } }
@Override public OperationProcessingChain getOperationProcessingChain() { if (super.getOperationProcessingChain() != null) { return super.getOperationProcessingChain(); } RequestRouter myRouter = new RequestRouter(); myRouter.register( Action.PATCH, new RequestRouter.RequestBodyMatcher<>( EnrollRequest.class, "kind", EnrollRequest.KIND), this::handlePatchForEnroll, "Register service"); myRouter.register( Action.PATCH, new RequestRouter.RequestBodyMatcher<>( EndTransactionRequest.class, "kind", EndTransactionRequest.KIND), this::handlePatchForEndTransaction, "Commit or abort transaction"); OperationProcessingChain opProcessingChain = OperationProcessingChain.create(myRouter); setOperationProcessingChain(opProcessingChain); return opProcessingChain; }
@Test public void testCounterServiceWithOperationFilters() throws Throwable { Service counterService = createCounterService(); OperationProcessingChain opProcessingChain = OperationProcessingChain.create( new OperationLogger()); counterService.setOperationProcessingChain(opProcessingChain); for (int i = 0; i < COUNT; i++) { incrementCounter(false); } int counter = getCounter(); assertEquals(COUNT, counter); this.host.setOperationTimeOutMicros(TimeUnit.MILLISECONDS.toMicros(250)); opProcessingChain = OperationProcessingChain.create( new OperationLogger(), new OperationPatchDropper()); counterService.setOperationProcessingChain(opProcessingChain); incrementCounter(true); counter = getCounter(); assertEquals(COUNT, counter); }
@Test public void testCounterServiceWithOperationFilters() throws Throwable { Service counterService = createCounterService(); OperationProcessingChain opProcessingChain = OperationProcessingChain.create( new OperationLogger()); counterService.setOperationProcessingChain(opProcessingChain); for (int i = 0; i < COUNT; i++) { incrementCounter(false); } int counter = getCounter(); assertEquals(COUNT, counter); this.host.setOperationTimeOutMicros(TimeUnit.MILLISECONDS.toMicros(250)); opProcessingChain = OperationProcessingChain.create( new OperationLogger(), new OperationPatchDropper()); counterService.setOperationProcessingChain(opProcessingChain); incrementCounter(true); counter = getCounter(); assertEquals(COUNT, counter); }
@Test public void testCounterServiceJumpOperationProcessingStage() throws Throwable { Service counterService = createCounterService(); OperationProcessingChain opProcessingChain = OperationProcessingChain.create( new OperationLogger(), new OperationNextFiltersBypasser(counterService), new OperationPatchDropper()); counterService.setOperationProcessingChain(opProcessingChain); for (int i = 0; i < COUNT; i++) { incrementCounter(false); } int counter = getCounter(); assertEquals(COUNT, counter); }
@Test public void testCounterServiceJumpOperationProcessingStage() throws Throwable { Service counterService = createCounterService(); OperationProcessingChain opProcessingChain = OperationProcessingChain.create( new OperationLogger(), new OperationNextFiltersBypasser(counterService), new OperationPatchDropper()); counterService.setOperationProcessingChain(opProcessingChain); for (int i = 0; i < COUNT; i++) { incrementCounter(false); } int counter = getCounter(); assertEquals(COUNT, counter); }
@Override public OperationProcessingChain getOperationProcessingChain() { if (super.getOperationProcessingChain() != null) { return super.getOperationProcessingChain(); } RequestRouter myRouter = new RequestRouter(); myRouter.register( Action.PATCH, new RequestRouter.RequestBodyMatcher<BankAccountServiceRequest>( BankAccountServiceRequest.class, "kind", BankAccountServiceRequest.Kind.DEPOSIT), this::handlePatchForDeposit, "Deposit"); myRouter.register( Action.PATCH, new RequestRouter.RequestBodyMatcher<BankAccountServiceRequest>( BankAccountServiceRequest.class, "kind", BankAccountServiceRequest.Kind.WITHDRAW), this::handlePatchForWithdraw, "Withdraw"); OperationProcessingChain opProcessingChain = OperationProcessingChain.create( myRouter); setOperationProcessingChain(opProcessingChain); return opProcessingChain; }
@Override public OperationProcessingChain getOperationProcessingChain() { if (super.getOperationProcessingChain() != null) { return super.getOperationProcessingChain(); } RequestRouter myRouter = new RequestRouter(); myRouter.register( Action.PATCH, new RequestRouter.RequestBodyMatcher<BankAccountServiceRequest>( BankAccountServiceRequest.class, "kind", BankAccountServiceRequest.Kind.DEPOSIT), this::handlePatchForDeposit, "Deposit"); myRouter.register( Action.PATCH, new RequestRouter.RequestBodyMatcher<BankAccountServiceRequest>( BankAccountServiceRequest.class, "kind", BankAccountServiceRequest.Kind.WITHDRAW), this::handlePatchForWithdraw, "Withdraw"); OperationProcessingChain opProcessingChain = OperationProcessingChain.create( myRouter); setOperationProcessingChain(opProcessingChain); return opProcessingChain; }