/** * Create a new, empty {@link SnapshotJTransaction} backed by a {@link NavigableMapKVStore}. * * <p> * The returned {@link SnapshotJTransaction} does not support {@link SnapshotJTransaction#commit commit()} or * {@link SnapshotJTransaction#rollback rollback()}, and can be used indefinitely. * * @param validationMode the {@link ValidationMode} to use for the snapshot transaction * @return initially empty snapshot transaction */ public SnapshotJTransaction createSnapshotTransaction(ValidationMode validationMode) { return this.createSnapshotTransaction(new NavigableMapKVStore(), true, validationMode); }
static SnapshotJTransaction readSnapshotTransaction(Permazen jdb, HttpInputMessage input, Class<?>[] validationGroups) throws IOException { // Decode key/value store final NavigableMapKVStore kvstore = new NavigableMapKVStore(); KVStoreHttpMessageConverter.readKVStore(kvstore, input); // Create snapshot transaction final SnapshotJTransaction jtx = jdb.createSnapshotTransaction(kvstore, true, validationGroups != null ? ValidationMode.MANUAL : ValidationMode.DISABLED); // Optionally validate if (validationGroups != null) { for (JObject jobj : jtx.getAll(JObject.class)) jobj.revalidate(validationGroups); try { jtx.validate(); } catch (ValidationException e) { throw new HttpMessageNotReadableException("incoming object graph failed validation: " + ValidationUtil.describe(e.getViolations())); } } // Done return jtx; } }
final SnapshotJTransaction snapshotTx = this.jdb.createSnapshotTransaction(this.kvstore, false, ValidationMode.MANUAL); snapshotTx.performAction(() -> this.load(this.iterateObjects()));