Moved postage of messages into a reusable standalone implementation
[demos/kafka/outbox] / postage / src / main / java / de / juplo / kafka / outbox / postage / OutboxListener.java
diff --git a/postage/src/main/java/de/juplo/kafka/outbox/postage/OutboxListener.java b/postage/src/main/java/de/juplo/kafka/outbox/postage/OutboxListener.java
new file mode 100644 (file)
index 0000000..abb350a
--- /dev/null
@@ -0,0 +1,34 @@
+package de.juplo.kafka.outbox.postage;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.event.TransactionPhase;
+import org.springframework.transaction.event.TransactionalEventListener;
+
+
+@Component
+@AllArgsConstructor
+public class OutboxListener
+{
+  private final OutboxRepository repository;
+  private final ObjectMapper mapper;
+
+
+  @TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT)
+  public void onUserEvent(OutboxEvent event)
+  {
+    try
+    {
+      repository.save(
+          event.getKey(),
+          mapper.writeValueAsString(event.getValue()),
+          event.getTime());
+    }
+    catch (JsonProcessingException e)
+    {
+      throw new RuntimeException(e);
+    }
+  }
+}