code: protected void populateBootstrapData (BootstrapData data)
      {
          // give them the connection id
          Connection conn = getConnection();
          if (conn != null) {
              data.connectionId = conn.getConnectionId();
          } else {
              log.warning("Connection disappeared before we could send bootstrap response.",
                          "client", this);
              return; // stop here as we're just going to throw away this bootstrap
          }
  
          // and the client object id
          data.clientOid = _clobj.getOid();
  
          // fill in the list of bootstrap services
          if (_areq.getBootGroups() == null) {
              log.warning("Client provided no invocation service boot groups? " + this);
              data.services = Lists.newArrayList();
          } else {
              data.services = _invmgr.getBootstrapServices(_areq.getBootGroups());
          }
      }
docs: Derived client classes can override this member to populate the bootstrap data with
  additional information. They should be sure to call <code>super.populateBootstrapData</code>
  before doing their own populating, however.
  
  <p><em>Note:</em> This function will be called on the dobjmgr thread which means that object
  manipulations are OK, but client instance manipulations must be done carefully.