Package org.apache.geode
Class CancelCriterion
java.lang.Object
org.apache.geode.CancelCriterion
Abstract cancellation proxy for cancelling an operation, esp. a thread.
Creators of services or threads should implement a subclass of CancelCriterion, and implement the
two methods - cancelInProgress, and generateCancelledException(e).
Code inside the service can check to see if the service is cancelled by calling
checkCancelInProgress(Throwable). Generally the pattern is to check before performing an
operation, check if the service is canceled before propagating an exception further up the stack,
and check for cancellation inside a long loop. Eg.
while (true) {
c.checkCancelInProgress(null);
try {
dispatchEvents();
} catch (IOException e) {
c.checkCancelInProgress(e);
throw e;
}
}
- Since:
- GemFire 5.1
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract StringIndicate if the service is in the progress of being cancelled.voidvoidSee if the current operation is being cancelled.protected StringUse this utility function in your implementation of cancelInProgress() and cancelled() to indicate a system failureabstract RuntimeExceptiongenerateCancelledException(Throwable throwable) Template factory method for generating the exception to be thrown bycheckCancelInProgress(Throwable).booleanChecks to see if a cancellation is in progress.
-
Constructor Details
-
CancelCriterion
public CancelCriterion()
-
-
Method Details
-
cancelInProgress
Indicate if the service is in the progress of being cancelled. The typical use of this is to indicate, in the case of anInterruptedException, that the current operation should be cancelled.- Returns:
- null if the service is not shutting down, or a message that can be used to construct an exception indicating the service is shut down.
-
checkFailure
Use this utility function in your implementation of cancelInProgress() and cancelled() to indicate a system failure- Returns:
- failure string if system failure has occurred
-
checkCancelInProgress
See if the current operation is being cancelled. If so, it either throws aRuntimeException(usually aCancelException).- Parameters:
e- an underlying exception or null if there is no exception that triggered this check- See Also:
-
checkCancelInProgress
public void checkCancelInProgress() -
generateCancelledException
Template factory method for generating the exception to be thrown bycheckCancelInProgress(Throwable). Override this to specify different exception for checkCancelInProgress() to throw. This method should wrap the exception in a service specific CancelationException (eg CacheClosedException). or return null if the service is not being canceled.- Parameters:
throwable- an underlying exception, if any- Returns:
- RuntimeException to be thrown by checkCancelInProgress(), null if the receiver has not been cancelled.
-
isCancelInProgress
public boolean isCancelInProgress()Checks to see if a cancellation is in progress. This is equivalent to the expression (cancelInProgress() != null).- Returns:
- true if a cancellation is in progress, false if not
-