Skip to content

Commit 16b4b5f

Browse files
committed
Extract outbox event externalizer into common type.
This avoids a dependency on the …-events-namastack artifact from externalizer implementation artifacts.
1 parent 879fe66 commit 16b4b5f

9 files changed

Lines changed: 48 additions & 26 deletions

File tree

spring-modulith-events/spring-modulith-events-amqp/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@
3535
</dependency>
3636

3737
<dependency>
38-
<groupId>org.springframework.modulith</groupId>
39-
<artifactId>spring-modulith-events-namastack</artifactId>
40-
<version>${project.version}</version>
38+
<groupId>io.namastack</groupId>
39+
<artifactId>namastack-outbox-api</artifactId>
40+
<version>${namastack-outbox.version}</version>
4141
<optional>true</optional>
4242
</dependency>
4343

spring-modulith-events/spring-modulith-events-amqp/src/main/java/org/springframework/modulith/events/amqp/RabbitEventExternalizerConfiguration.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@
3636
import org.springframework.modulith.events.ExternalizationMode;
3737
import org.springframework.modulith.events.RoutingTarget;
3838
import org.springframework.modulith.events.config.EventExternalizationAutoConfiguration;
39-
import org.springframework.modulith.events.namastack.NamastackOutboxEventTransport;
4039
import org.springframework.modulith.events.support.BrokerRouting;
4140
import org.springframework.modulith.events.support.DelegatingEventExternalizer;
41+
import org.springframework.modulith.events.support.OutboxEventExternalizer;
4242

