public void send(SCMPMessage message, int timeoutMillis, ISCMPMessageCallback callback) throws Exception {
// return an already connected live instance
IConnection connection = this.connectionPool.getConnection();
ConnectionContext connectionContext = connection.getContext();
try {
ISCMPMessageCallback requesterCallback = new RequesterSCMPCallback(callback, connectionContext);
// setting up operation timeout after successful send
TimeoutWrapper timeoutWrapper = new TimeoutWrapper((ITimeout) requesterCallback);
RequesterSCMPCallback reqCallback = (RequesterSCMPCallback) requesterCallback;
@SuppressWarnings("unchecked")
ScheduledFuture<TimeoutWrapper> timeout = (ScheduledFuture<TimeoutWrapper>) AppContext.otiScheduler.schedule(