public <Result> Result process(IUnitOfWork<Result, State> work) {
		releaseReadLock();
		acquireWriteLock();
		try {
			if (log.isTraceEnabled())
				log.trace("process - " + Thread.currentThread().getName());
			return modify(work);
		} finally {
			if (log.isTraceEnabled())
				log.trace("Downgrading from write lock to read lock...");
			acquireReadLock();
			releaseWriteLock();
		}
	}
public < Result > Result process ( IUnitOfWork < Result , State > work ) { releaseReadLock ( ) ; acquireWriteLock ( ) ; try { if ( log . isTraceEnabled ( ) ) log . trace ( "process - " + Thread . currentThread ( ) . getName ( ) ) ; return modify ( work ) ; } finally { if ( log . isTraceEnabled ( ) ) log . trace ( "Downgrading from write lock to read lock..." ) ; acquireReadLock ( ) ; releaseWriteLock ( ) ; } }
Upgrades a read transaction to a write transaction, executes the work then downgrades to a read transaction
again.

@since 2.4
@noreference