/* Start Transactions withTxn API Example 1 */
|
/*
|
For a replica set, include the replica set name and a seedlist of the members in the URI string; e.g.
|
String uri = "mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017/?replicaSet=myRepl";
|
For a sharded cluster, connect to the mongos instances; e.g.
|
String uri = "mongodb://mongos0.example.com:27017,mongos1.example.com:27017/";
|
*/
|
|
final MongoClient client = MongoClients.create(uri);
|
|
/*
|
Prereq: Create collections. CRUD operations in transactions must be on existing collections.
|
*/
|
|
client.getDatabase("mydb1").getCollection("foo")
|
.withWriteConcern(WriteConcern.MAJORITY).insertOne(new Document("abc", 0));
|
client.getDatabase("mydb2").getCollection("bar")
|
.withWriteConcern(WriteConcern.MAJORITY).insertOne(new Document("xyz", 0));
|
|
/* Step 1: Start a client session. */
|
|
final ClientSession clientSession = client.startSession();
|
|
/* Step 2: Optional. Define options to use for the transaction. */
|
|
TransactionOptions txnOptions = TransactionOptions.builder()
|
.readPreference(ReadPreference.primary())
|
.readConcern(ReadConcern.LOCAL)
|
.writeConcern(WriteConcern.MAJORITY)
|
.build();
|
|
/* Step 3: Define the sequence of operations to perform inside the transactions. */
|
|
TransactionBody txnBody = new TransactionBody<String>() {
|
public String execute() {
|
MongoCollection<Document> coll1 = client.getDatabase("mydb1").getCollection("foo");
|
MongoCollection<Document> coll2 = client.getDatabase("mydb2").getCollection("bar");
|
|
/*
|
Important:: You must pass the session to the operations.
|
*/
|
coll1.insertOne(clientSession, new Document("abc", 1));
|
coll2.insertOne(clientSession, new Document("xyz", 999));
|
return "Inserted into collections in different databases";
|
}
|
};
|
try {
|
/*
|
Step 4: Use .withTransaction() to start a transaction,
|
execute the callback, and commit (or abort on error).
|
*/
|
|
clientSession.withTransaction(txnBody, txnOptions);
|
} catch (RuntimeException e) {
|
// some error handling
|
} finally {
|
clientSession.close();
|
}
|
|
/* End Transactions withTxn API Example 1 */
|