Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,29 @@
package org.fireflyframework.eventsourcing.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.micrometer.core.instrument.MeterRegistry;
import org.fireflyframework.eda.publisher.EventPublisherFactory;
import org.fireflyframework.eventsourcing.monitoring.EventStoreMetrics;
import org.fireflyframework.eventsourcing.outbox.EventOutboxProcessor;
import org.fireflyframework.eventsourcing.outbox.EventOutboxRepository;
import org.fireflyframework.eventsourcing.outbox.EventOutboxService;
import org.fireflyframework.eventsourcing.publisher.EventSourcingPublisher;
import org.fireflyframework.eventsourcing.transaction.EventSourcingTransactionalAspect;
import org.fireflyframework.eventsourcing.upcasting.EventUpcaster;
import org.fireflyframework.eventsourcing.upcasting.EventUpcastingService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.Import;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.ReactiveTransactionManager;

import java.util.List;

/**
* Auto-configuration for the Event Sourcing library.
Expand Down Expand Up @@ -59,23 +68,8 @@
@AutoConfiguration
@ConditionalOnProperty(prefix = "firefly.eventsourcing", name = "enabled", havingValue = "true", matchIfMissing = true)
@EnableConfigurationProperties(EventSourcingProperties.class)
@ComponentScan(
basePackages = "org.fireflyframework.eventsourcing",
excludeFilters = @ComponentScan.Filter(
type = FilterType.REGEX,
pattern = "com\\.firefly\\.common\\.eventsourcing\\.examples\\..*"
)
)
@EnableAsync
@EnableScheduling
@Import({
EventStoreAutoConfiguration.class,
SnapshotAutoConfiguration.class,
EventSourcingHealthConfiguration.class,
EventSourcingMetricsConfiguration.class,
org.fireflyframework.core.config.R2dbcConfig.class,
org.fireflyframework.core.config.R2dbcTransactionConfig.class
})
@Slf4j
public class EventSourcingAutoConfiguration {

Expand Down Expand Up @@ -111,4 +105,76 @@ public ObjectMapper eventSourcingObjectMapper() {
mapper.findAndRegisterModules();
return mapper;
}

/**
* Creates the EventStoreMetrics bean for monitoring event store operations.
*/
@Bean
@ConditionalOnMissingBean
public EventStoreMetrics eventStoreMetrics(MeterRegistry meterRegistry) {
log.debug("Creating EventStoreMetrics bean");
return new EventStoreMetrics(meterRegistry);
}

/**
* Creates the EventTypeRegistry bean for automatic event type discovery and registration.
*/
@Bean
@ConditionalOnMissingBean
public EventTypeRegistry eventTypeRegistry(ApplicationContext applicationContext, ObjectMapper objectMapper) {
log.debug("Creating EventTypeRegistry bean");
return new EventTypeRegistry(applicationContext, objectMapper);
}

/**
* Creates the EventSourcingTransactionalAspect bean for transactional event sourcing operations.
*/
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(ReactiveTransactionManager.class)
public EventSourcingTransactionalAspect eventSourcingTransactionalAspect(
ReactiveTransactionManager transactionManager,
EventSourcingPublisher eventPublisher) {
log.debug("Creating EventSourcingTransactionalAspect bean");
return new EventSourcingTransactionalAspect(transactionManager, eventPublisher);
}

/**
* Creates the EventUpcastingService bean for managing event upcasting.
*/
@Bean
@ConditionalOnMissingBean
public EventUpcastingService eventUpcastingService(List<EventUpcaster> upcasters) {
log.debug("Creating EventUpcastingService bean");
return new EventUpcastingService(upcasters);
}

/**
* Creates the EventOutboxService bean for managing Event Outbox operations.
*/
@Bean
@ConditionalOnMissingBean
public EventOutboxService eventOutboxService(
EventOutboxRepository outboxRepository,
EventSourcingPublisher eventPublisher,
ObjectMapper objectMapper) {
log.debug("Creating EventOutboxService bean");
return new EventOutboxService(outboxRepository, eventPublisher, objectMapper);
}

/**
* Creates the EventOutboxProcessor bean for background processing of outbox entries.
*/
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(
prefix = "eventsourcing.outbox.processor",
name = "enabled",
havingValue = "true",
matchIfMissing = false
)
public EventOutboxProcessor eventOutboxProcessor(EventOutboxService outboxService) {
log.debug("Creating EventOutboxProcessor bean");
return new EventOutboxProcessor(outboxService);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationContext;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.Set;
Expand All @@ -47,7 +46,6 @@
* <p>
* The event will be automatically discovered and registered when the application starts.
*/
@Component
@RequiredArgsConstructor
@Slf4j
public class EventTypeRegistry {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@
import lombok.extern.slf4j.Slf4j;
import org.fireflyframework.observability.metrics.FireflyMetricsSupport;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;

import java.time.Duration;
import java.time.Instant;
import java.util.concurrent.atomic.AtomicLong;
Expand All @@ -42,7 +40,6 @@
* - firefly.eventsourcing.connection.pool.active (Gauge)
* - firefly.eventsourcing.batch.size (DistributionSummary)
*/
@Component
@Slf4j
public class EventStoreMetrics extends FireflyMetricsSupport {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,7 @@
import org.fireflyframework.eventsourcing.logging.EventSourcingLoggingContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
* Background processor for Event Outbox entries.
Expand Down Expand Up @@ -50,13 +48,6 @@
* - Quartz for more advanced scheduling
* - Dedicated outbox processor service
*/
@Component
@ConditionalOnProperty(
prefix = "eventsourcing.outbox.processor",
name = "enabled",
havingValue = "true",
matchIfMissing = false
)
@RequiredArgsConstructor
@Slf4j
public class EventOutboxProcessor {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

Expand All @@ -53,7 +52,6 @@
* 3. Retries failed publications with exponential backoff
* 4. Marks entries as completed after successful publication
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class EventOutboxService {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,7 @@
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.ReactiveTransactionManager;
import org.springframework.transaction.reactive.TransactionalOperator;
import org.springframework.transaction.support.DefaultTransactionDefinition;
Expand Down Expand Up @@ -141,8 +139,6 @@
* @see org.springframework.transaction.ReactiveTransactionManager
*/
@Aspect
@Component
@ConditionalOnBean(ReactiveTransactionManager.class)
public class EventSourcingTransactionalAspect {

private static final Logger log = LoggerFactory.getLogger(EventSourcingTransactionalAspect.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

import org.fireflyframework.eventsourcing.domain.Event;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Comparator;
import java.util.List;
Expand All @@ -28,7 +27,6 @@
* Service for managing event upcasting.
* Automatically applies registered upcasters to events when loading from the event store.
*/
@Service
@Slf4j
public class EventUpcastingService {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
org.fireflyframework.eventsourcing.config.R2dbcBeansAutoConfiguration
org.fireflyframework.eventsourcing.config.EventStoreAutoConfiguration
org.fireflyframework.eventsourcing.config.SnapshotAutoConfiguration
org.fireflyframework.eventsourcing.config.EventSourcingAutoConfiguration
org.fireflyframework.eventsourcing.config.EventSourcingProjectionAutoConfiguration
org.fireflyframework.eventsourcing.config.EventSourcingHealthConfiguration
org.fireflyframework.eventsourcing.config.EventSourcingMetricsConfiguration
org.fireflyframework.eventsourcing.resilience.CircuitBreakerConfiguration
org.fireflyframework.eventsourcing.tracing.OpenTelemetryConfiguration
org.fireflyframework.eventsourcing.multitenancy.MultiTenancyConfiguration