/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.module.deployment.internal; import org.mule.runtime.api.config.custom.CustomizationService; import org.mule.runtime.core.api.MuleContext; import org.mule.runtime.module.deployment.api.DeploymentListener; import org.mule.runtime.module.deployment.api.DeploymentListenerManager; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CompositeDeploymentListener implements DeploymentListener, DeploymentListenerManager { private transient final Logger logger = LoggerFactory.getLogger(getClass()); private List<DeploymentListener> deploymentListeners = new CopyOnWriteArrayList<DeploymentListener>(); @Override public void addDeploymentListener(DeploymentListener listener) { this.deploymentListeners.add(listener); } @Override public void removeDeploymentListener(DeploymentListener listener) { this.deploymentListeners.remove(listener); } @Override public void onDeploymentStart(String artifactName) { for (DeploymentListener listener : deploymentListeners) { try { listener.onDeploymentStart(artifactName); } catch (Throwable t) { logNotificationProcessingError(artifactName, listener, "onDeploymentStart", t); } } } @Override public void onDeploymentSuccess(String appName) { for (DeploymentListener listener : deploymentListeners) { try { listener.onDeploymentSuccess(appName); } catch (Throwable t) { logNotificationProcessingError(appName, listener, "onDeploymentSuccess", t); } } } @Override public void onDeploymentFailure(String artifactName, Throwable cause) { for (DeploymentListener listener : deploymentListeners) { try { listener.onDeploymentFailure(artifactName, cause); } catch (Throwable t) { logNotificationProcessingError(artifactName, listener, "onDeploymentFailure", t); } } } @Override public void onUndeploymentStart(String artifactName) { for (DeploymentListener listener : deploymentListeners) { try { listener.onUndeploymentStart(artifactName); } catch (Throwable t) { logNotificationProcessingError(artifactName, listener, "onUndeploymentStart", t); } } } @Override public void onUndeploymentSuccess(String artifactName) { for (DeploymentListener listener : deploymentListeners) { try { listener.onUndeploymentSuccess(artifactName); } catch (Throwable t) { logNotificationProcessingError(artifactName, listener, "onUndeploymentSuccess", t); } } } @Override public void onUndeploymentFailure(String artifactName, Throwable cause) { for (DeploymentListener listener : deploymentListeners) { try { listener.onUndeploymentFailure(artifactName, cause); } catch (Throwable t) { logNotificationProcessingError(artifactName, listener, "onUndeploymentFailure", t); } } } @Override public void onMuleContextCreated(String artifactName, MuleContext context, CustomizationService customizationService) { for (DeploymentListener listener : deploymentListeners) { try { listener.onMuleContextCreated(artifactName, context, customizationService); } catch (Throwable t) { logNotificationProcessingError(artifactName, listener, "onMuleContextCreated", t); } } } @Override public void onMuleContextInitialised(String artifactName, MuleContext context) { for (DeploymentListener listener : deploymentListeners) { try { listener.onMuleContextInitialised(artifactName, context); } catch (Throwable t) { logNotificationProcessingError(artifactName, listener, "onMuleContextInitialised", t); } } } @Override public void onMuleContextConfigured(String artifactName, MuleContext context) { for (DeploymentListener listener : deploymentListeners) { try { listener.onMuleContextConfigured(artifactName, context); } catch (Throwable t) { logNotificationProcessingError(artifactName, listener, "onMuleContextConfigured", t); } } } private void logNotificationProcessingError(String appName, DeploymentListener listener, String notification, Throwable error) { logger.error(String.format("Listener '%s' failed to process notification '%s' for application '%s'", listener, notification, appName), error); } }