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 |