54 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			54 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | @startuml | ||
|  | package com.iluwatar.retry { | ||
|  |   class App { | ||
|  |     - LOG : Logger {static} | ||
|  |     - op : BusinessOperation<String> {static} | ||
|  |     + App() | ||
|  |     - errorNoRetry() {static} | ||
|  |     - errorWithRetry() {static} | ||
|  |     - errorWithRetryExponentialBackoff() {static} | ||
|  |     + main(args : String[]) {static} | ||
|  |     - noErrors() {static} | ||
|  |   } | ||
|  |   interface BusinessOperation<T> { | ||
|  |     + perform() : T {abstract} | ||
|  |   } | ||
|  |   class FindCustomer { | ||
|  |     - customerId : String | ||
|  |     - errors : Deque<BusinessException> | ||
|  |     + FindCustomer(customerId : String, errors : BusinessException[]) | ||
|  |     + perform() : String | ||
|  |   } | ||
|  |   class Retry<T> { | ||
|  |     - attempts : AtomicInteger | ||
|  |     - delay : long | ||
|  |     - errors : List<Exception> | ||
|  |     - maxAttempts : int | ||
|  |     - op : BusinessOperation<T> | ||
|  |     - test : Predicate<Exception> | ||
|  |     + Retry<T>(op : BusinessOperation<T>, maxAttempts : int, delay : long, ignoreTests : Predicate<Exception>[]) | ||
|  |     + attempts() : int | ||
|  |     + errors() : List<Exception> | ||
|  |     + perform() : T | ||
|  |   } | ||
|  |   class RetryExponentialBackoff<T> { | ||
|  |     - RANDOM : Random {static} | ||
|  |     - attempts : AtomicInteger | ||
|  |     - errors : List<Exception> | ||
|  |     - maxAttempts : int | ||
|  |     - maxDelay : long | ||
|  |     - op : BusinessOperation<T> | ||
|  |     - test : Predicate<Exception> | ||
|  |     + RetryExponentialBackoff<T>(op : BusinessOperation<T>, maxAttempts : int, maxDelay : long, ignoreTests : Predicate<Exception>[]) | ||
|  |     + attempts() : int | ||
|  |     + errors() : List<Exception> | ||
|  |     + perform() : T | ||
|  |   } | ||
|  | } | ||
|  | RetryExponentialBackoff -->  "-op" BusinessOperation | ||
|  | Retry -->  "-op" BusinessOperation | ||
|  | App -->  "-op" BusinessOperation | ||
|  | FindCustomer ..|> BusinessOperation  | ||
|  | Retry ..|> BusinessOperation  | ||
|  | RetryExponentialBackoff ..|> BusinessOperation  | ||
|  | @enduml |