/*
* 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.lifecycle.Lifecycle;
import org.mule.runtime.core.api.retry.RetryContext;
/**
* Interface for objects that should connect to a resource.
*/
public interface Connectable extends Lifecycle {
/**
* Make the connection to the underlying transport. The fact that this object is connected or not should have no influence on
* the lifecycle, especially the start / stop state if applicable.
*
* @throws Exception
*/
void connect() throws Exception;
/**
* Disconnect the from the underlying transport
*
* @throws Exception
*/
void disconnect() throws Exception;
/**
* Determines if this object is connected or not
*/
boolean isConnected();
/**
* Returns a string identifying the underlying resource
*/
String getConnectionDescription();
/**
* Test whether the connector is able to connect to its resource(s). This will allow a retry policy to go into effect in the
* case of failure. Implementations must call either:
* <ul>
* <li>{@link RetryContext#setOk()} when no problems found (or no validation required).
* <li>{@link RetryContext#setFailed(Throwable)} with a root cause for a connection failure.
* </ul>
* Callers should then check for {@link RetryContext#isOk()}. The failure, if any, will be provided via the
* {@link RetryContext#getLastFailure()}.
*
* @return same retry context with status info set and any failures populated
* @throws Exception if the connector fails to connect @param retryContext
*/
RetryContext validateConnection(RetryContext retryContext);
}