Releases: ravocode/AvoOnce
Release list
v1.0.0-alpha.3.0
Full Changelog: v1.0.0-alpha.2.1...v1.0.0-alpha-3.0
Thrilled to announce AvoOnce 1.0.0-alpha.3.0, a major feature release that brings true flexibility to distributed idempotency!
What's New
Client-Agnostic Redis Support
The idempotency-redis module has been completely refactored. We've removed the hard dependency on Jedis and introduced an Adapter Pattern via the new RedisOperations SPI.
- Bring Your Own Client: You can now use AvoOnce with either Jedis or Lettuce.
- Zero-Bloat Classpath: Both
jedisandlettuce-coreare now marked as optional dependencies. You only load the classes you actually use. - Intelligent Auto-Configuration: If you're using
idempotency-spring-boot-starter, it will automatically scan your Spring context. If it finds aJedisPoolor aRedisClientbean, it will auto-wire the correct idempotency repository seamlessly.
Stability & Bug Fixes
- Auto-Configuration Hardening: Fixed a Spring reflection
NoClassDefFoundErrorbug that could prevent application startup when optional storage dependencies (like Redis or Caffeine) were omitted from the user's classpath. All repository auto-configurations are now safely nested with@ConditionalOnClass. - Robust Acceptance Testing: Added comprehensive Testcontainers-backed integration tests for the Redis implementation, ensuring distributed locks and payload hashing work perfectly in multi-instance simulations.
v1.0.0-alpha.2.1
AvoOnce v1.0.0-alpha.2.1 Release Notes
This patch release improves classpath health, refactors dependency declarations for better maintainability, and corrects documentation inconsistencies.
🛠️ Improvements & Changes
- Centralized Dependency Management: Moved all AvoOnce internal module dependencies and the H2 database driver to the parent POM's
<dependencyManagement>. Sub-modules now inherit these versions automatically, eliminating hardcoded version strings inside individual POMs. - Documentation Synchronization:
- Updated dependency code snippets across all module
README.mdfiles to reference version1.0.0-alpha.2.1. - Updated the state machine documentation and diagram in
idempotency-core/README.mdto align with the exact Java enum definitions (STARTED,COMPLETED,FAILED).
- Updated dependency code snippets across all module
v1.0.0-alpha.2
AvoOnce v1.0.0-alpha.2 Release Notes
This release focuses on adding the new JDBC storage backend, transitioning to our new package identity, introducing centralized dependency management, and improving overall library robustness.
🚀 Key Features & Changes
- JDBC Storage Backend: Introduced
idempotency-jdbcfor distributed storage of idempotency records. - Storage Backend Selection: Added support in the Spring Boot starter to explicitly toggle between Caffeine (
caffeine) and JDBC (jdbc) backends via theavoonce.idempotency.storeproperty. - Namespace Migration: Rebranded the group ID and all package structures to
io.github.ravocode.avooncefollowing the organization migration. - Observability & Standards: Integrated framework-agnostic logging via SLF4J and enforced strict variable immutability across core modules.
- Build Robustness: Configured
maven-enforcer-pluginglobally to validate dependency convergence and prevent duplicate class definitions on the classpath.
🐛 Bug Fixes
- Auto-Configuration Fix: Fixed a bug where JDBC schema initialization and eviction tasks would start even when the Caffeine storage backend was active.
v1.0.0-alpha.1
v1.0.0-alpha.1
Here's the initial alpha release of AvoOnce, a robust, framework-agnostic distributed idempotency starter!
This initial pre-release focuses on bringing seamless, zero-code exactly-once processing to Spring Boot applications using an in-memory storage strategy.
🚀 Key Features in this Release
- Zero-Code Integration: A fully automated Servlet Filter for Spring Web MVC that intercepts requests and enforces the
Idempotency-Keystate machine without altering business logic. - Safe-by-default In-Memory Storage: Full integration with Caffeine caching (
idempotency-caffeine) for rapid, single-node idempotency. - Standards Compliant: Deep alignment with the IETF
Idempotency-KeyHTTP header draft specification. - Payload Hashing: Automatic request body hashing (SHA-256) to detect and reject clients attempting to reuse an idempotency key with a mutated payload.
📦 Artifacts Published
io.github.raghavocode.avoonce:idempotency-coreio.github.raghavocode.avoonce:idempotency-caffeineio.github.raghavocode.avoonce:idempotency-spring-boot-starter
(Note: Distributed Redis, JDBC, and JAX-RS modules are currently in active development and will be available in a future release).