Merge pull request #585 from apache/SCB-1011

SCB-1011 Added a NPE check in TransactionAspect
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 @@
     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.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 @@
   }
 
   @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));