/* * Copyright 2011-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package pl.com.bottega.ecommerce.system.infrastructure.events; import java.io.Serializable; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import pl.com.bottega.ddd.support.domain.DomainEventPublisher; import pl.com.bottega.ecommerce.system.infrastructure.events.impl.handlers.EventHandler; @Component public class SimpleEventPublisher implements DomainEventPublisher { private static final Logger LOGGER = LoggerFactory.getLogger(SimpleEventPublisher.class); private Set<EventHandler> eventHandlers = new HashSet<EventHandler>(); public void registerEventHandler(EventHandler handler) { eventHandlers.add(handler); // new SpringEventHandler(eventType, beanName, method)); } @Override public void publish(Serializable event) { doPublish(event); } protected void doPublish(Object event) { for (EventHandler handler : new ArrayList<EventHandler>(eventHandlers)) { if (handler.canHandle(event)) { try { handler.handle(event); } catch (Exception e) { LOGGER.error("event handling error", e); } } } } }