Apache CXF API

org.apache.cxf.clustering
Class FailoverTargetSelector

java.lang.Object
  extended by org.apache.cxf.endpoint.AbstractConduitSelector
      extended by org.apache.cxf.clustering.FailoverTargetSelector
All Implemented Interfaces:
Closeable, ConduitSelector
Direct Known Subclasses:
LoadDistributorTargetSelector

public class FailoverTargetSelector
extends AbstractConduitSelector

Implements a target selection strategy based on failover to an alternate target endpoint when a transport level failure is encountered. Note that this feature changes the conduit on the fly and thus makes the Client not thread safe.


Nested Class Summary
protected  class FailoverTargetSelector.InvocationContext
          Records the context of an invocation.
protected static class FailoverTargetSelector.InvocationKey
          Used to wrap an Exchange for usage as a Map key.
 
Field Summary
protected  FailoverStrategy failoverStrategy
           
protected  ConcurrentHashMap<FailoverTargetSelector.InvocationKey,FailoverTargetSelector.InvocationContext> inProgress
           
 
Fields inherited from class org.apache.cxf.endpoint.AbstractConduitSelector
CONDUIT_COMPARE_FULL_URL, conduits, endpoint, KEEP_CONDUIT_ALIVE
 
Constructor Summary
FailoverTargetSelector()
          Normal constructor.
FailoverTargetSelector(Conduit c)
          Constructor, allowing a specific conduit to override normal selection.
 
Method Summary
 void complete(Exchange exchange)
          Called on completion of the MEP for which the Conduit was required.
protected  void doComplete(Exchange exchange)
           
protected  long getDelayBetweenRetries()
          Returns delay (in milliseconds) between retries
protected  Endpoint getFailoverTarget(Exchange exchange, FailoverTargetSelector.InvocationContext invocation)
          Get the failover target endpoint, if a suitable one is available.
protected  FailoverTargetSelector.InvocationContext getInvocationContext(FailoverTargetSelector.InvocationKey key)
           
protected  Logger getLogger()
           
 FailoverStrategy getStrategy()
           
 boolean isSupportNotAvailableErrorsOnly()
           
protected  void onFailure(FailoverTargetSelector.InvocationContext context)
           
protected  void onSuccess(FailoverTargetSelector.InvocationContext context)
           
protected  void overrideAddressProperty(Map<String,Object> context)
          Override the ENDPOINT_ADDRESS property in the request context
protected  void overrideAddressProperty(Map<String,Object> context, String address)
           
protected  boolean performFailover(Exchange exchange, FailoverTargetSelector.InvocationContext invocation)
           
 void prepare(Message message)
          Called prior to the interceptor chain being traversed.
protected  boolean replaceEndpointAddressPropertyIfNeeded(Message message, String endpointAddress, Conduit cond)
           
protected  boolean requiresFailover(Exchange exchange)
          Check if the exchange is suitable for a failover.
 Conduit selectConduit(Message message)
          Called when a Conduit is actually required.
protected  void setOriginalEndpoint(FailoverTargetSelector.InvocationContext invocation)
           
 void setStrategy(FailoverStrategy strategy)
           
 void setSupportNotAvailableErrorsOnly(boolean support)
           
protected  void setupExchangeExceptionProperties(Exchange ex)
           
 
Methods inherited from class org.apache.cxf.endpoint.AbstractConduitSelector
close, createConduit, findCompatibleConduit, getEndpoint, getSelectedConduit, removeConduit, setEndpoint
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

inProgress

protected ConcurrentHashMap<FailoverTargetSelector.InvocationKey,FailoverTargetSelector.InvocationContext> inProgress

failoverStrategy

protected FailoverStrategy failoverStrategy
Constructor Detail

FailoverTargetSelector

public FailoverTargetSelector()
Normal constructor.


FailoverTargetSelector

public FailoverTargetSelector(Conduit c)
Constructor, allowing a specific conduit to override normal selection.

Parameters:
c - specific conduit
Method Detail

prepare

public void prepare(Message message)
Called prior to the interceptor chain being traversed.

Parameters:
message - the current Message

setupExchangeExceptionProperties

protected void setupExchangeExceptionProperties(Exchange ex)

selectConduit

public Conduit selectConduit(Message message)
Called when a Conduit is actually required.

Parameters:
message -
Returns:
the Conduit to use for mediation of the message

getInvocationContext

protected FailoverTargetSelector.InvocationContext getInvocationContext(FailoverTargetSelector.InvocationKey key)

complete

public void complete(Exchange exchange)
Called on completion of the MEP for which the Conduit was required.

Specified by:
complete in interface ConduitSelector
Overrides:
complete in class AbstractConduitSelector
Parameters:
exchange - represents the completed MEP

doComplete

protected void doComplete(Exchange exchange)

setOriginalEndpoint

protected void setOriginalEndpoint(FailoverTargetSelector.InvocationContext invocation)

performFailover

protected boolean performFailover(Exchange exchange,
                                  FailoverTargetSelector.InvocationContext invocation)

onSuccess

protected void onSuccess(FailoverTargetSelector.InvocationContext context)

onFailure

protected void onFailure(FailoverTargetSelector.InvocationContext context)

setStrategy

public void setStrategy(FailoverStrategy strategy)
Parameters:
strategy - the FailoverStrategy to use

getStrategy

public FailoverStrategy getStrategy()
Returns:
strategy the FailoverStrategy to use

getLogger

protected Logger getLogger()
Specified by:
getLogger in class AbstractConduitSelector
Returns:
the logger to use

getDelayBetweenRetries

protected long getDelayBetweenRetries()
Returns delay (in milliseconds) between retries

Returns:
delay, 0 means no delay

requiresFailover

protected boolean requiresFailover(Exchange exchange)
Check if the exchange is suitable for a failover.

Parameters:
exchange - the current Exchange
Returns:
boolean true if a failover should be attempted

getFailoverTarget

protected Endpoint getFailoverTarget(Exchange exchange,
                                     FailoverTargetSelector.InvocationContext invocation)
Get the failover target endpoint, if a suitable one is available.

Parameters:
exchange - the current Exchange
invocation - the current InvocationContext
Returns:
a failover endpoint if one is available

overrideAddressProperty

protected void overrideAddressProperty(Map<String,Object> context)
Override the ENDPOINT_ADDRESS property in the request context

Parameters:
context - the request context

overrideAddressProperty

protected void overrideAddressProperty(Map<String,Object> context,
                                       String address)

replaceEndpointAddressPropertyIfNeeded

protected boolean replaceEndpointAddressPropertyIfNeeded(Message message,
                                                         String endpointAddress,
                                                         Conduit cond)
Overrides:
replaceEndpointAddressPropertyIfNeeded in class AbstractConduitSelector

isSupportNotAvailableErrorsOnly

public boolean isSupportNotAvailableErrorsOnly()

setSupportNotAvailableErrorsOnly

public void setSupportNotAvailableErrorsOnly(boolean support)

Apache CXF API

Apache CXF