public void saveOrCreateObjects() { dirtyResources.removeAll(newPersistentResources); // Delete has already been called on these objects dirtyResources.removeAll(deletedResources); newPersistentResources .stream() .map(PersistentResource::getObject) .forEach(s -> transaction.createObject(s, this)); dirtyResources.stream().map(PersistentResource::getObject).forEach(obj -> transaction.save(obj, this)); }
public void saveOrCreateObjects() { dirtyResources.removeAll(newPersistentResources); // Delete has already been called on these objects dirtyResources.removeAll(deletedResources); newPersistentResources .stream() .map(PersistentResource::getObject) .forEach(s -> transaction.createObject(s, this)); dirtyResources.stream().map(PersistentResource::getObject).forEach(obj -> transaction.save(obj, this)); }
@Override public void save(Object entity, RequestScope requestScope) { getTransaction(entity).save(entity, requestScope); dirtyObjects.add(this.multiplexManager.getSubManager(entity.getClass()), entity); }
/** * Attempt to reverse changes of last commit since not all transactions successfully committed. * @param restoreList List of database managers to reverse the last commit * @param cause cause to add any suppressed exceptions */ private void reverseTransactions(ArrayList<DataStore> restoreList, Throwable cause, RequestScope requestScope) { for (DataStore dataStore : restoreList) { try (DataStoreTransaction transaction = dataStore.beginTransaction()) { List<Object> list = dirtyObjects.get(dataStore); for (Object dirtyObject : list == null ? Collections.emptyList() : list) { Object cloned = clonedObjects.get(dirtyObject); if (cloned == NEWLY_CREATED_OBJECT) { transaction.delete(dirtyObject, requestScope); } else { transaction.save(cloned, requestScope); } } transaction.commit(requestScope); } catch (RuntimeException | IOException e) { cause.addSuppressed(e); } } }