Moved postage of messages into a reusable standalone implementation
[demos/kafka/outbox] / postage / src / main / java / de / juplo / kafka / outbox / postage / OutboxListener.java
1 package de.juplo.kafka.outbox.postage;
2
3 import com.fasterxml.jackson.core.JsonProcessingException;
4 import com.fasterxml.jackson.databind.ObjectMapper;
5 import lombok.AllArgsConstructor;
6 import org.springframework.stereotype.Component;
7 import org.springframework.transaction.event.TransactionPhase;
8 import org.springframework.transaction.event.TransactionalEventListener;
9
10
11 @Component
12 @AllArgsConstructor
13 public class OutboxListener
14 {
15   private final OutboxRepository repository;
16   private final ObjectMapper mapper;
17
18
19   @TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT)
20   public void onUserEvent(OutboxEvent event)
21   {
22     try
23     {
24       repository.save(
25           event.getKey(),
26           mapper.writeValueAsString(event.getValue()),
27           event.getTime());
28     }
29     catch (JsonProcessingException e)
30     {
31       throw new RuntimeException(e);
32     }
33   }
34 }