diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java index 9ecf2c8caeb6..fbbec396c5e2 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java @@ -105,6 +105,23 @@ interface Response { /** * Commit the transaction. * + *
Example of committing a transaction + *
{@code
+ * // create an entity
+ * KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind");
+ * Key key = datastore.allocateId(keyFactory.newKey());
+ * Entity entity = Entity.builder(key).set("description", "calling commit()").build();
+ *
+ * // add the entity and commit
+ * Transaction txn = datastore.newTransaction();
+ * try {
+ * txn.put(entity);
+ * txn.commit();
+ * } catch (DatastoreException ex) {
+ * // handle exception
+ * }
+ * }
+ *
* @throws DatastoreException if could not commit the transaction or if no longer active
*/
Response commit();
@@ -112,12 +129,51 @@ interface Response {
/**
* Rollback the transaction.
*
+ * Example of rolling back a Transaction + *
{@code
+ * // create an entity
+ * KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind");
+ * Key key = datastore.allocateId(keyFactory.newKey());
+ * Entity entity = Entity.builder(key).set("description", "calling active()").build();
+ *
+ * // add the entity and rollback
+ * Transaction txn = datastore.newTransaction();
+ * txn.put(entity);
+ * txn.rollback();
+ * // calling txn.commit() now would fail
+ * }
+ *
* @throws DatastoreException if transaction was already committed
*/
void rollback();
/**
* Returns {@code true} if the transaction is still active (was not committed or rolledback).
+ *
+ * Example of verifying if a Transaction is active + *
{@code
+ * // create an entity
+ * KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind");
+ * Key key = datastore.allocateId(keyFactory.newKey());
+ * Entity entity = Entity.builder(key).set("description", "calling active()").build();
+ *
+ * // create a transaction
+ * Transaction txn = datastore.newTransaction();
+ * // calling txn.active() now would return true
+ * try {
+ * // add the entity and commit
+ * txn.put(entity);
+ * txn.commit();
+ * } finally {
+ * // if committing succeeded
+ * // then txn.active() will be false
+ * if (txn.active()) {
+ * // otherwise it's true and we need to rollback
+ * txn.rollback();
+ * }
+ * }
+ * }
+ *
*/
@Override
boolean active();
diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/TransactionSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/TransactionSnippets.java
new file mode 100644
index 000000000000..222b2a53eff9
--- /dev/null
+++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/TransactionSnippets.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2016 Google Inc. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * EDITING INSTRUCTIONS
+ * This file is referenced in Transaction's javadoc. Any change to this file should be reflected in
+ * Transaction's javadoc.
+ */
+
+package com.google.cloud.examples.datastore.snippets;
+
+import com.google.cloud.datastore.Datastore;
+import com.google.cloud.datastore.DatastoreException;
+import com.google.cloud.datastore.Entity;
+import com.google.cloud.datastore.Key;
+import com.google.cloud.datastore.KeyFactory;
+import com.google.cloud.datastore.Transaction;
+
+/**
+ * This class contains a number of snippets for the {@link Transaction} interface.
+ */
+public class TransactionSnippets {
+
+ private final Transaction transaction;
+
+ public TransactionSnippets(Transaction transaction) {
+ this.transaction = transaction;
+ }
+
+ /**
+ * Example of committing a transaction
+ */
+ // [TARGET commit()]
+ public Key commitTransaction() {
+ Datastore datastore = transaction.datastore();
+ // [START commitTransaction]
+ // create an entity
+ KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind");
+ Key key = datastore.allocateId(keyFactory.newKey());
+ Entity entity = Entity.builder(key).set("description", "calling commit()").build();
+
+ // add the entity and commit
+ Transaction txn = datastore.newTransaction();
+ try {
+ txn.put(entity);
+ txn.commit();
+ } catch (DatastoreException ex) {
+ // handle exception
+ }
+ // [END commitTransaction]
+ return key;
+ }
+
+ /**
+ * Example of rolling back a Transaction
+ */
+ // [TARGET rollback()]
+ public Key rollbackTransaction() {
+ Datastore datastore = transaction.datastore();
+ // [START rollbackTransaction]
+ // create an entity
+ KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind");
+ Key key = datastore.allocateId(keyFactory.newKey());
+ Entity entity = Entity.builder(key).set("description", "calling active()").build();
+
+ // add the entity and rollback
+ Transaction txn = datastore.newTransaction();
+ txn.put(entity);
+ txn.rollback();
+ // calling txn.commit() now would fail
+ // [END rollbackTransaction]
+ return key;
+ }
+
+ /**
+ * Example of verifying if a Transaction is active
+ */
+ // [TARGET active()]
+ public Key activeTransaction() {
+ Datastore datastore = transaction.datastore();
+ // [START activeTransaction]
+ // create an entity
+ KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind");
+ Key key = datastore.allocateId(keyFactory.newKey());
+ Entity entity = Entity.builder(key).set("description", "calling active()").build();
+
+ // create a transaction
+ Transaction txn = datastore.newTransaction();
+ // calling txn.active() now would return true
+ try {
+ // add the entity and commit
+ txn.put(entity);
+ txn.commit();
+ } finally {
+ // if committing succeeded
+ // then txn.active() will be false
+ if (txn.active()) {
+ // otherwise it's true and we need to rollback
+ txn.rollback();
+ }
+ }
+ // [END activeTransaction]
+ return key;
+ }
+}
\ No newline at end of file
diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/datastore/snippets/ITTransactionSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/datastore/snippets/ITTransactionSnippets.java
new file mode 100644
index 000000000000..5f5a7ed4df9a
--- /dev/null
+++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/datastore/snippets/ITTransactionSnippets.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2016 Google Inc. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.examples.datastore.snippets;
+
+import com.google.cloud.datastore.Datastore;
+import com.google.cloud.datastore.DatastoreOptions;
+import com.google.cloud.datastore.Entity;
+import com.google.cloud.datastore.Key;
+import com.google.cloud.datastore.Transaction;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class ITTransactionSnippets {
+
+ private static Datastore datastore;
+ private static Transaction transaction;
+ private static TransactionSnippets transactionSnippets;
+
+ @BeforeClass
+ public static void beforeClass() {
+ datastore = DatastoreOptions.defaultInstance().service();
+ transaction = datastore.newTransaction();
+ transactionSnippets = new TransactionSnippets(transaction);
+ }
+
+ @Test
+ public void testCommitTransaction() {
+ Key key = transactionSnippets.commitTransaction();
+ Entity result = datastore.get(key);
+ assertNotNull(result);
+ datastore.delete(key);
+ }
+
+ @Test
+ public void testRollbackTransaction() {
+ Key key = transactionSnippets.rollbackTransaction();
+ Entity result = datastore.get(key);
+ assertNull(result);
+ if (result != null) {
+ datastore.delete(key);
+ }
+ }
+
+ @Test
+ public void testActiveTransaction() {
+ Key key = transactionSnippets.activeTransaction();
+ Entity result = datastore.get(key);
+ assertNotNull(result);
+ datastore.delete(key);
+ }
+}
\ No newline at end of file