String key = SandeshaUtil.getUUID();
//dumping to the storage will be done be Sandesha2 Transport Sender
//storageManager.storeMessageContext(key,ackMsgCtx);
SenderBean ackBean = new SenderBean();
ackBean.setMessageContextRefKey(key);
ackBean.setMessageID(ackMsgCtx.getMessageID());
ackBean.setReSend(false);
ackBean.setSequenceID(sequenceID);
//this will be set to true in the sender.
ackBean.setSend(true);
ackMsgCtx.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING,
Sandesha2Constants.VALUE_FALSE);
ackBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
//the internalSequenceId value of the retransmitter Table for the
// messages related to an incoming
//sequence is the actual sequence ID
//operation is the lowest level, Sandesha2 can be engaged.
SandeshaPropertyBean propertyBean = SandeshaUtil.getPropertyBean(msgContext.getAxisOperation());
long ackInterval = propertyBean.getAcknowledgementInaterval();
//Ack will be sent as stand alone, only after the retransmitter
// interval.
long timeToSend = System.currentTimeMillis() + ackInterval;
//removing old acks.
SenderBean findBean = new SenderBean();
findBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
//this will be set to true in the sandesha2TransportSender.
findBean.setSend(true);
findBean.setReSend(false);
Collection coll = retransmitterBeanMgr.find(findBean);
Iterator it = coll.iterator();
if (it.hasNext()) {
SenderBean oldAckBean = (SenderBean) it.next();
timeToSend = oldAckBean.getTimeToSend(); //If there is an old ack. This ack will be sent in the old timeToSend.
retransmitterBeanMgr.delete(oldAckBean.getMessageID());
}
ackBean.setTimeToSend(timeToSend);
storageManager.storeMessageContext(key,ackMsgCtx);