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..1ac52ec1a3f8 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,21 @@ 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", "commit()").build();
+ * // add the entity and commit
+ * try {
+ * transaction.put(entity);
+ * transaction.commit();
+ * } catch (DatastoreException ex) {
+ * // handle exception
+ * }
+ * }
+ *
* @throws DatastoreException if could not commit the transaction or if no longer active
*/
Response commit();
@@ -112,12 +127,47 @@ 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", "rollback()").build();
+ *
+ * // add the entity and rollback
+ * transaction.put(entity);
+ * transaction.rollback();
+ * // calling transaction.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", "active()").build();
+ * // calling transaction.active() now would return true
+ * try {
+ * // add the entity and commit
+ * transaction.put(entity);
+ * transaction.commit();
+ * } finally {
+ * // if committing succeeded
+ * // then transaction.active() will be false
+ * if (transaction.active()) {
+ * // otherwise it's true and we need to rollback
+ * transaction.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..e81911992ac2
--- /dev/null
+++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/TransactionSnippets.java
@@ -0,0 +1,112 @@
+/*
+ * 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 commit() {
+ Datastore datastore = transaction.datastore();
+ // [START commit]
+ // create an entity
+ KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind");
+ Key key = datastore.allocateId(keyFactory.newKey());
+ Entity entity = Entity.builder(key).set("description", "commit()").build();
+ // add the entity and commit
+ try {
+ transaction.put(entity);
+ transaction.commit();
+ } catch (DatastoreException ex) {
+ // handle exception
+ }
+ // [END commit]
+ return key;
+ }
+
+ /**
+ * Example of rolling back a transaction.
+ */
+ // [TARGET rollback()]
+ public Key rollback() {
+ Datastore datastore = transaction.datastore();
+ // [START rollback]
+ // create an entity
+ KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind");
+ Key key = datastore.allocateId(keyFactory.newKey());
+ Entity entity = Entity.builder(key).set("description", "rollback()").build();
+
+ // add the entity and rollback
+ transaction.put(entity);
+ transaction.rollback();
+ // calling transaction.commit() now would fail
+ // [END rollback]
+ return key;
+ }
+
+ /**
+ * Example of verifying if a transaction is active.
+ */
+ // [TARGET active()]
+ public Key active() {
+ Datastore datastore = transaction.datastore();
+ // [START active]
+ // create an entity
+ KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind");
+ Key key = datastore.allocateId(keyFactory.newKey());
+ Entity entity = Entity.builder(key).set("description", "active()").build();
+ // calling transaction.active() now would return true
+ try {
+ // add the entity and commit
+ transaction.put(entity);
+ transaction.commit();
+ } finally {
+ // if committing succeeded
+ // then transaction.active() will be false
+ if (transaction.active()) {
+ // otherwise it's true and we need to rollback
+ transaction.rollback();
+ }
+ }
+ // [END active]
+ return key;
+ }
+}
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..dab72d63857f
--- /dev/null
+++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/datastore/snippets/ITTransactionSnippets.java
@@ -0,0 +1,68 @@
+/*
+ * 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 static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+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 org.junit.BeforeClass;
+import org.junit.Test;
+
+public class ITTransactionSnippets {
+
+ private static Datastore datastore;
+
+ @BeforeClass
+ public static void beforeClass() {
+ datastore = DatastoreOptions.defaultInstance().service();
+ }
+
+ @Test
+ public void testCommit() {
+ Transaction transaction = datastore.newTransaction();
+ TransactionSnippets transactionSnippets = new TransactionSnippets(transaction);
+ Key key = transactionSnippets.commit();
+ Entity result = datastore.get(key);
+ assertNotNull(result);
+ datastore.delete(key);
+ }
+
+ @Test
+ public void testRollback() {
+ Transaction transaction = datastore.newTransaction();
+ TransactionSnippets transactionSnippets = new TransactionSnippets(transaction);
+ Key key = transactionSnippets.rollback();
+ Entity result = datastore.get(key);
+ assertNull(result);
+ }
+
+ @Test
+ public void testActive() {
+ Transaction transaction = datastore.newTransaction();
+ TransactionSnippets transactionSnippets = new TransactionSnippets(transaction);
+ Key key = transactionSnippets.active();
+ Entity result = datastore.get(key);
+ assertNotNull(result);
+ datastore.delete(key);
+ }
+}