This is an automated email from the ASF dual-hosted git repository. ningjiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git
commit ed86c2e8aa4e665f41f4e4eca11ed79bb35b624d Author: Eric Lee <[email protected]> AuthorDate: Tue Dec 26 16:41:37 2017 +0800 SCB-96 retrieve ids in header and put it into omega context Signed-off-by: Eric Lee <[email protected]> --- .../saga/omega/transaction/TxEndedEvent.java | 4 +- .../saga/omega/transaction/TxStartedEvent.java | 4 +- .../TransactionHandlerInterceptor.java | 39 +++---- .../omega/transport/resttemplate/WebConfig.java | 14 +-- .../TransactionHandlerInterceptorTest.java | 113 ++++----------------- 5 files changed, 44 insertions(+), 130 deletions(-) diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java index c24c1b3..6cc8f79 100644 --- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java +++ b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java @@ -17,8 +17,8 @@ package io.servicecomb.saga.omega.transaction; -public class TxEndedEvent extends TxEvent { - public TxEndedEvent(String globalTxId, String localTxId, String parentTxId) { +class TxEndedEvent extends TxEvent { + TxEndedEvent(String globalTxId, String localTxId, String parentTxId) { super(globalTxId, localTxId, parentTxId); } } diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java index c278f54..830104f 100644 --- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java +++ b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java @@ -17,9 +17,9 @@ package io.servicecomb.saga.omega.transaction; -public class TxStartedEvent extends TxEvent { +class TxStartedEvent extends TxEvent { - public TxStartedEvent(String globalTxId, String localTxId, String parentTxId, Object[] payloads) { + TxStartedEvent(String globalTxId, String localTxId, String parentTxId, Object[] payloads) { super(globalTxId, localTxId, parentTxId, payloads); } } diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java index 56df07d..6363e4f 100644 --- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java +++ b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java @@ -33,55 +33,42 @@ import org.slf4j.LoggerFactory; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; -import io.servicecomb.saga.omega.transaction.MessageSender; -import io.servicecomb.saga.omega.transaction.MessageSerializer; -import io.servicecomb.saga.omega.transaction.TxEndedEvent; -import io.servicecomb.saga.omega.transaction.TxStartedEvent; +import io.servicecomb.saga.omega.context.OmegaContext; public class TransactionHandlerInterceptor implements HandlerInterceptor { private static Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private final MessageSender sender; + private final OmegaContext omegaContext; - private final MessageSerializer serializer; - - public TransactionHandlerInterceptor(MessageSender sender, MessageSerializer serializer) { - this.sender = sender; - this.serializer = serializer; + public TransactionHandlerInterceptor(OmegaContext omegaContext) { + this.omegaContext = omegaContext; } @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String globalTxId = request.getHeader(GLOBAL_TX_ID_KEY); if (globalTxId == null) { LOG.info("no such header: {}", GLOBAL_TX_ID_KEY); + } else { + omegaContext.setGlobalTxId(globalTxId); } - String localTxId = request.getHeader(LOCAL_TX_ID_KEY); - if (localTxId == null) { + String parentTxId = request.getHeader(LOCAL_TX_ID_KEY); + if (parentTxId == null) { LOG.info("no such header: {}", LOCAL_TX_ID_KEY); + } else { + omegaContext.setParentTxId(parentTxId); } - // TODO: 12/25/2017 which content should be inside payloads? - sender.send(serializer.serialize(new TxStartedEvent(globalTxId, localTxId, null, null))); return true; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, - ModelAndView modelAndView) throws Exception { + ModelAndView modelAndView) { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, - Exception e) throws Exception { - String globalTxId = request.getHeader(GLOBAL_TX_ID_KEY); - if (globalTxId == null) { - LOG.info("no such header: {}", GLOBAL_TX_ID_KEY); - } - String localTxId = request.getHeader(LOCAL_TX_ID_KEY); - if (localTxId == null) { - LOG.info("no such header: {}", LOCAL_TX_ID_KEY); - } - sender.send(serializer.serialize(new TxEndedEvent(globalTxId, localTxId, null))); + Exception e) { } } diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/WebConfig.java b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/WebConfig.java index 7d4fe7f..7650d3c 100644 --- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/WebConfig.java +++ b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/WebConfig.java @@ -26,25 +26,21 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; -import io.servicecomb.saga.omega.transaction.MessageSender; -import io.servicecomb.saga.omega.transaction.MessageSerializer; +import io.servicecomb.saga.omega.context.OmegaContext; @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { - private MessageSender sender; - - private MessageSerializer serializer; + private final OmegaContext omegaContext; @Autowired - public WebConfig(MessageSender sender, MessageSerializer serializer) { - this.sender = sender; - this.serializer = serializer; + public WebConfig(OmegaContext omegaContext) { + this.omegaContext = omegaContext; } @Override public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(new TransactionHandlerInterceptor(sender, serializer)); + registry.addInterceptor(new TransactionHandlerInterceptor(omegaContext)); } } diff --git a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java b/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java index 6d447f5..a6c29cb 100644 --- a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java +++ b/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java @@ -21,132 +21,63 @@ package io.servicecomb.saga.omega.transport.resttemplate; import static io.servicecomb.saga.omega.transport.resttemplate.TransactionClientHttpRequestInterceptor.GLOBAL_TX_ID_KEY; import static io.servicecomb.saga.omega.transport.resttemplate.TransactionClientHttpRequestInterceptor.LOCAL_TX_ID_KEY; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.junit.After; +import org.junit.Before; import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.servlet.HandlerInterceptor; -import io.servicecomb.saga.omega.transaction.MessageSender; -import io.servicecomb.saga.omega.transaction.MessageSerializer; -import io.servicecomb.saga.omega.transport.resttemplate.TransactionHandlerInterceptorTest.MessageConfig; +import io.servicecomb.saga.omega.context.OmegaContext; -@RunWith(SpringRunner.class) -@Import({MessageConfig.class}) public class TransactionHandlerInterceptorTest { - private static final String TX_STARTED_EVENT = "TxStartedEvent"; - private static final String TX_ENDED_EVENT = "TxEndedEvent"; - private static final String globalTxId = UUID.randomUUID().toString(); - private static final String localTxId = UUID.randomUUID().toString(); - @Autowired - private MessageSender sender; + private static final String globalTxId = UUID.randomUUID().toString(); - @Autowired - private MessageSerializer serializer; + private static final String localTxId = UUID.randomUUID().toString(); - @Autowired - private TransactionHandlerInterceptor requestInterceptor; + private final OmegaContext omegaContext = new OmegaContext(); - @Autowired - private List<byte[]> messages; + private HandlerInterceptor requestInterceptor = new TransactionHandlerInterceptor(omegaContext); private HttpServletRequest request = mock(HttpServletRequest.class); private HttpServletResponse response = mock(HttpServletResponse.class); - @After - public void tearDown() throws Exception { - messages.clear(); + @Before + public void setUp() { + omegaContext.setGlobalTxId(null); + omegaContext.setLocalTxId(null); + omegaContext.setParentTxId(null); } @Test - public void preInterceptHeaderValueAndSendOut() throws Exception { + public void setUpOmegaContextInTransactionRequest() throws Exception { when(request.getHeader(GLOBAL_TX_ID_KEY)).thenReturn(globalTxId); when(request.getHeader(LOCAL_TX_ID_KEY)).thenReturn(localTxId); requestInterceptor.preHandle(request, response, null); - assertThat(messages.size(), is(1)); - String deserializedString = new String(messages.get(0)); - assertThat(deserializedString.contains(TX_STARTED_EVENT), is(true)); - assertThat(deserializedString.startsWith(globalTxId), is(true)); - assertThat(deserializedString.contains(localTxId), is(true)); + assertThat(omegaContext.globalTxId(), is(globalTxId)); + assertThat(omegaContext.parentTxId(), is(localTxId)); } @Test - public void postInterceptHeaderValueAndSendOut() throws Exception { - when(request.getHeader(GLOBAL_TX_ID_KEY)).thenReturn(globalTxId); - when(request.getHeader(LOCAL_TX_ID_KEY)).thenReturn(localTxId); - - requestInterceptor.afterCompletion(request, response, null, null); + public void doNothingInNonTransactionRequest() throws Exception { + when(request.getHeader(GLOBAL_TX_ID_KEY)).thenReturn(null); + when(request.getHeader(LOCAL_TX_ID_KEY)).thenReturn(null); - assertThat(messages.size(), is(1)); - String deserializedString = new String(messages.get(0)); - assertThat(deserializedString.contains(TX_ENDED_EVENT), is(true)); - assertThat(deserializedString.startsWith(globalTxId), is(true)); - assertThat(deserializedString.contains(localTxId), is(true)); - } - - @Configuration - static class MessageConfig { - private final List<byte[]> messages = new ArrayList<>(); - - @Bean - List<byte[]> messages() { - return messages; - } - - @Bean - MessageSender sender() { - return messages::add; - } - - @Bean - MessageSerializer serializer() { - return event -> { - if (TX_STARTED_EVENT.equals(event.type())) { - return txStartedEvent(event.globalTxId(), - event.localTxId(), - event.parentTxId(), - event.payloads()).getBytes(); - } - return txEndedEvent(event.globalTxId(), - event.localTxId(), - event.parentTxId()).getBytes(); - }; - } - - @Bean - HandlerInterceptor handlerInterceptor(MessageSender sender, MessageSerializer serializer) { - return new TransactionHandlerInterceptor(sender, serializer); - } - } - - private static String txStartedEvent(String globalTxId, - String localTxId, - String parentTxId, - Object[] payloads) { - return globalTxId + ":" + localTxId + ":" + parentTxId + ":" + TX_STARTED_EVENT + ":" + Arrays.toString(payloads); - } + requestInterceptor.preHandle(request, response, null); - private static String txEndedEvent(String globalTxId, String localTxId, String parentTxId) { - return globalTxId + ":" + localTxId + ":" + parentTxId + ":" + TX_ENDED_EVENT; + assertThat(omegaContext.globalTxId(), is(nullValue())); + assertThat(omegaContext.parentTxId(), is(nullValue())); + assertThat(omegaContext.localTxId(), is(nullValue())); } } \ No newline at end of file -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
