rmsBean.setPollingMode(true);
}
}
}
SenderBean createSequenceSenderBean = retransmitterMgr.retrieve(createSeqMsgId);
if (createSequenceSenderBean == null)
throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.createSeqEntryNotFound));
// deleting the create sequence entry.
retransmitterMgr.delete(createSeqMsgId);
// Remove the create sequence message
storageManager.removeMessageContext(rmsBean.getCreateSequenceMsgStoreKey());
// processing for accept (offer has been sent)
Accept accept = createSeqResponsePart.getAccept();
if (accept != null) {
// TODO this should be detected in the Fault manager.
if (rmsBean.getOfferedSequence() == null) {
String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.accptButNoSequenceOffered);
log.debug(message);
throw new SandeshaException(message);
}
RMDBean rMDBean = new RMDBean();
EndpointReference acksToEPR = accept.getAcksTo().getEPR();
rMDBean.setAcksToEPR(acksToEPR.getAddress());
rMDBean.setSequenceID(rmsBean.getOfferedSequence());
rMDBean.setNextMsgNoToProcess(1);
rMDBean.setOutboundInternalSequence(rmsBean.getInternalSequenceID());
rMDBean.setServiceName(createSeqResponseRMMsgCtx.getMessageContext().getAxisService().getName());
//Storing the referenceMessage of the sending side sequence as the reference message
//of the receiving side as well.
//This can be used when creating new outgoing messages.
String referenceMsgStoreKey = rmsBean.getReferenceMessageStoreKey();
MessageContext referenceMsg = storageManager.retrieveMessageContext(referenceMsgStoreKey, configCtx);
String newMessageStoreKey = SandeshaUtil.getUUID();
storageManager.storeMessageContext(newMessageStoreKey,referenceMsg);
rMDBean.setReferenceMessageKey(newMessageStoreKey);
// If this is an offered sequence that needs polling then we need to setup the
// rmdBean for polling too, so that it still gets serviced after the outbound
// sequence terminates.
if (Sandesha2Constants.SPEC_VERSIONS.v1_1.equals(createSeqResponseRMMsgCtx.getRMSpecVersion())) {
if(rmsBean.isPollingMode()) {
rMDBean.setPollingMode(true);
}
}
String rmSpecVersion = createSeqResponseRMMsgCtx.getRMSpecVersion();
rMDBean.setRMVersion(rmSpecVersion);
EndpointReference toEPR = createSeqResponseRMMsgCtx.getTo();
if (toEPR==null) {
//Most probably this is a sync response message, using the replyTo of the request message
OperationContext operationContext = createSeqResponseRMMsgCtx.getMessageContext().getOperationContext();
if (operationContext!=null) {
MessageContext createSequnceMessage = operationContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
if (createSequnceMessage!=null)
toEPR = createSequnceMessage.getReplyTo();
}
}
if (toEPR!=null)
rMDBean.setToAddress(toEPR.getAddress());
rMDBean.setServerCompletedMessages(new RangeString());
RMDBeanMgr rmdBeanMgr = storageManager.getRMDBeanMgr();
// Store the security token for the offered sequence
rMDBean.setSecurityTokenData(rmsBean.getSecurityTokenData());
rMDBean.setLastActivatedTime(System.currentTimeMillis());
rmdBeanMgr.insert(rMDBean);
SandeshaUtil.startWorkersForSequence(configCtx, rMDBean);
}
rmsBean.setLastActivatedTime(System.currentTimeMillis());
rmsBeanMgr.update(rmsBean);
SandeshaUtil.startWorkersForSequence(configCtx, rmsBean);
// Locate and update all of the messages for this sequence, now that we know
// the sequence id.
SenderBean target = new SenderBean();
target.setInternalSequenceID(internalSequenceId);
target.setSend(false);
Iterator iterator = retransmitterMgr.find(target).iterator();
while (iterator.hasNext()) {
SenderBean tempBean = (SenderBean) iterator.next();
// asking to send the application msssage
tempBean.setSend(true);
tempBean.setSequenceID(newOutSequenceId);
retransmitterMgr.update(tempBean);
}
createSeqResponseRMMsgCtx.getMessageContext().getOperationContext().setProperty(
org.apache.axis2.Constants.RESPONSE_WRITTEN, "false");