public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { HandlerMethod hm = (HandlerMethod) handler; Class<?> clazz = hm.getBeanType(); if (CompensableCoordinatorController.class.equals(clazz)) { return; } else if (ErrorController.class.isInstance(hm.getBean())) { return; } String transactionStr = request.getHeader(HEADER_TRANCACTION_KEY); if (StringUtils.isBlank(transactionStr)) { return; } Compensable annotation = clazz.getAnnotation(Compensable.class); if (annotation == null) { return; } SpringCloudBeanRegistry beanRegistry = SpringCloudBeanRegistry.getInstance(); CompensableBeanFactory beanFactory = beanRegistry.getBeanFactory(); CompensableManager compensableManager = beanFactory.getCompensableManager(); TransactionInterceptor transactionInterceptor = beanFactory.getTransactionInterceptor(); CompensableTransaction compensable = compensableManager.getCompensableTransactionQuietly(); TransactionContext transactionContext = compensable.getTransactionContext(); byte[] byteArray = CommonUtils.serializeObject(transactionContext); String compensableStr = ByteUtils.byteArrayToString(byteArray); response.addHeader(HEADER_TRANCACTION_KEY, compensableStr); response.addHeader(HEADER_PROPAGATION_KEY, this.identifier); TransactionResponseImpl resp = new TransactionResponseImpl(); resp.setTransactionContext(transactionContext); resp.setSourceTransactionCoordinator(beanRegistry.getConsumeCoordinator(null)); transactionInterceptor.beforeSendResponse(resp); }
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HandlerMethod hm = (HandlerMethod) handler; Class<?> clazz = hm.getBeanType(); if (TransactionCoordinatorController.class.equals(clazz)) { return true; } else if (ErrorController.class.isInstance(hm.getBean())) { return true; } String transactionStr = request.getHeader(HEADER_TRANCACTION_KEY); if (StringUtils.isBlank(transactionStr)) { return true; } String propagationStr = request.getHeader(HEADER_PROPAGATION_KEY); String transactionText = StringUtils.trimToNull(transactionStr); String propagationText = StringUtils.trimToNull(propagationStr); SpringCloudBeanRegistry beanRegistry = SpringCloudBeanRegistry.getInstance(); TransactionBeanFactory beanFactory = beanRegistry.getBeanFactory(); TransactionInterceptor transactionInterceptor = beanFactory.getTransactionInterceptor(); byte[] byteArray = transactionText == null ? new byte[0] : ByteUtils.stringToByteArray(transactionText); TransactionContext transactionContext = null; if (byteArray != null && byteArray.length > 0) { transactionContext = (TransactionContext) CommonUtils.deserializeObject(byteArray); } TransactionRequestImpl req = new TransactionRequestImpl(); req.setTransactionContext(transactionContext); req.setTargetTransactionCoordinator(beanRegistry.getConsumeCoordinator(propagationText)); transactionInterceptor.afterReceiveRequest(req); return true; }
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { HandlerMethod hm = (HandlerMethod) handler; Class<?> clazz = hm.getBeanType(); if (TransactionCoordinatorController.class.equals(clazz)) { return; } else if (ErrorController.class.isInstance(hm.getBean())) { return; } String transactionText = request.getHeader(HEADER_TRANCACTION_KEY); if (StringUtils.isBlank(transactionText)) { return; } SpringCloudBeanRegistry beanRegistry = SpringCloudBeanRegistry.getInstance(); TransactionBeanFactory beanFactory = beanRegistry.getBeanFactory(); TransactionManager transactionManager = beanFactory.getTransactionManager(); TransactionInterceptor transactionInterceptor = beanFactory.getTransactionInterceptor(); Transaction transaction = transactionManager.getTransactionQuietly(); TransactionContext transactionContext = transaction.getTransactionContext(); byte[] byteArray = CommonUtils.serializeObject(transactionContext); String transactionStr = ByteUtils.byteArrayToString(byteArray); response.addHeader(HEADER_TRANCACTION_KEY, transactionStr); response.addHeader(HEADER_PROPAGATION_KEY, this.identifier); TransactionResponseImpl resp = new TransactionResponseImpl(); resp.setTransactionContext(transactionContext); resp.setSourceTransactionCoordinator(beanRegistry.getConsumeCoordinator(null)); transactionInterceptor.beforeSendResponse(resp); }
@Bean @ConditionalOnMissingBean(value = ErrorController.class, search = SearchStrategy.CURRENT) public BasicErrorController jsonapiErrorController(ErrorAttributes errorAttributes) { return new CrnkErrorController(errorAttributes, this.serverProperties.getError(), this.errorViewResolvers); }
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HandlerMethod hm = (HandlerMethod) handler; Class<?> clazz = hm.getBeanType(); if (CompensableCoordinatorController.class.equals(clazz)) { return true; } else if (ErrorController.class.isInstance(hm.getBean())) { return true; } String transactionStr = request.getHeader(HEADER_TRANCACTION_KEY); if (StringUtils.isBlank(transactionStr)) { return true; } String propagationStr = request.getHeader(HEADER_PROPAGATION_KEY); String transactionText = StringUtils.trimToNull(transactionStr); String propagationText = StringUtils.trimToNull(propagationStr); Compensable annotation = clazz.getAnnotation(Compensable.class); if (annotation == null) { return true; } SpringCloudBeanRegistry beanRegistry = SpringCloudBeanRegistry.getInstance(); CompensableBeanFactory beanFactory = beanRegistry.getBeanFactory(); TransactionInterceptor transactionInterceptor = beanFactory.getTransactionInterceptor(); byte[] byteArray = transactionText == null ? new byte[0] : ByteUtils.stringToByteArray(transactionText); TransactionContext transactionContext = null; if (byteArray != null && byteArray.length > 0) { transactionContext = (TransactionContext) CommonUtils.deserializeObject(byteArray); } TransactionRequestImpl req = new TransactionRequestImpl(); req.setTransactionContext(transactionContext); req.setTargetTransactionCoordinator(beanRegistry.getConsumeCoordinator(propagationText)); transactionInterceptor.afterReceiveRequest(req); return true; }
@Bean @ConditionalOnMissingBean(DataResultErrorController.class) public ErrorController dataResultErrorController(ErrorAttributes errorAttributes){ return new DataResultErrorController(errorAttributes, this.serverProperties.getError(), this.errorViewResolvers); }