How sartrebrasil/idempotency4j works
idempotency4j is a Java engine and set of adapters for running keyed work once and replaying its stored outcome to duplicates. The core manages acquisition, leases, execution, completion and replay; Spring method interception and a Servlet filter provide entry points, while JDBC, Redis and in-memory providers implement persistence. The README documents the main capabilities; sampled source confirms core/store and method-interceptor relationships. Several adapter and starter internals were not sampled, so their detailed wiring is not asserted.
Main entry points: IdempotencyEngine.java Execution engine · IdempotencyStore.java Store SPI · IdempotentMethodInterceptor.java Method interceptor · IdempotencyFilter.java Servlet filter
Components 15
Spring entry points
- @Idempotent methods
spring/idempotency-spring/src/main/java/io/github/josipmusa/idempotency/spring/Idempotent.java - Method interceptor
spring/idempotency-spring/src/main/java/io/github/josipmusa/idempotency/spring/IdempotentMethodInterceptor.java - Servlet filter
spring/idempotency-spring-web/src/main/java/io/github/josipmusa/idempotency/spring/web/IdempotencyFilter.java - Response replay
spring/idempotency-spring-web/src/main/java/io/github/josipmusa/idempotency/spring/web/StoredResponseCodec.java
Idempotency engine
- Identity and context
idempotency-core/src/main/java/io/github/josipmusa/idempotency/core/IdempotencyContext.java - Execution engine
idempotency-core/src/main/java/io/github/josipmusa/idempotency/core/IdempotencyEngine.java - Payload codec SPI
idempotency-core/src/main/java/io/github/josipmusa/idempotency/core/PayloadCodec.java - Store SPI
idempotency-core/src/main/java/io/github/josipmusa/idempotency/core/IdempotencyStore.java
Storage providers
- In-memory store
providers/idempotency-inmemory/src/main/java/io/github/josipmusa/idempotency/inmemory/InMemoryIdempotencyStore.java - JDBC store
providers/idempotency-jdbc/src/main/java/io/github/josipmusa/idempotency/jdbc/JdbcIdempotencyStore.java - Redis store
providers/idempotency-redis/src/main/java/io/github/josipmusa/idempotency/redis/RedisIdempotencyStore.java
Boot integration
- Boot auto-configuration
spring/idempotency-spring-boot-starter/src/main/java/io/github/josipmusa/idempotency/springboot/IdempotencyAutoConfiguration.java - Store configuration
spring/idempotency-spring-boot-starter/src/main/java/io/github/josipmusa/idempotency/springboot/IdempotencyStoreAutoConfiguration.java - Transaction integration
spring/idempotency-spring/src/main/java/io/github/josipmusa/idempotency/spring/SpringTransactionParticipation.java
Other components
- Application caller
Connections 15
- Application caller → @Idempotent methods: annotates work
README.md - @Idempotent methods → Method interceptor: intercepted by
spring/idempotency-spring/src/main/java/io/github/josipmusa/idempotency/spring/IdempotentMethodInterceptor.java - Method interceptor → Execution engine: executes through
spring/idempotency-spring/src/main/java/io/github/josipmusa/idempotency/spring/IdempotentMethodInterceptor.java - Application caller → Servlet filter: sends keyed request
README.md - Servlet filter → Execution engine: uses engine
README.md - Servlet filter → Response replay: replays response
- Method interceptor → Identity and context: builds context
spring/idempotency-spring/src/main/java/io/github/josipmusa/idempotency/spring/IdempotentMethodInterceptor.java - Execution engine → Store SPI: acquires and completes
idempotency-core/src/main/java/io/github/josipmusa/idempotency/core/IdempotencyEngine.java - Execution engine → Payload codec SPI: encodes outcomes
idempotency-core/src/main/java/io/github/josipmusa/idempotency/core/IdempotencyEngine.java - Store SPI → In-memory store: implemented by
README.md - Store SPI → JDBC store: implemented by
README.md - Store SPI → Redis store: implemented by
README.md - Boot auto-configuration → Store configuration: configures stores
spring/idempotency-spring-boot-starter/src/main/java/io/github/josipmusa/idempotency/springboot/IdempotencyAutoConfiguration.java - Store configuration → JDBC store: wires when available
README.md - Execution engine → Transaction integration: supports completion mode