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());
//acks are sent only once.
ackBean.setReSend(false);
ackBean.setSequenceID(sequenceId);
EndpointReference to = ackMsgCtx.getTo();
if (to!=null)
ackBean.setToAddress(to.getAddress());
// 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);
SandeshaPolicyBean propertyBean = SandeshaUtil.getPropertyBean(msgContext.getAxisMessage());
long ackInterval = propertyBean.getAcknowledgementInterval();
// Ack will be sent as stand alone, only after the ackknowledgement interval
long timeToSend = System.currentTimeMillis() + ackInterval;
// removing old acks.
SenderBean findBean = new SenderBean();
findBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
Collection coll = senderBeanMgr.find(findBean);
Iterator it = coll.iterator();
if (it.hasNext()) {
SenderBean oldAckBean = (SenderBean) it.next();
// If there is an old Ack. This Ack will be sent in the old timeToSend.
timeToSend = oldAckBean.getTimeToSend();
senderBeanMgr.delete(oldAckBean.getMessageID());
}
ackBean.setTimeToSend(timeToSend);
msgContext.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);