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));