SandeshaThread sender = storageManager.getSender();
WorkerLock lock = sender.getWorkerLock();
String workId = matchingMessage.getMessageID();
SenderWorker worker = new SenderWorker(pollMessage.getConfigurationContext(), matchingMessage, pollMessage.getRMSpecVersion());
worker.setLock(lock);
worker.setWorkId(workId);
while (!lock.addWork(workId, worker)) {
try {
// wait on the lock.
lock.awaitRemoval(workId);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
setTransportProperties(returnMessage, pollMessage);
// Link the response to the request
AxisOperation operation = SpecSpecificConstants.getWSRMOperation(Sandesha2Constants.MessageTypes.POLL_RESPONSE_MESSAGE, pollMessage.getRMSpecVersion(), pollMessage.getMessageContext().getAxisService());
OperationContext context = new OperationContext(operation, pollMessage.getMessageContext().getServiceContext());
context.addMessageContext(returnMessage);
returnMessage.setServiceContext(null);
returnMessage.setOperationContext(context);
returnMessage.setProperty(Sandesha2Constants.MAKE_CONNECTION_RESPONSE, Boolean.TRUE);
returnMessage.setProperty(RequestResponseTransport.TRANSPORT_CONTROL, pollMessage.getProperty(RequestResponseTransport.TRANSPORT_CONTROL));
//running the MakeConnection through a SenderWorker.
//This will allow Sandesha2 to consider both of following senarios equally.
// 1. A message being sent by the Sender thread.
// 2. A message being sent as a reply to an MakeConnection.
worker.setMessage(returnRMMsg);
worker.run();
TransportUtils.setResponseWritten(pollMessage.getMessageContext(), true);
}
if (LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled())