This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch SCB-1011
in repository https://gitbox.apache.org/repos/asf/servicecomb-pack.git

commit 00a7f2c4fa4e109cce8c0d73ec3b709783b45946
Author: Willem Jiang <[email protected]>
AuthorDate: Wed Nov 6 14:08:40 2019 +0800

    SCB-1011 Added a NPE check in TransactionAspect
---
 .../pack/omega/transaction/TransactionAspect.java            |  5 ++++-
 .../pack/omega/transaction/TransactionAspectTest.java        | 12 ++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git 
a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspect.java
 
b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspect.java
index 7632e7c..d133cac 100644
--- 
a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspect.java
+++ 
b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspect.java
@@ -55,7 +55,10 @@ public class TransactionAspect extends 
TransactionContextHelper {
     if (transactionContext != null) {
       populateOmegaContext(context, transactionContext);
     }
-
+    // SCB-1011 Need to check if the globalTxId transaction is null to avoid 
the message sending failure
+    if (context.globalTxId() == null) {
+      throw new OmegaException("Cannot find the globalTxId from OmegaContext. 
Please using @SagaStart to start a global transaction.");
+    }
     String localTxId = context.localTxId();
     context.newLocalTxId();
     LOG.debug("Updated context {} for compensable method {} ", context, 
method.toString());
diff --git 
a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspectTest.java
 
b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspectTest.java
index 49995ac..5705089 100644
--- 
a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspectTest.java
+++ 
b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspectTest.java
@@ -22,6 +22,7 @@ import static org.hamcrest.core.Is.is;
 import static org.hamcrest.core.IsInstanceOf.instanceOf;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -143,6 +144,17 @@ public class TransactionAspectTest {
   }
 
   @Test
+  public void globalTxIsNotSet() throws Throwable {
+    omegaContext.setGlobalTxId(null);
+    try {
+      aspect.advise(joinPoint, compensable);
+      fail("Expect exception here");
+    } catch (OmegaException ex) {
+      assertThat(ex.getMessage(), is("Cannot find the globalTxId from 
OmegaContext. Please using @SagaStart to start a global transaction."));
+    }
+  }
+
+  @Test
   public void newLocalTxIdInCompensable() throws Throwable {
     aspect.advise(joinPoint, compensable);
     assertThat(messages.size(), is(2));

Reply via email to