4343
/**
4444
* Auto-configuration to set up a {@link DelegatingEventExternalizer} to externalize events to RabbitMQ.
@@ -78,8 +78,10 @@ OutboxHandler rabbitOutboxExternalizer(EventExternalizationConfiguration configu
7878

7979
logger.debug("Registering domain event outbox externalization to RabbitMQ…");
8080

81-
return new NamastackOutboxEventTransport(configuration,
81+
var externalizer = new OutboxEventExternalizer(configuration,
8282
createRabbitTransport(configuration, operations, factory));
83+
84+
return (payload, metadata) -> externalizer.handle(payload);
8385
}
8486
}
8587

spring-modulith-events/spring-modulith-events-namastack/src/main/java/org/springframework/modulith/events/namastack/NamastackOutboxEventTransport.java renamed to spring-modulith-events/spring-modulith-events-core/src/main/java/org/springframework/modulith/events/support/OutboxEventExternalizer.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,15 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package org.springframework.modulith.events.namastack;
17-
18-
import io.namastack.outbox.handler.OutboxHandler;
19-
import io.namastack.outbox.handler.OutboxRecordMetadata;
16+
package org.springframework.modulith.events.support;
2017

2118
import java.util.concurrent.CompletableFuture;
2219
import java.util.concurrent.ExecutionException;
2320
import java.util.function.BiFunction;
2421

2522
import org.jspecify.annotations.Nullable;
23+
import org.slf4j.Logger;
24+
import org.slf4j.LoggerFactory;
2625
import org.springframework.context.ApplicationEventPublisher;
2726
import org.springframework.context.ApplicationEventPublisherAware;
2827
import org.springframework.modulith.events.EventExternalizationConfiguration;
@@ -38,11 +37,13 @@
3837
* email, SMS).
3938
*
4039
* @author Roland Beisel
40+
* @author Oliver Drotbohm
4141
* @since 2.1
42-
* @see OutboxHandler
4342
* @see EventExternalizationConfiguration
4443
*/
45-
public class NamastackOutboxEventTransport implements OutboxHandler, ApplicationEventPublisherAware {
44+
public class OutboxEventExternalizer implements ApplicationEventPublisherAware {
45+
46+
private static final Logger logger = LoggerFactory.getLogger(OutboxEventExternalizer.class);
4647

4748
private final EventExternalizationConfiguration configuration;
4849
private final BiFunction<RoutingTarget, Object, CompletableFuture<?>> transport;
@@ -55,7 +56,7 @@ public class NamastackOutboxEventTransport implements OutboxHandler, Application
5556
* @param configuration must not be {@literal null}.
5657
* @param transport must not be {@literal null}.
5758
*/
58-
public NamastackOutboxEventTransport(EventExternalizationConfiguration configuration,
59+
public OutboxEventExternalizer(EventExternalizationConfiguration configuration,
5960
BiFunction<RoutingTarget, Object, CompletableFuture<?>> transport) {
6061

6162
Assert.notNull(configuration, "EventExternalizationConfiguration must not be null!");
@@ -81,12 +82,17 @@ public void setApplicationEventPublisher(ApplicationEventPublisher applicationEv
8182
* @param event the event payload to transport
8283
* @param metadata the outbox record metadata
8384
*/
84-
@Override
85-
public void handle(Object event, OutboxRecordMetadata metadata) {
85+
public void handle(Object event) {
8686

8787
var target = configuration.determineTarget(event);
8888
var mapped = configuration.map(event);
8989

90+
if (logger.isTraceEnabled()) {
91+
logger.trace("Externalizing event of type {} to {}, payload: {}).", event.getClass(), target, mapped);
92+
} else if (logger.isDebugEnabled()) {
93+
logger.debug("Externalizing event of type {} to {}.", event.getClass(), target);
94+
}
95+
9096
try {
9197

9298
var result = transport.apply(target, event).get();

spring-modulith-events/spring-modulith-events-jms/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@
3434
<version>${project.version}</version>
3535
</dependency>
3636

37+
<dependency>
38+
<groupId>io.namastack</groupId>
39+
<artifactId>namastack-outbox-api</artifactId>
40+
<version>${namastack-outbox.version}</version>
41+
<optional>true</optional>
42+
</dependency>
43+
3744
<dependency>
3845
<groupId>org.springframework.modulith</groupId>
3946
<artifactId>spring-modulith-events-namastack</artifactId>

spring-modulith-events/spring-modulith-events-jms/src/main/java/org/springframework/modulith/events/jms/JmsEventExternalizerConfiguration.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@
3636
import org.springframework.modulith.events.RoutingTarget;
3737
import org.springframework.modulith.events.config.EventExternalizationAutoConfiguration;
3838
import org.springframework.modulith.events.core.EventSerializer;
39-
import org.springframework.modulith.events.namastack.NamastackOutboxEventTransport;
4039
import org.springframework.modulith.events.support.BrokerRouting;
4140
import org.springframework.modulith.events.support.DelegatingEventExternalizer;
41+
import org.springframework.modulith.events.support.OutboxEventExternalizer;
4242

4343
/**
4444
* Auto-configuration to set up a {@link DelegatingEventExternalizer} to externalize events to JMS.
@@ -78,7 +78,10 @@ OutboxHandler jmsOutboxExternalizer(EventExternalizationConfiguration configurat
7878

7979
logger.debug("Registering domain event outbox externalization to JMS…");
8080

81-
return new NamastackOutboxEventTransport(configuration, createJmsTransport(operations, serializer, factory));
81+
var externalizer = new OutboxEventExternalizer(configuration,
82+
createJmsTransport(operations, serializer, factory));
83+
84+
return (event, metadata) -> externalizer.handle(event);
8285
}
8386
}
8487

spring-modulith-events/spring-modulith-events-kafka/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@
3535
</dependency>
3636

3737
<dependency>
38-
<groupId>org.springframework.modulith</groupId>
39-
<artifactId>spring-modulith-events-namastack</artifactId>
40-
<version>${project.version}</version>
38+
<groupId>io.namastack</groupId>
39+
<artifactId>namastack-outbox-api</artifactId>
40+
<version>${namastack-outbox.version}</version>
4141
<optional>true</optional>
4242
</dependency>
4343

spring-modulith-events/spring-modulith-events-kafka/src/main/java/org/springframework/modulith/events/kafka/KafkaEventExternalizerConfiguration.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@
4040
import org.springframework.modulith.events.ExternalizationMode;
4141
import org.springframework.modulith.events.RoutingTarget;
4242
import org.springframework.modulith.events.config.EventExternalizationAutoConfiguration;
43-
import org.springframework.modulith.events.namastack.NamastackOutboxEventTransport;
4443
import org.springframework.modulith.events.support.BrokerRouting;
4544
import org.springframework.modulith.events.support.DelegatingEventExternalizer;
45+
import org.springframework.modulith.events.support.OutboxEventExternalizer;
4646

4747
/**
4848
* Auto-configuration to set up a {@link DelegatingEventExternalizer} to externalize events to Kafka.
@@ -83,8 +83,10 @@ OutboxHandler kafkaOutboxExternalizer(EventExternalizationConfiguration configur
8383

8484
logger.debug("Registering domain event outbox externalization to Kafka…");
8585

86-
return new NamastackOutboxEventTransport(configuration,
86+
var externalizer = new OutboxEventExternalizer(configuration,
8787
createKafkaTransport(configuration, operations, factory));
88+
89+
return (payload, metadata) -> externalizer.handle(payload);
8890
}
8991
}
9092

spring-modulith-events/spring-modulith-events-messaging/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@
3535
</dependency>
3636

3737
<dependency>
38-
<groupId>org.springframework.modulith</groupId>
39-
<artifactId>spring-modulith-events-namastack</artifactId>
40-
<version>${project.version}</version>
38+
<groupId>io.namastack</groupId>
39+
<artifactId>namastack-outbox-api</artifactId>
40+
<version>${namastack-outbox.version}</version>
4141
<optional>true</optional>
4242
</dependency>
4343

spring-modulith-events/spring-modulith-events-messaging/src/main/java/org/springframework/modulith/events/messaging/SpringMessagingEventExternalizerConfiguration.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@
3636
import org.springframework.modulith.events.ExternalizationMode;
3737
import org.springframework.modulith.events.RoutingTarget;
3838
import org.springframework.modulith.events.config.EventExternalizationAutoConfiguration;
39-
import org.springframework.modulith.events.namastack.NamastackOutboxEventTransport;
4039
import org.springframework.modulith.events.support.BrokerRouting;
4140
import org.springframework.modulith.events.support.DelegatingEventExternalizer;
41+
import org.springframework.modulith.events.support.OutboxEventExternalizer;
4242

4343
/**
4444
* Auto-configuration to set up a {@link DelegatingEventExternalizer} to externalize events to a Spring Messaging
@@ -80,8 +80,10 @@ OutboxHandler springMessagingOutboxExternalizer(EventExternalizationConfiguratio
8080

8181
logger.debug("Registering domain event outbox externalization for Spring Messaging…");
8282

83-
return new NamastackOutboxEventTransport(configuration,
83+
var externalizer = new OutboxEventExternalizer(configuration,
8484
createMessagingTransport(configuration, factory));
85+
86+
return (payload, metadata) -> externalizer.handle(payload);
8587
}
8688
}
8789

0 commit comments

Comments
 (0)