}
// use server of cascaded client to unsubscribe
StatefulServer server = (StatefulServer) cascSubscription.getServer();
// unsubscribe on backend server
CscUnsubscribeCommandCallback callback;
int otiOnSCMillis = (int) (oti * basicConf.getOperationTimeoutMultiplier());
int tries = (otiOnSCMillis / Constants.WAIT_FOR_FREE_CONNECTION_INTERVAL_MILLIS);
int i = 0;
// Following loop implements the wait mechanism in case of a busy connection pool
do {
// reset msgType, might have been modified in below unsubscribe try
reqMessage.setMessageType(this.getKey());
// set up callback for normal client unsubscribe operation
callback = new CscUnsubscribeCommandCallback(request, response, responderCallback, cascSubscription);
try {
server.unsubscribe(reqMessage, callback, otiOnSCMillis - (i * Constants.WAIT_FOR_FREE_CONNECTION_INTERVAL_MILLIS));
// delete unreferenced nodes in queue
publishMessageQueue.removeNonreferencedNodes();
// no exception has been thrown - get out of wait loop