Package org.apache.cxf.clustering
Class FailoverTargetSelector
java.lang.Object
org.apache.cxf.endpoint.AbstractConduitSelector
org.apache.cxf.clustering.FailoverTargetSelector
- All Implemented Interfaces:
Closeable,AutoCloseable,ConduitSelector
- Direct Known Subclasses:
CircuitBreakerTargetSelector,LoadDistributorTargetSelector
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
Nested ClassesModifier and TypeClassDescriptionprotected classRecords the context of an invocation. -
Field Summary
FieldsFields inherited from class org.apache.cxf.endpoint.AbstractConduitSelector
CONDUIT_COMPARE_FULL_URL, conduits, endpoint, KEEP_CONDUIT_ALIVE -
Constructor Summary
ConstructorsConstructorDescriptionNormal constructor.FailoverTargetSelector(String clientBootstrapAddress) Constructor, allowing a specific conduit to override normal selection. -
Method Summary
Modifier and TypeMethodDescriptionvoidCalled on completion of the MEP for which the Conduit was required.protected voiddoComplete(Exchange exchange) protected longReturns delay (in milliseconds) between retriesprotected EndpointgetFailoverTarget(Exchange exchange, FailoverTargetSelector.InvocationContext invocation) Get the failover target endpoint, if a suitable one is available.protected FailoverTargetSelector.InvocationContextprotected Stringprotected Loggerbooleanprotected voidonFailure(FailoverTargetSelector.InvocationContext context, Exception ex) protected voidprotected voidoverrideAddressProperty(Map<String, Object> context) Override the ENDPOINT_ADDRESS property in the request contextprotected voidoverrideAddressProperty(Map<String, Object> context, String address) protected booleanperformFailover(Exchange exchange, FailoverTargetSelector.InvocationContext invocation) voidCalled prior to the interceptor chain being traversed.protected booleanreplaceEndpointAddressPropertyIfNeeded(Message message, String endpointAddress, Conduit cond) protected booleanrequiresFailover(Exchange exchange, Exception ex) Check if the exchange is suitable for a failover.selectConduit(Message message) Called when a Conduit is actually required.voidsetClientBootstrapAddress(String clientBootstrapAddress) protected voidvoidsetStrategy(FailoverStrategy strategy) voidsetSupportNotAvailableErrorsOnly(boolean support) protected voidupdateContextAlternatives(Exchange exchange, FailoverTargetSelector.InvocationContext invocation) Fetches and updates the alternative address or/and alternative endpoints (depending on the strategy) for current invocation context.Methods inherited from class org.apache.cxf.endpoint.AbstractConduitSelector
close, createConduit, findCompatibleConduit, getEndpoint, getSelectedConduit, removeConduit, setEndpoint
-
Field Details
-
failoverStrategy
-
-
Constructor Details
-
FailoverTargetSelector
public FailoverTargetSelector()Normal constructor. -
FailoverTargetSelector
-
FailoverTargetSelector
Constructor, allowing a specific conduit to override normal selection.- Parameters:
c- specific conduit
-
-
Method Details
-
prepare
Called prior to the interceptor chain being traversed.- Parameters:
message- the current Message
-
setupExchangeExceptionProperties
-
selectConduit
Called when a Conduit is actually required.- Parameters:
message-- Returns:
- the Conduit to use for mediation of the message
-
getInvocationContext
-
complete
Called on completion of the MEP for which the Conduit was required.- Specified by:
completein interfaceConduitSelector- Overrides:
completein classAbstractConduitSelector- Parameters:
exchange- represents the completed MEP
-
doComplete
-
setOriginalEndpoint
-
performFailover
protected boolean performFailover(Exchange exchange, FailoverTargetSelector.InvocationContext invocation) -
onSuccess
-
onFailure
-
setStrategy
- Parameters:
strategy- the FailoverStrategy to use
-
getStrategy
- Returns:
- strategy the FailoverStrategy to use
-
getLogger
- Specified by:
getLoggerin classAbstractConduitSelector- Returns:
- the logger to use
-
getDelayBetweenRetries
protected long getDelayBetweenRetries()Returns delay (in milliseconds) between retries- Returns:
- delay, 0 means no delay
-
requiresFailover
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 Exchangeinvocation- the current InvocationContext- Returns:
- a failover endpoint if one is available
-
updateContextAlternatives
protected List<String> updateContextAlternatives(Exchange exchange, FailoverTargetSelector.InvocationContext invocation) Fetches and updates the alternative address or/and alternative endpoints (depending on the strategy) for current invocation context.- Parameters:
exchange- the current Exchangeinvocation- the current InvocationContext- Returns:
- alternative addresses
-
overrideAddressProperty
Override the ENDPOINT_ADDRESS property in the request context- Parameters:
context- the request context
-
overrideAddressProperty
-
replaceEndpointAddressPropertyIfNeeded
protected boolean replaceEndpointAddressPropertyIfNeeded(Message message, String endpointAddress, Conduit cond) - Overrides:
replaceEndpointAddressPropertyIfNeededin classAbstractConduitSelector
-
isSupportNotAvailableErrorsOnly
public boolean isSupportNotAvailableErrorsOnly() -
setSupportNotAvailableErrorsOnly
public void setSupportNotAvailableErrorsOnly(boolean support) -
getClientBootstrapAddress
-
setClientBootstrapAddress
-
getInvocationKey
-