StoreEventObserver.java
package com.fulfilment.application.monolith.stores;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;
import jakarta.enterprise.event.TransactionPhase;
import jakarta.inject.Inject;
import org.jboss.logging.Logger;
@ApplicationScoped
public class StoreEventObserver {
private static final Logger LOGGER = Logger.getLogger(StoreEventObserver.class.getName());
@Inject LegacyStoreManagerGateway legacyStoreManagerGateway;
public void onStoreChanged(@Observes(during = TransactionPhase.AFTER_SUCCESS) StoreChangedEvent event) {
try {
switch (event.type()) {
case CREATED -> legacyStoreManagerGateway.createStoreOnLegacySystem(event.store());
case UPDATED -> legacyStoreManagerGateway.updateStoreOnLegacySystem(event.store());
case DELETED -> LOGGER.infof("Store '%s' deleted — no legacy notification required", event.store().name);
}
} catch (Exception e) {
// Log but do not rethrow — transaction is already committed at this point
LOGGER.errorf("Failed to notify legacy system after store %s: %s", event.type(), e.getMessage());
}
}
}