private static void atomicRollback(Repository r) { if (r.isTransactionInProgress()) { r.rollback(); } }
@Override public void rollback() { init(); get().rollback(); }
private void commitIfChanged() { if (sinksToSave.isEmpty()) { r.rollback(); return; } for (IdRef<SinkMarker> id : sinkMarkersToSave) { async.save(getSinkMarkerFromCache(id)); } for (IdRef<?> sinkId : sinksToSave) { logSave(sinkId); // TODO: support pipes at async repository operations r.save(sinkCache.get(sinkId)); } // TODO: destroy empty sinks? r.commit(); }
public void execute() { try { r.beginX(); cacheSinkMarkers(); executeWorks(); commitIfChanged(); } finally { if (r.isTransactionInProgress()) { r.rollback(); } } }
private void saveInternal(Object object) { boolean newTransaction = beginTransactionForPipesOnSave(object); try { updateExistingPipes(object); rawSave(object); invalidateCache(object); fluxPipes(object); if (newTransaction) { commit(); } } finally { if (newTransaction && isTransactionInProgress()) { rollback(); } } logger.finer("saved"); }
private void flushSource() { try { r.begin(); Pipe pipe = newPipeInstance(); Object source = sourceId.fetch(); r.driver().pipes().flux(pipe, source); r.commit(); } finally { if (r.isTransactionInProgress()) { r.rollback(); } } }
private void destroyInternal(IdRef<?> id) { boolean newTransaction = beginTransactionForPipesOnDestroy(id); try { refluxPipes(id); driver().persistence().destroy(id); invalidateCache(id); // TODO: Pipes - cleanup sinks if (newTransaction) { commit(); } } finally { if (newTransaction && isTransactionInProgress()) { rollback(); } } }
@Test public void testTransactionRollback() { yawp.begin(); yawp.save(new BasicObject()); yawp.rollback(); assertEquals(0, yawp(BasicObject.class).list().size()); }