/** * Initializes a {@link SimpleDeadlineManager} as specified through this Builder. * * @return a {@link SimpleDeadlineManager} as specified through this Builder */ public SimpleDeadlineManager build() { return new SimpleDeadlineManager(this); }
/** * Provides the default {@link DeadlineManager} implementation. Subclasses may override this method to provide their * own default. * * @param config The configuration that supplies registered components. * @return The default DeadlineManager to use */ protected DeadlineManager defaultDeadlineManager(Configuration config) { return SimpleDeadlineManager.builder().scopeAwareProvider(new ConfigurationScopeAwareProvider(config)).build(); }
@Override public void cancelSchedule(String deadlineName, String scheduleId) { runOnPrepareCommitOrNow(() -> cancelSchedule(new DeadlineId(deadlineName, scheduleId))); }
@Override public String schedule(Duration triggerDuration, String deadlineName, Object messageOrPayload, ScopeDescriptor deadlineScope) { DeadlineMessage<?> deadlineMessage = asDeadlineMessage(deadlineName, messageOrPayload); String deadlineId = deadlineMessage.getIdentifier(); runOnPrepareCommitOrNow(() -> { DeadlineMessage<?> interceptedDeadlineMessage = processDispatchInterceptors(deadlineMessage); DeadlineTask deadlineTask = new DeadlineTask(deadlineName, deadlineScope, interceptedDeadlineMessage, deadlineId); ScheduledFuture<?> scheduledFuture = scheduledExecutorService.schedule( deadlineTask, triggerDuration.toMillis(), TimeUnit.MILLISECONDS ); scheduledTasks.put(new DeadlineId(deadlineName, deadlineId), scheduledFuture); }); return deadlineId; }
@Override public void cancelAll(String deadlineName) { runOnPrepareCommitOrNow( () -> scheduledTasks.entrySet().stream() .map(Map.Entry::getKey) .filter(scheduledTaskId -> scheduledTaskId.getDeadlineName().equals(deadlineName)) .forEach(this::cancelSchedule) ); }
@Override public void run() { if (logger.isDebugEnabled()) { logger.debug("Triggered deadline"); } try { Instant triggerInstant = GenericEventMessage.clock.instant(); UnitOfWork<DeadlineMessage<?>> unitOfWork = new DefaultUnitOfWork<>( new GenericDeadlineMessage<>(deadlineName, deadlineMessage, () -> triggerInstant)); unitOfWork.attachTransaction(transactionManager); InterceptorChain chain = new DefaultInterceptorChain<>(unitOfWork, handlerInterceptors(), deadlineMessage -> { executeScheduledDeadline(deadlineMessage, deadlineScope); return null; }); ResultMessage<?> resultMessage = unitOfWork.executeWithResult(chain::proceed); if (resultMessage.isExceptional()) { Throwable e = resultMessage.exceptionResult(); throw new DeadlineException(format("An error occurred while triggering the deadline %s %s", deadlineName, deadlineId), e); } } finally { scheduledTasks.remove(new DeadlineId(deadlineName, deadlineId)); } }
@Override public String schedule(Duration triggerDuration, String deadlineName, Object messageOrPayload, ScopeDescriptor deadlineScope) { DeadlineMessage<?> deadlineMessage = asDeadlineMessage(deadlineName, messageOrPayload); String deadlineId = deadlineMessage.getIdentifier(); runOnPrepareCommitOrNow(() -> { DeadlineMessage<?> interceptedDeadlineMessage = processDispatchInterceptors(deadlineMessage); DeadlineTask deadlineTask = new DeadlineTask(deadlineName, deadlineScope, interceptedDeadlineMessage, deadlineId); ScheduledFuture<?> scheduledFuture = scheduledExecutorService.schedule( deadlineTask, triggerDuration.toMillis(), TimeUnit.MILLISECONDS ); scheduledTasks.put(new DeadlineId(deadlineName, deadlineId), scheduledFuture); }); return deadlineId; }
@Override public void cancelAll(String deadlineName) { runOnPrepareCommitOrNow( () -> scheduledTasks.entrySet().stream() .map(Map.Entry::getKey) .filter(scheduledTaskId -> scheduledTaskId.getDeadlineName().equals(deadlineName)) .forEach(this::cancelSchedule) ); }
@Override public void run() { if (logger.isDebugEnabled()) { logger.debug("Triggered deadline"); } try { Instant triggerInstant = GenericEventMessage.clock.instant(); UnitOfWork<DeadlineMessage<?>> unitOfWork = new DefaultUnitOfWork<>( new GenericDeadlineMessage<>(deadlineName, deadlineMessage, () -> triggerInstant)); unitOfWork.attachTransaction(transactionManager); InterceptorChain chain = new DefaultInterceptorChain<>(unitOfWork, handlerInterceptors(), deadlineMessage -> { executeScheduledDeadline(deadlineMessage, deadlineScope); return null; }); ResultMessage<?> resultMessage = unitOfWork.executeWithResult(chain::proceed); if (resultMessage.isExceptional()) { Throwable e = resultMessage.exceptionResult(); throw new DeadlineException(format("An error occurred while triggering the deadline %s %s", deadlineName, deadlineId), e); } } finally { scheduledTasks.remove(new DeadlineId(deadlineName, deadlineId)); } }
@Override public void cancelSchedule(String deadlineName, String scheduleId) { runOnPrepareCommitOrNow(() -> cancelSchedule(new DeadlineId(deadlineName, scheduleId))); }
@Override public void cancelAll(String deadlineName) { runOnPrepareCommitOrNow( () -> scheduledTasks.entrySet().stream() .map(Map.Entry::getKey) .filter(scheduledTaskId -> scheduledTaskId.getDeadlineName().equals(deadlineName)) .forEach(this::cancelSchedule) ); }
@Override public DeadlineManager buildDeadlineManager(Configuration configuration) { return SimpleDeadlineManager.builder() .scopeAwareProvider(new ConfigurationScopeAwareProvider(configuration)) .build(); } }
/** * Initializes a {@link SimpleDeadlineManager} as specified through this Builder. * * @return a {@link SimpleDeadlineManager} as specified through this Builder */ public SimpleDeadlineManager build() { return new SimpleDeadlineManager(this); }
@Override public void cancelSchedule(String deadlineName, String scheduleId) { runOnPrepareCommitOrNow(() -> cancelSchedule(new DeadlineId(deadlineName, scheduleId))); }
@Override public void schedule(Duration triggerDuration, String deadlineName, Object messageOrPayload, ScopeDescriptor deadlineScope, String scheduleId) { runOnPrepareCommitOrNow(() -> { ScheduledFuture<?> scheduledFuture = scheduledExecutorService.schedule( new DeadlineTask(deadlineName, deadlineScope, messageOrPayload, scheduleId), triggerDuration.toMillis(), TimeUnit.MILLISECONDS ); scheduledTasks.put(new DeadlineId(deadlineName, scheduleId), scheduledFuture); }); }
/** * Provides the default {@link DeadlineManager} implementation. Subclasses may override this method to provide their * own default. * * @param config The configuration that supplies registered components. * @return The default DeadlineManager to use */ protected DeadlineManager defaultDeadlineManager(Configuration config) { return SimpleDeadlineManager.builder().scopeAwareProvider(new ConfigurationScopeAwareProvider(config)).build(); }
/** * Provides the default {@link DeadlineManager} implementation. Subclasses may override this method to provide their * own default. * * @param config The configuration that supplies registered components. * @return The default DeadlineManager to use */ protected DeadlineManager defaultDeadlineManager(Configuration config) { return new SimpleDeadlineManager(new ConfigurationScopeAwareProvider(config)); }