⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transaction.java

📁 通过系统把几乎所有与人力资源相关的数据统一管理
💻 JAVA
字号:
//$Id: Transaction.java,v 1.5.2.2 2003/09/29 12:06:30 oneovthafew Exp $package net.sf.hibernate.odmg;import org.odmg.LockNotGrantedException;import org.odmg.ODMGException;import org.odmg.ODMGRuntimeException;import net.sf.hibernate.HibernateException;import net.sf.hibernate.LockMode;import net.sf.hibernate.Session;/** * Implements the ODMG <tt>Transaction</tt> API. */public class Transaction implements org.odmg.Transaction {	private final Database database;	private final Session session;	private net.sf.hibernate.Transaction tx;		/**	 * Instantiate a <tt>Transaction</tt> for the given <tt>Database</tt>.	 */	public Transaction(org.odmg.Database database) throws ODMGException {		this.database = (Database) database;		try {			this.session = this.database.getSessionFactory().openSession();		}		catch (HibernateException he) {			throw new ODMGException( he.getMessage() );		}		this.database.associateThread(this);	}		/**	 * Instantiate a <tt>Transaction</tt> for a <tt>Database</tt> created	 * by the current thread.	 */	public Transaction() throws ODMGException {		this( Implementation.getInstance().currentDatabase() );	}		/**	 * Get the underlying Hibernate <tt>Session</tt>. (Very useful!)	 */	public Session getSession() {		return session;	}	/**	 * Associate the current thread with this <tt>Transaction</tt>. Disassociate the	 * thread from any other <tt>Transaction</tt>.	 * @see org.odmg.Transaction#join()	 */	public void join() {		//database.disassociateThread();		database.associateThread(this);	}	/**	 * Disassociate the thread the <tt>Transaction</tt>. JavaDoc requires a second sentence.	 * @see org.odmg.Transaction#leave()	 */	public void leave() {		database.disassociateThread();	}	/**	 * Begin the transaction. JavaDoc requires a second sentence.	 *	 * @see org.odmg.Transaction#begin()	 * 	 */	public void begin() {		try {			tx = session.beginTransaction();		}		catch (HibernateException he) {			throw new ODMGRuntimeException( he.getMessage() );		}	}	/**	 * Is the transaction open. Returns true if <tt>begin()</tt> was called but	 * neither <tt>commit()</tt> nor <tt>abort()</tt> was called.	 * @see org.odmg.Transaction#isOpen()	 */	public boolean isOpen() {		return tx!=null;	}	/**	 * Commit the transaction. JavaDoc requires a second sentence.	 *	 * @see org.odmg.Transaction#commit()	 */	public void commit() {		database.disassociateThread();		try {			if (tx!=null) tx.commit();		}		catch (HibernateException he) {			throw new ODMGRuntimeException( he.getMessage() );		}		finally {			tx=null;			try {				session.close();			}			catch (HibernateException he) {				throw new ODMGRuntimeException( he.getMessage() );			}		}	}	/**	 * Abort the transaction. JavaDoc requires a second sentence.	 *	 * @see org.odmg.Transaction#abort()	 */	public void abort() {		database.disassociateThread();		try {			if (tx!=null) tx.rollback();		}		catch (HibernateException he) {			throw new ODMGRuntimeException( he.getMessage() );		}		finally {			tx=null;			try {				session.close();			}			catch (HibernateException he) {				throw new ODMGRuntimeException( he.getMessage() );			}		}	}	/**	 * Commit the changes, but leave the transaction open. This implementation 	 * does not have quite the same semantics os ODMG (locks are not retained).	 * So you should only use this with versioned data.	 * @see org.odmg.Transaction#checkpoint()	 */	public void checkpoint() {		try {			tx.commit();			tx = session.beginTransaction();		}		catch (HibernateException he) {			throw new ODMGRuntimeException( he.getMessage() );		}	}	/**	 * Obtain a lock upon the given object. In the present implementation, 	 * <tt>READ</tt> lock mode is ignored while <tt>UPGRADE</tt> and 	 * <tt>WRITE</tt> lock modes obtain an <tt>UPGRADE</tt> lock for databases 	 * which support <tt>for update</tt>. We should improve this eventually....	 * @see org.odmg.Transaction#lock(Object, int)	 */	public void lock(Object obj, int lockMode) throws LockNotGrantedException {				//TODO: check the semantics of this...				try {			if ( lockMode==org.odmg.Transaction.READ ) {				session.lock(obj, LockMode.READ);			}			else {				session.lock(obj, LockMode.UPGRADE);			}		}		catch (HibernateException he) {			throw new ODMGRuntimeException( he.getMessage() );		}	}	/**	 * Not implemented. JavaDoc requires a second sentence.	 * @see org.odmg.Transaction#tryLock(Object, int)	 */	public boolean tryLock(Object obj, int lockMode) {		throw new UnsupportedOperationException("try using lock()");	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -