/** * Upgrades a read transaction to a write transaction, executes the work then downgrades to a read transaction * again. * * @since 2.4 * @noreference */ 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 <T> T modify(IUnitOfWork<T, P> work) { acquireWriteLock(); P state = null; T exec = null; try { state = getState(); beforeModify(state, work); exec = work.exec(state); return exec; } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new WrappedException(e); } finally { releaseWriteLock(); try { acquireReadLock(); afterModify(state, exec, work); } finally { releaseReadLock(); } } }
public <T> T readOnly(IUnitOfWork<T, P> work) { acquireReadLock(); try { P state = getState(); beforeReadOnly(state, work); T exec = work.exec(state); afterReadOnly(state, exec, work); return exec; } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new WrappedException(e); } finally { releaseReadLock(); } }
@Override public <T> T modify(IUnitOfWork<T, XtextResource> work) { try { if (validationJob!=null) { validationJob.cancel(); } Object state = getState(); if (state instanceof ISynchronizable<?>) { synchronized (((ISynchronizable<?>) state).getLock()) { return super.modify(work); } } else { return super.modify(work); } } catch (RuntimeException e) { try { XtextResource state = getState(); if (state != null) state.reparse(get()); } catch (IOException ioe) { } throw e; } finally { if(!(work instanceof ReconcilingUnitOfWork)) checkAndUpdateAnnotations(); } }
@Override public <Result> Result modify(IUnitOfWork<Result, State> work) { acquireWriteLock(); State state = null; Result exec = null; try { state = getState(); beforeModify(state, work); exec = work.exec(state); return exec; } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new WrappedException(e); } finally { releaseWriteLock(); try { acquireReadLock(); afterModify(state, exec, work); } finally { releaseReadLock(); } } }
/** * Upgrades a read transaction to a write transaction, executes the work then downgrades to a read transaction * again. * * @since 2.4 * @noreference */ public <T> T process(IUnitOfWork<T, P> 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(); } }
@Override public <Result> Result readOnly(IUnitOfWork<Result, State> work) { acquireReadLock(); try { State state = getState(); beforeReadOnly(state, work); Result exec = work.exec(state); afterReadOnly(state, exec, work); return exec; } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new WrappedException(e); } finally { releaseReadLock(); } }