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