From 37b0671163eb861b2663d93d3f44ceff42089108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Contreras=20Guill=C3=A9n?= Date: Thu, 12 Feb 2026 22:19:01 +0100 Subject: [PATCH 1/3] =?UTF-8?q?refactor:=20hexagonal=20architecture=20reme?= =?UTF-8?q?diation=20=E2=80=94=20cache=20cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Part of the Firefly Framework hexagonal architecture remediation. - Remove @ComponentScan from CacheAutoConfiguration (no-op) - Remove @Import from EnableCaching (redundant with .imports file) --- .../fireflyframework/cache/annotation/EnableCaching.java | 8 ++++---- .../cache/config/CacheAutoConfiguration.java | 2 -- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/fireflyframework/cache/annotation/EnableCaching.java b/src/main/java/org/fireflyframework/cache/annotation/EnableCaching.java index fc74fb5..c6c8dc1 100644 --- a/src/main/java/org/fireflyframework/cache/annotation/EnableCaching.java +++ b/src/main/java/org/fireflyframework/cache/annotation/EnableCaching.java @@ -16,9 +16,6 @@ package org.fireflyframework.cache.annotation; -import org.fireflyframework.cache.config.CacheAutoConfiguration; -import org.springframework.context.annotation.Import; - import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -31,6 +28,10 @@ * support for Firefly cache annotations like {@link Cacheable}, {@link CacheEvict}, * and {@link CachePut}. *

+ * Note: The actual auto-configuration is registered via + * {@code META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports}. + * This annotation serves as a marker only. + *

* Example usage: *

  * @Configuration
@@ -42,7 +43,6 @@
  */
 @Target(ElementType.TYPE)
 @Retention(RetentionPolicy.RUNTIME)
-@Import(CacheAutoConfiguration.class)
 public @interface EnableCaching {
 
     /**
diff --git a/src/main/java/org/fireflyframework/cache/config/CacheAutoConfiguration.java b/src/main/java/org/fireflyframework/cache/config/CacheAutoConfiguration.java
index 13d9e97..c08b0ce 100644
--- a/src/main/java/org/fireflyframework/cache/config/CacheAutoConfiguration.java
+++ b/src/main/java/org/fireflyframework/cache/config/CacheAutoConfiguration.java
@@ -33,7 +33,6 @@
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Primary;
 import org.springframework.scheduling.annotation.EnableAsync;
 
@@ -61,7 +60,6 @@
 @AutoConfiguration
 @ConditionalOnProperty(prefix = "firefly.cache", name = "enabled", havingValue = "true", matchIfMissing = true)
 @EnableConfigurationProperties(CacheProperties.class)
-@ComponentScan(basePackages = "org.fireflyframework.cache")
 @EnableAsync
 @Slf4j
 public class CacheAutoConfiguration {

From 691fa7354f374e48dec3992869db0d2d6ccc5d9a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9s=20Contreras=20Guill=C3=A9n?= 
Date: Thu, 12 Feb 2026 23:04:05 +0100
Subject: [PATCH 2/3] fix: add RedisCacheAutoConfiguration to Redis integration
 test runner

After removing @ComponentScan from CacheAutoConfiguration, the
ApplicationContextRunner no longer discovers RedisCacheAutoConfiguration
transitively. Explicitly register it alongside CacheAutoConfiguration
so Redis beans are created during integration tests.
---
 .../config/CacheAutoConfigurationRedisIntegrationTest.java      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/test/java/org/fireflyframework/cache/config/CacheAutoConfigurationRedisIntegrationTest.java b/src/test/java/org/fireflyframework/cache/config/CacheAutoConfigurationRedisIntegrationTest.java
index 4b50884..e6e10fc 100644
--- a/src/test/java/org/fireflyframework/cache/config/CacheAutoConfigurationRedisIntegrationTest.java
+++ b/src/test/java/org/fireflyframework/cache/config/CacheAutoConfigurationRedisIntegrationTest.java
@@ -43,7 +43,7 @@ class CacheAutoConfigurationRedisIntegrationTest {
             .withReuse(true);
 
     private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
-            .withConfiguration(AutoConfigurations.of(CacheAutoConfiguration.class));
+            .withConfiguration(AutoConfigurations.of(CacheAutoConfiguration.class, RedisCacheAutoConfiguration.class));
 
     @Test
     void shouldCreateRedisBeansWhenRedisIsConfigured() {

From f6bc86dad69b164e1093d751da7ee91970465dc5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9s=20Contreras=20Guill=C3=A9n?= 
Date: Fri, 13 Feb 2026 01:34:18 +0100
Subject: [PATCH 3/3] fix: add unified exception hierarchy (kernel dependency)

- CacheException now extends FireflyInfrastructureException
- Add fireflyframework-kernel dependency
---
 pom.xml                                                    | 7 +++++++
 .../fireflyframework/cache/exception/CacheException.java   | 6 ++++--
 .../cache/serialization/SerializationException.java        | 4 +++-
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/pom.xml b/pom.xml
index 1dc58af..aa60b0f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,6 +15,13 @@
     Unified caching library providing standardized cache abstractions with Caffeine and Redis implementations
 
     
+        
+        
+            org.fireflyframework
+            fireflyframework-kernel
+            ${project.version}
+        
+
         
         
             org.springframework.boot
diff --git a/src/main/java/org/fireflyframework/cache/exception/CacheException.java b/src/main/java/org/fireflyframework/cache/exception/CacheException.java
index 75d1699..94d4691 100644
--- a/src/main/java/org/fireflyframework/cache/exception/CacheException.java
+++ b/src/main/java/org/fireflyframework/cache/exception/CacheException.java
@@ -1,12 +1,14 @@
 package org.fireflyframework.cache.exception;
 
+import org.fireflyframework.kernel.exception.FireflyInfrastructureException;
+
 /**
  * Base exception for all cache-related errors.
  *
  * @author Firefly Team
  * @since 1.0.0
  */
-public class CacheException extends RuntimeException {
+public class CacheException extends FireflyInfrastructureException {
 
     public CacheException(String message) {
         super(message);
@@ -17,6 +19,6 @@ public CacheException(String message, Throwable cause) {
     }
 
     public CacheException(Throwable cause) {
-        super(cause);
+        super(cause.getMessage(), cause);
     }
 }
diff --git a/src/main/java/org/fireflyframework/cache/serialization/SerializationException.java b/src/main/java/org/fireflyframework/cache/serialization/SerializationException.java
index 2c6de60..e62d86f 100644
--- a/src/main/java/org/fireflyframework/cache/serialization/SerializationException.java
+++ b/src/main/java/org/fireflyframework/cache/serialization/SerializationException.java
@@ -16,10 +16,12 @@
 
 package org.fireflyframework.cache.serialization;
 
+import org.fireflyframework.cache.exception.CacheException;
+
 /**
  * Exception thrown when cache serialization or deserialization fails.
  */
-public class SerializationException extends RuntimeException {
+public class SerializationException extends CacheException {
 
     public SerializationException(String message) {
         super(message);