![JAR search and dependency download from the Maven repository](/logo.png)
org.codegas.commons.domain.event.DomainEventPublisher Maven / Gradle / Ivy
package org.codegas.commons.domain.event;
import java.util.ArrayList;
import java.util.List;
public class DomainEventPublisher {
private static final ThreadLocal LOCAL_PUBLISHER = ThreadLocal.withInitial(DomainEventPublisher::new);
private final List subscribers = new ArrayList<>();
private boolean publishing;
private DomainEventPublisher() {
}
public static DomainEventPublisher instance() {
return LOCAL_PUBLISHER.get();
}
public void reset() {
if (!publishing) {
subscribers.clear();
}
}
public void subscribe(DomainEventSubscriber subscriber) {
if (!publishing) {
subscribers.add(subscriber);
}
}
public void publish(T domainEvent) {
if (!publishing && !subscribers.isEmpty()) {
try {
publishing = true;
for (DomainEventSubscriber subscriber : subscribers) {
Class> subscribedEventType = subscriber.getSubscribedEventType();
if (subscribedEventType.isAssignableFrom(domainEvent.getClass())) {
subscriber.handleEvent(domainEvent);
}
}
} finally {
publishing = false;
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy