public synchronized void rollback() {
		if (!opened) {
			throw new StorageError(StorageError.STORAGE_NOT_OPENED);
		}

		if (useSerializableTransactions && getTransactionContext().nested != 0) {
			// Store should not be used in serializable transaction mode
			throw new StorageError(StorageError.INVALID_OPERATION, "rollback");
		}

		objectCache.invalidate();

		synchronized (objectCache) {
			if (!modified) {
				return;
			}

			rollback0();
			modified = false;

			if (reloadObjectsOnRollback) {
				objectCache.reload();
			}
			else {
				objectCache.clear();
			}
		}
	}