public void beginRO(String transactionName, long startTime) {
    if( transactionMap.containsKey(transactionName) ) {
      writeToStreamln("Transaction with same name already"
          + "exists");
      return;
    }
    
    String output = new StringBuilder("Read only Transaction ")
        .append(transactionName).append(" started").toString(); 
    writeToStreamln(output);
    
    //Get a copy of all the variables
    Map<String, Integer> variableValuesOld = new HashMap<String, Integer>();
    boolean variableFound = false;
    for( String variableName : variableSitesMap.keySet() ) {
      for( Site site : variableSitesMap.get(variableName) ) {
        if( site.isActive() && !siteManager.isVariableDirtyAtSite(variableName, site)) {
          variableValuesOld.put(variableName, site.readOld(variableName));
          variableFound = true;
          break;
        }
      }
      if( !variableFound ) {
        //print in output that this read operation will not be possible for this
        //variable.
      }
    }
    
    transactionMap.put(transactionName, new ReadOnlyTransaction
        (transactionName, startTime, Transaction.Type.READ_ONlY, 
            Transaction.State.ACTIVE, variableValuesOld) );
  }