/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.synapse.endpoints.dispatch;
import org.apache.synapse.MessageContext;
import org.apache.synapse.endpoints.Endpoint;
import java.util.List;
/**
* Defines the behavior of session dispatchers. There can be two dispatcher types. Server initiated
* session dispatchers and client initiated session dispatchers. In the former one, server generates
* the session ID and sends it to the client in the first RESPONSE. In the later case, client should
* generate the session ID and send it to the server in the first REQUEST. A dispatcher object will
* be created for each session affinity load balance endpoint.
*/
public interface Dispatcher {
/**
* Dispatcher should check the session id pattern in the synapseMessageContext and return the
* matching endpoint for that session id, if available. If the session id in the given
* synapseMessageContext is not found it should return null.
*
* @param synCtx client -> esb message context.
* @return Endpoint Endpoint associated with this session.
*/
public SessionInformation getSession(MessageContext synCtx);
/**
* Updates the session maps. This will be called in the first client -> synapse -> server flow
* for client initiated sessions. For server initiated sessions, this will be called in the
* first server -> synapse -> client flow.
*
* @param synCtx SynapseMessageContext
*/
public void updateSession(MessageContext synCtx);
/**
* Removes the session belonging to the given message context.
*
* @param synCtx MessageContext containing an session ID.
*/
public void unbind(MessageContext synCtx);
/**
* Determine whether the session supported by the implementing dispatcher is initiated by the
* server (e.g. soap session) or by the client. This can be used for optimizing session updates.
*
* @return true, if the session is initiated by the server. false, otherwise.
*/
public boolean isServerInitiatedSession();
/**
* Returns the endpoint sequence associated with current session with out root
*
* @param sessionInformation Current Session information
* @return Endpoint sequence
*/
public List<Endpoint> getEndpoints(SessionInformation sessionInformation);
/**
* Remove the session Id - To clear out session information from current message
* @param syCtx MessageContext containing an session ID
*/
public void removeSessionID(MessageContext syCtx);
}