/** * Execute given operation within a transaction. A {@link Transaction} reference is provided to perform * <code>commit</code> and <code>rollback</code> operations. * @param operation Operation to execute (not null) */ default void withTransaction(TransactionalInvocation operation) { withTransaction((TransactionalOperation<?>) operation); }
/** * Execute given operation within a transaction. A {@link Transaction} reference is provided to perform * <code>commit</code> and <code>rollback</code> operations. * @param operation Operation to execute (not null) * @param transactionConfiguration Transaction configuration */ default void withTransaction(TransactionalInvocation operation, TransactionConfiguration transactionConfiguration) { withTransaction((TransactionalOperation<?>) operation, transactionConfiguration); }
/** * Execute given operation within a transaction and return a result. A {@link Transaction} reference is provided to * perform <code>commit</code> and <code>rollback</code> operations. * @param <R> Operation result type * @param operation Operation to execute (not null) * @return The operation result */ default <R> R withTransaction(TransactionalOperation<R> operation) { return withTransaction(operation, TransactionConfiguration.getDefault()); }
public void transactional3() throws IOException { // tag::transactional3[] getDatastore().requireTransactional().withTransaction(tx -> { tx.setRollbackOnly(); // <1> }); // end::transactional3[] }
public void transactional4() throws IOException { // tag::transactional4[] getDatastore().requireTransactional().withTransaction(tx -> { // ... }, TransactionConfiguration.withAutoCommit()); // <1> // end::transactional4[] }
public void transactional5() throws IOException { // tag::transactional5[] getDatastore().requireTransactional().withTransaction(tx -> { // ... }, TransactionConfiguration.create(false, false)); // <1> // end::transactional5[] }
public void transactional() { // tag::transactional[] final Datastore datastore = getDatastore(); // build or obtain a JDBC Datastore datastore.requireTransactional().withTransaction(tx -> { // <1> PropertyBox value = buildPropertyBoxValue(); datastore.save(TARGET, value); tx.commit(); // <2> }); OperationResult result = datastore.requireTransactional().withTransaction(tx -> { // <3> PropertyBox value = buildPropertyBoxValue(); return datastore.save(TARGET, value); }, TransactionConfiguration.withAutoCommit()); // <4> // end::transactional[] }
public void transactional() { // tag::transactional[] final Datastore datastore = getJpaDatastore(); // build or obtain a JPA Datastore datastore.requireTransactional().withTransaction(tx -> { // <1> PropertyBox value = buildPropertyBoxValue(); datastore.save(TARGET, value); tx.commit(); // <2> }); OperationResult result = datastore.requireTransactional().withTransaction(tx -> { // <3> PropertyBox value = buildPropertyBoxValue(); return datastore.save(TARGET, value); }, TransactionConfiguration.withAutoCommit()); // <4> // end::transactional[] }
public void transactional1() throws IOException { // tag::transactional1[] final PathProperty<String> A_PROPERTY = PathProperty.create("propertyPath", String.class); final DataTarget<String> TARGET = DataTarget.named("test"); final Datastore datastore = getDatastore(); // build or obtain a concrete Datastore implementation datastore.isTransactional().ifPresent(transactional -> { // <1> OperationResult result = transactional.withTransaction(tx -> { // <2> OperationResult r = datastore.insert(TARGET, PropertyBox.builder(A_PROPERTY).set(A_PROPERTY, "test").build()); // <3> tx.commit(); // <4> return r; }); }); // end::transactional1[] }
public void transactional2() throws IOException { // tag::transactional2[] final PathProperty<String> A_PROPERTY = PathProperty.create("propertyPath", String.class); final DataTarget<String> TARGET = DataTarget.named("test"); final Datastore datastore = getDatastore(); // build or obtain a concrete Datastore implementation datastore.requireTransactional() // <1> .withTransaction(tx -> { // <2> datastore.insert(TARGET, PropertyBox.builder(A_PROPERTY).set(A_PROPERTY, "test").build()); // <3> tx.commit(); // <4> }); // end::transactional2[] }