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 <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(); } }