protected void receiveQueryData(IRemoteCallObjectMetaData meta,
          IRemoteCallObjectData data, final long callObjectId) throws Exception {

    ExceptionList excl = new ExceptionList();
    try {
      //..execute handler
      Object result = null;
      if (!meta.getExecCommand().equalsIgnoreCase(ISession.KEEPALIVE_MESSAGE)) {
        setLastAccessTime(new Date().getTime());

        ConnectionInfo info = new ConnectionInfo(
                                  this.idConnection,
                                  this.getCreationTime(),
                                  this.getIdleTimeout(),
                                  this.getLastAccessTime(),
                                  this.getLastReceiptTime(),
                                  this.getRemoteIP(),
                                  this.getRemotePort());

        result = fireReceiveQueryEvent(
                new ReceiveQueryEvent(this, info, meta.getExecCommand(), data.getData()));
      }
      //..header for response to the server
      meta = new RemoteCallObjectMetaData(null, RemoteCallObjectType.Respond);
      //..put result
      data.setData(result);
    }
    catch (Exception exc) {
      excl.add(exc);
      //..header for exception to the server
      meta = new RemoteCallObjectMetaData(null, RemoteCallObjectType.RespondError);
      //..put exception
      data.setData(exc);
    }

    //..send data, but if catch exception, try send this exception
    try {
      send(SerializeUtils.serializeToBytes(new RemoteCallObject(callObjectId, meta, data)));
    }
    catch (Exception e){
      excl.add(e);
      
      byte responseData[];
      meta = new RemoteCallObjectMetaData(null, RemoteCallObjectType.RespondError);
      //..put exception
      data.setData(excl);
      //..create and serialize object response
      responseData = SerializeUtils.serializeToBytes(new RemoteCallObject(callObjectId, meta, data));
      //..send exception data
      send(responseData);
    }
    //..rethrow first exception in the list
    if (excl.size() > 0) throw new Exception(excl.get(0));
  }