Skip to content

Commit 1ce6051

Browse files
committed
Handles exception propagation to the caller
1 parent 1a62f78 commit 1ce6051

File tree

2 files changed

+29
-12
lines changed
  • rxjava-1-examples/src/main/java/io/vertx/example/rxjava/database/jdbc
  • rxjava-2-examples/src/main/java/io/vertx/example/reactivex/database/jdbc

2 files changed

+29
-12
lines changed

rxjava-1-examples/src/main/java/io/vertx/example/rxjava/database/jdbc/Transaction.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import io.vertx.example.util.Runner;
66
import io.vertx.rxjava.core.AbstractVerticle;
77
import io.vertx.rxjava.ext.jdbc.JDBCClient;
8+
import rx.Single;
9+
import rx.exceptions.CompositeException;
810

911
/*
1012
* @author <a href="mailto:[email protected]">Emad Alblueshi</a>
@@ -34,18 +36,24 @@ public void start() throws Exception {
3436
.rxGetConnection()
3537
.flatMap(conn ->
3638
conn
37-
// disable auto commit to manage transaction manually
39+
// Disable auto commit to handle transaction manually
3840
.rxSetAutoCommit(false)
41+
// Create table
3942
.flatMap(autoCommit -> conn.rxExecute(sql))
43+
// Insert colors
4044
.flatMap(executed -> conn.rxUpdateWithParams("INSERT INTO colors (name) VALUES (?)", new JsonArray().add("BLACK")))
4145
.flatMap(updateResult -> conn.rxUpdateWithParams("INSERT INTO colors (name) VALUES (?)", new JsonArray().add("WHITE")))
4246
.flatMap(updateResult -> conn.rxUpdateWithParams("INSERT INTO colors (name) VALUES (?)", new JsonArray().add("PURPLE")))
47+
// Commit if all succeeded
48+
.flatMap(updateResult -> conn.rxCommit().map(commit -> updateResult))
49+
// Rollback if any failed with exception propagation
50+
.onErrorResumeNext(ex -> conn.rxRollback()
51+
.onErrorResumeNext(ex2 -> Single.error(new CompositeException(ex, ex2)))
52+
.flatMap(ignore -> Single.error(ex))
53+
)
54+
// Get colors if all succeeded
4355
.flatMap(updateResult -> conn.rxQuery("SELECT * FROM colors"))
44-
// commit if all succeeded
45-
.doOnSuccess(resultSet -> conn.rxCommit().subscribe())
46-
// rollback if any failed
47-
.doOnError(throwable -> conn.rxRollback().subscribe())
48-
// close the connection regardless succeeded or failed
56+
// Close the connection regardless succeeded or failed
4957
.doAfterTerminate(conn::close)
5058
).subscribe(resultSet -> {
5159
// Subscribe to get the final result

rxjava-2-examples/src/main/java/io/vertx/example/reactivex/database/jdbc/Transaction.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.vertx.example.reactivex.database.jdbc;
22

3+
import io.reactivex.Single;
4+
import io.reactivex.exceptions.CompositeException;
35
import io.vertx.core.json.JsonArray;
46
import io.vertx.core.json.JsonObject;
57
import io.vertx.example.util.Runner;
@@ -34,19 +36,26 @@ public void start() throws Exception {
3436
.rxGetConnection()
3537
.flatMap(conn ->
3638
conn
37-
// disable auto commit to manage transaction manually
39+
// Disable auto commit to handle transaction manually
3840
.rxSetAutoCommit(false)
39-
// switch from Completable to default Single value
41+
// Switch from Completable to default Single value
4042
.toSingleDefault(false)
43+
// Create table
4144
.flatMap(autoCommit -> conn.rxExecute(sql).toSingleDefault(true))
45+
// Insert colors
4246
.flatMap(executed -> conn.rxUpdateWithParams("INSERT INTO colors (name) VALUES (?)", new JsonArray().add("BLACK")))
4347
.flatMap(updateResult -> conn.rxUpdateWithParams("INSERT INTO colors (name) VALUES (?)", new JsonArray().add("WHITE")))
4448
.flatMap(updateResult -> conn.rxUpdateWithParams("INSERT INTO colors (name) VALUES (?)", new JsonArray().add("PURPLE")))
45-
.flatMap(updateResult -> conn.rxQuery("SELECT * FROM colors"))
4649
// commit if all succeeded
47-
.doOnSuccess(resultSet -> conn.rxCommit().subscribe())
48-
// rollback if any failed
49-
.doOnError(throwable -> conn.rxRollback().subscribe())
50+
.flatMap(updateResult -> conn.rxCommit().toSingleDefault(true).map(commit -> updateResult))
51+
// Rollback if any failed with exception propagation
52+
.onErrorResumeNext(ex -> conn.rxRollback()
53+
.toSingleDefault(true)
54+
.onErrorResumeNext(ex2 -> Single.error(new CompositeException(ex, ex2)))
55+
.flatMap(ignore -> Single.error(ex))
56+
)
57+
// Get colors if all succeeded
58+
.flatMap(updateResult -> conn.rxQuery("SELECT * FROM colors"))
5059
// close the connection regardless succeeded or failed
5160
.doAfterTerminate(conn::close)
5261
).subscribe(resultSet -> {

0 commit comments

Comments
 (0)