Skip to content

Releases: ravocode/AvoOnce

v1.0.0-alpha.3.0

v1.0.0-alpha.3.0 Pre-release
Pre-release

Choose a tag to compare

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 jedis and lettuce-core are 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 a JedisPool or a RedisClient bean, it will auto-wire the correct idempotency repository seamlessly.

Stability & Bug Fixes

  • Auto-Configuration Hardening: Fixed a Spring reflection NoClassDefFoundError bug 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

v1.0.0-alpha.2.1 Pre-release
Pre-release

Choose a tag to compare

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.md files to reference version 1.0.0-alpha.2.1.
    • Updated the state machine documentation and diagram in idempotency-core/README.md to align with the exact Java enum definitions (STARTED, COMPLETED, FAILED).

v1.0.0-alpha.2

v1.0.0-alpha.2 Pre-release
Pre-release

Choose a tag to compare

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-jdbc for 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 the avoonce.idempotency.store property.
  • Namespace Migration: Rebranded the group ID and all package structures to io.github.ravocode.avoonce following the organization migration.
  • Observability & Standards: Integrated framework-agnostic logging via SLF4J and enforced strict variable immutability across core modules.
  • Build Robustness: Configured maven-enforcer-plugin globally 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 Pre-release
Pre-release

Choose a tag to compare

@raghavocode raghavocode released this 24 Jun 18:33

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-Key state 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-Key HTTP 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-core
  • io.github.raghavocode.avoonce:idempotency-caffeine
  • io.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).