Search in sources :

Example 6 with RetryException

use of cn.taketoday.retry.RetryException in project today-infrastructure by TAKETODAY.

the class StatefulRecoveryRetryTests method testKeyGeneratorNotConsistentAfterFailure.

@Test
public void testKeyGeneratorNotConsistentAfterFailure() throws Throwable {
    RetryPolicy retryPolicy = new SimpleRetryPolicy(3);
    this.retryTemplate.setRetryPolicy(retryPolicy);
    final StringHolder item = new StringHolder("bar");
    RetryState state = new DefaultRetryState(item);
    RetryCallback<StringHolder, Exception> callback = new RetryCallback<StringHolder, Exception>() {

        @Override
        public StringHolder doWithRetry(RetryContext context) throws Exception {
            // This simulates what happens if someone uses a primary key
            // for hashCode and equals and then relies on default key
            // generator
            item.string = item.string + (StatefulRecoveryRetryTests.this.count++);
            throw new RuntimeException("Barf!");
        }
    };
    try {
        this.retryTemplate.execute(callback, state);
        fail("Expected RuntimeException");
    } catch (RuntimeException ex) {
        String message = ex.getMessage();
        assertEquals("Barf!", message);
    }
    // item already...
    try {
        this.retryTemplate.execute(callback, state);
        fail("Expected RetryException");
    } catch (RetryException ex) {
        String message = ex.getNestedMessage();
        assertTrue("Message doesn't contain 'inconsistent': " + message, message.contains("inconsistent"));
    }
    RetryContext context = this.retryTemplate.open(retryPolicy, state);
    // True after exhausted - the history is reset...
    assertEquals(0, context.getRetryCount());
}
Also used : RetryContext(cn.taketoday.retry.RetryContext) SimpleRetryPolicy(cn.taketoday.retry.policy.SimpleRetryPolicy) ExhaustedRetryException(cn.taketoday.retry.ExhaustedRetryException) RetryException(cn.taketoday.retry.RetryException) RetryPolicy(cn.taketoday.retry.RetryPolicy) NeverRetryPolicy(cn.taketoday.retry.policy.NeverRetryPolicy) SimpleRetryPolicy(cn.taketoday.retry.policy.SimpleRetryPolicy) DataAccessException(cn.taketoday.dao.DataAccessException) ExhaustedRetryException(cn.taketoday.retry.ExhaustedRetryException) RetryException(cn.taketoday.retry.RetryException) RetryState(cn.taketoday.retry.RetryState) RetryCallback(cn.taketoday.retry.RetryCallback) Test(org.junit.Test)

Aggregations

ExhaustedRetryException (cn.taketoday.retry.ExhaustedRetryException)6 RetryContext (cn.taketoday.retry.RetryContext)6 RetryException (cn.taketoday.retry.RetryException)6 DataAccessException (cn.taketoday.dao.DataAccessException)4 RetryCallback (cn.taketoday.retry.RetryCallback)4 RetryPolicy (cn.taketoday.retry.RetryPolicy)4 RetryState (cn.taketoday.retry.RetryState)4 NeverRetryPolicy (cn.taketoday.retry.policy.NeverRetryPolicy)4 SimpleRetryPolicy (cn.taketoday.retry.policy.SimpleRetryPolicy)4 Test (org.junit.Test)4 BinaryExceptionClassifier (cn.taketoday.classify.BinaryExceptionClassifier)2 RecoveryCallback (cn.taketoday.retry.RecoveryCallback)2 TerminatedRetryException (cn.taketoday.retry.TerminatedRetryException)2 MapRetryContextCache (cn.taketoday.retry.policy.MapRetryContextCache)2 ArrayList (java.util.ArrayList)2 Collections (java.util.Collections)2 List (java.util.List)2 Assert.assertEquals (org.junit.Assert.assertEquals)2 Assert.assertFalse (org.junit.Assert.assertFalse)2 Assert.assertNotNull (org.junit.Assert.assertNotNull)2