/* * 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.core.api.connector; import org.mule.runtime.api.exception.LocatedMuleException; import org.mule.runtime.api.i18n.I18nMessage; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.concurrent.Executor; /** * When this exception is thrown it will trigger a retry (reconnection) policy to go into effect if one is configured. */ public class ConnectException extends LocatedMuleException { /** Serial version */ private static final long serialVersionUID = -7802483584780922653L; /** Resource which has disconnected */ private transient Connectable failed; public ConnectException(I18nMessage message, Connectable failed) { super(message, failed); // In the case of a MessageReceiver/MessageDispatcher, what we really want to reconnect is the Connector this.failed = failed; } public ConnectException(I18nMessage message, Throwable cause, Connectable failed) { super(message, cause, failed); // In the case of a MessageReceiver/MessageDispatcher, what we really want to reconnect is the Connector this.failed = failed; } public ConnectException(Throwable cause, Connectable failed) { super(cause, failed); // In the case of a MessageReceiver/MessageDispatcher, what we really want to reconnect is the Connector this.failed = failed; } public Connectable getFailed() { return failed; } private void writeObject(ObjectOutputStream out) throws Exception { out.defaultWriteObject(); if (this.failed instanceof Serializable) { out.writeBoolean(true); out.writeObject(this.failed); } else { out.writeBoolean(false); } } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); boolean failedWasSerialized = in.readBoolean(); if (failedWasSerialized) { this.failed = (Connectable) in.readObject(); } } public void handleReconnection(Executor retryExecutor) { // TODO See MULE-9307 - read reconnection behaviour for configs and sources } }