package com.sleepycat.je; import com.sleepycat.je.txn.Locker; import com.sleepycat.je.txn.Txn; import com.sleepycat.je.utilint.PropUtil; import de.ovgu.cide.jakutil.*; /** * Javadoc for this public class is generated * via the doc templates in the doc_src directory. */ public class Transaction { private Txn txn; private Environment env; private long id; private String name; /** * Creates a transaction. */ Transaction( Environment env, Txn txn){ this.env=env; this.txn=txn; this.id=txn.getId(); } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void abort() throws DatabaseException { checkEnv(); env.removeReferringHandle(this); txn.abort(false); txn=null; } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public long getId() throws DatabaseException { return id; } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void commit() throws DatabaseException { checkEnv(); env.removeReferringHandle(this); txn.commit(); txn=null; } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void commitSync() throws DatabaseException { doCommit(Txn.TXN_SYNC); } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void commitNoSync() throws DatabaseException { doCommit(Txn.TXN_NOSYNC); } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void commitWriteNoSync() throws DatabaseException { doCommit(Txn.TXN_WRITE_NOSYNC); } private void doCommit( byte commitType) throws DatabaseException { checkEnv(); env.removeReferringHandle(this); txn.commit(commitType); txn=null; } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void setTxnTimeout( long timeOut) throws DatabaseException { checkEnv(); txn.setTxnTimeout(PropUtil.microsToMillis(timeOut)); } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void setLockTimeout( long timeOut) throws DatabaseException { checkEnv(); txn.setLockTimeout(PropUtil.microsToMillis(timeOut)); } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void setName( String name){ this.name=name; } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public String getName(){ return name; } public int hashCode(){ return (int)id; } public boolean equals( Object o){ if (o == null) { return false; } if (!(o instanceof Transaction)) { return false; } if (((Transaction)o).id == id) { return true; } return false; } public String toString(){ StringBuffer sb=new StringBuffer(); sb.append("<Transaction id=\""); sb.append(txn.getId()).append("\""); if (name != null) { sb.append(" name=\""); sb.append(name).append("\""); } sb.append(">"); return sb.toString(); } /** * This method should only be called by the LockerFactory.getReadableLocker * and getWritableLocker methods. The locker returned does not enforce the * readCommitted isolation setting. */ Locker getLocker() throws DatabaseException { if (txn == null) { throw new DatabaseException("Transaction " + id + " has been closed and is no longer"+ " usable."); } else { return txn; } } Txn getTxn(){ return txn; } /** * @throws RunRecoveryException if the underlying environment is invalid. */ private void checkEnv() throws RunRecoveryException { env.getEnvironmentImpl().checkIfInvalid(); } }