in modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java [847:930]
private static void processCreateSequenceRefusedFault(RMMsgContext rmMsgCtx, AxisFault fault) throws AxisFault {
if (log.isDebugEnabled())
log.debug("Enter: FaultManager::processCreateSequenceRefusedFault");
ConfigurationContext configCtx = rmMsgCtx.getMessageContext().getConfigurationContext();
if(log.isWarnEnabled()){
String name = "NOT_SET";
if(rmMsgCtx != null){
MessageContext mCtx = rmMsgCtx.getMessageContext();
if(mCtx != null){
AxisService axisSvc = mCtx.getAxisService();
if(axisSvc != null){
name = axisSvc.getName();
}
}
}
log.warn(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.reliableMessagingNotEnabled, name));
}
StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configCtx, configCtx
.getAxisConfiguration());
RelatesTo relatesTo = rmMsgCtx.getMessageContext().getRelatesTo();
String createSeqMsgId = null;
if (relatesTo != null) {
createSeqMsgId = relatesTo.getValue();
} else {
// Work out the related message from the operation context
OperationContext context = rmMsgCtx.getMessageContext().getOperationContext();
MessageContext createSeq = context.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
if(createSeq != null) createSeqMsgId = createSeq.getMessageID();
}
if(createSeqMsgId == null) {
String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.relatesToNotAvailable);
log.error(message);
throw new SandeshaException(message);
}
SenderBeanMgr retransmitterMgr = storageManager.getSenderBeanMgr();
RMSBeanMgr rmsBeanMgr = storageManager.getRMSBeanMgr();
RMSBean rmsBean = rmsBeanMgr.retrieve(createSeqMsgId);
if (rmsBean == null) {
if (log.isDebugEnabled())
log.debug("Exit: FaultManager::processCreateSequenceRefusedFault Unable to find RMSBean");
return;
}
if(rmsBean.getSequenceID()!=null){
//we got a cseqRefused but the sequence is already setup - this implies a timing condition whereby several resends of the cSeqReq have been sent out.
//The best thing to do here is to ignore it.
if (log.isDebugEnabled())
log.debug("Exit: FaultManager::processCreateSequenceRefusedFault Sequence already established - no requirement to cleanup");
return;
}
// Indicate that there was an error when sending the Create Sequence.
rmsBean.setLastSendError(fault);
// Mark the sequence as terminated
rmsBean.setTerminated(true);
// Update the RMSBean
rmsBeanMgr.update(rmsBean);
SenderBean createSequenceSenderBean = retransmitterMgr.retrieve(createSeqMsgId);
if (createSequenceSenderBean == null)
throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.createSeqEntryNotFound));
// deleting the create sequence entry.
retransmitterMgr.delete(createSeqMsgId);
// Notify the clients of a failure
notifyClientsOfFault(rmsBean.getInternalSequenceID(), storageManager, configCtx, fault);
rmMsgCtx.pause();
// Cleanup sending side.
if (log.isDebugEnabled())
log.debug("Terminating sending sequence " + rmsBean);
TerminateManager.terminateSendingSide(rmsBean, storageManager, false, null);
if (log.isDebugEnabled())
log.debug("Exit: FaultManager::processCreateSequenceRefusedFault");
}