private boolean beginRequest(Request request) {

        // Check if the transaction name is used before
        if (this.transInfo.containsKey(request.transaction)) {
            System.out.println("error : transaction [" + request.transaction
                    + "] already exists");
            return false;
        }

        // Create new transaction Entity
        // Including final time stamp
        transactionEntity tempT = new transactionEntity(request.transaction,
                request.requestType == RequestType.BEGINRO);
        this.transInfo.put(tempT.name, tempT);

        // if the transaction is read only, create snapshot on all running sites
        if (request.requestType == RequestType.BEGINRO) {
            for (Site site : sites) {
                if (!site.isRunning())
                    continue;

                site.exeRequest(new Request(null, tempT.name,
                        RequestType.SNAPSHOT, null));
                tempT.visitedSites.add(site);
            }
        }
        return true;
    }