|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2001 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.mdr.util;
import java.util.HashMap;
import java.util.HashSet;
import org.netbeans.api.mdr.events.TransactionEvent;
import org.netbeans.mdr.NBMDRepositoryImpl;
import org.netbeans.mdr.storagemodel.MdrStorage;
import org.netbeans.mdr.persistence.StorageException;
/** This class implements mutex that controls storage transactions as well as
* MDR events firing.
*
* @author Martin Matula
* @version 0.1
*/
public abstract class TransactionMutex {
// storage
private final MdrStorage storage;
// events notifier
private final EventNotifier notifier;
// the repository (used as event source for transaction events)
private final NBMDRepositoryImpl repository;
protected TransactionMutex(Object storage, Object notifier, Object repository) {
this.storage = (MdrStorage) storage;
this.notifier = (EventNotifier) notifier;
this.repository = (NBMDRepositoryImpl) repository;
}
public abstract boolean willFail();
public abstract boolean pendingChanges();
public abstract void enter(boolean writeAccess);
public abstract boolean leave(boolean fail);
public final void leave() {
leave(false);
}
protected final void start() {
TransactionEvent event = new TransactionEvent(
repository,
TransactionEvent.EVENT_TRANSACTION_START
);
notifier.REPOSITORY.firePlannedChange(storage, event);
}
protected final void end(boolean fail) {
try {
TransactionEvent event = new TransactionEvent(
repository,
TransactionEvent.EVENT_TRANSACTION_END
);
notifier.REPOSITORY.firePlannedChange(storage, event);
if (fail) {
notifier.fireCancelled();
storage.rollback();
// Logger.getDefault().notify(Logger.INFORMATIONAL, new DebugException("rollback"));
} else {
notifier.fireChanged();
storage.commit();
//Logger.getDefault().log("commited");
// Logger.getDefault().notify(Logger.INFORMATIONAL, new DebugException("commit"));
}
} catch (StorageException e) {
try {
Logger.getDefault().notify(Logger.INFORMATIONAL, e);
storage.rollback();
} catch (StorageException fatal) {
throw new DebugException("Fatal I/O error: " + fatal.toString());
}
}
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.