beans = applicationContext.getBeansOfType(RegistryConfig.class);
- RegistryConfig registryConfig = null;
- if(beans!=null){
- String defaultKey = "default";
- for(String key:beans.keySet()){
- defaultKey = key;
- }
-
- registryConfig = beans.get(defaultKey);
- }
- return registryConfig;
- }
-
- private String host = null;
-
- @Override
- public String getModelName() {
- return applicationConfig.getName();
- }
-
-
- private String getIp() {
- if (host == null) {
- try {
- host = InetAddress.getLocalHost().getHostAddress();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- }
- }
- return host;
- }
-
- @Override
- public String getUniqueKey() {
- String address = getIp() + getPort();
- return MD5Util.md5(address.getBytes());
- }
-
-
- @Override
- public String getIpAddress() {
- return getIp() + ":" + getPort();
- }
-
- private int getPort(){
- if(providerConfig()!=null&&providerConfig().getPort()!=null){
- return providerConfig().getPort();
- }
-
- RegistryConfig registryConfig = getRegistryConfig();
- if(registryConfig!=null&®istryConfig.getPort()!=null){
- return registryConfig.getPort();
- }
- return 20880;
- }
-}
diff --git a/transaction-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter b/transaction-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter
deleted file mode 100644
index 6b59bf1fc..000000000
--- a/transaction-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter
+++ /dev/null
@@ -1 +0,0 @@
-transactionFilter=com.codingapi.tx.dubbo.filter.TransactionFilter
\ No newline at end of file
diff --git a/transaction-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.cluster.LoadBalance b/transaction-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.cluster.LoadBalance
deleted file mode 100644
index 7f8ebadc0..000000000
--- a/transaction-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.cluster.LoadBalance
+++ /dev/null
@@ -1,4 +0,0 @@
-lcn_random = com.codingapi.tx.dubbo.balance.RandomLoadBalanceProxy
-lcn_roundrobin = com.codingapi.tx.dubbo.balance.RoundRobinLoadBalanceProxy
-lcn_leastactive = com.codingapi.tx.dubbo.balance.LeastActiveLoadBalanceProxy
-lcn_consistenthash = com.codingapi.tx.dubbo.balance.ConsistentHashLoadBalanceProxy
\ No newline at end of file
diff --git a/transaction-dubbo/src/main/resources/banner.txt b/transaction-dubbo/src/main/resources/banner.txt
deleted file mode 100644
index 51d683404..000000000
--- a/transaction-dubbo/src/main/resources/banner.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-
- >=> >=> >==> >=>
- >=> >=> >=> >> >=> >=>
- >=> >=> >=> >=> >=>
- >=> >=> >=> >=>>=>
- >=> >=> >=> > >=>
- >=> >=> >=> >=> >>=>
- >=======> >===> >=> >=>
-
- LCN-Client version:4.1.0
-
-
-
diff --git a/transaction-motan/pom.xml b/transaction-motan/pom.xml
deleted file mode 100644
index a922488a5..000000000
--- a/transaction-motan/pom.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
- 4.0.0
-
-
-
- com.codingapi
- tx-lcn
- 4.2.0-SNAPSHOT
-
-
- com.codingapi
- transaction-motan
- ${lcn.last.version}
-
-
- transaction-motan
- https://github.com/codingapi/tx-lcn
-
- transaction-motan project for Spring Boot
-
-
-
-
- michael
- zfvip_it@163.com
-
- developer
-
- +8
-
-
-
-
- 1.1.0
-
-
-
-
- com.codingapi
- tx-client
- ${lcn.last.version}
-
-
-
-
- com.weibo
- motan-core
- ${motan.versoin}
-
-
-
- com.weibo
- motan-springsupport
- ${motan.versoin}
-
-
-
-
-
\ No newline at end of file
diff --git a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/ActiveWeightLoadBalanceProxy.java b/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/ActiveWeightLoadBalanceProxy.java
deleted file mode 100644
index 395375f17..000000000
--- a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/ActiveWeightLoadBalanceProxy.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.codingapi.tx.motan.balance;
-
-import com.weibo.api.motan.cluster.loadbalance.ActiveWeightLoadBalance;
-import com.weibo.api.motan.common.MotanConstants;
-import com.weibo.api.motan.core.extension.Activation;
-import com.weibo.api.motan.core.extension.SpiMeta;
-import com.weibo.api.motan.rpc.Referer;
-import com.weibo.api.motan.rpc.Request;
-
-import java.util.List;
-
-/**
- * "低并发优化" 负载均衡代理
- *
- * @author 张峰 zfvip_it@163.com
- * 2017/12/1 10:42
- */
-@SpiMeta(name = "activeWeightLcn")
-@Activation(key = {MotanConstants.NODE_TYPE_SERVICE, MotanConstants.NODE_TYPE_REFERER})
-public class ActiveWeightLoadBalanceProxy extends ActiveWeightLoadBalance {
-
- private LCNBalanceProxy lcnBalanceProxy = new LCNBalanceProxy();
-
- @Override
- protected Referer doSelect(Request request) {
- return lcnBalanceProxy.proxy(getReferers(),super.doSelect(request));
- }
-
- @Override
- protected void doSelectToHolder(Request request, List refersHolder) {
- super.doSelectToHolder(request, refersHolder);
- refersHolder.set(0, lcnBalanceProxy.proxy(getReferers(),super.doSelect(request)));
- }
-}
diff --git a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/ConfigurableWeightLoadBalanceProxy.java b/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/ConfigurableWeightLoadBalanceProxy.java
deleted file mode 100644
index ca1906eab..000000000
--- a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/ConfigurableWeightLoadBalanceProxy.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.codingapi.tx.motan.balance;
-
-import com.weibo.api.motan.cluster.loadbalance.ConfigurableWeightLoadBalance;
-import com.weibo.api.motan.common.MotanConstants;
-import com.weibo.api.motan.core.extension.Activation;
-import com.weibo.api.motan.core.extension.SpiMeta;
-import com.weibo.api.motan.rpc.Referer;
-import com.weibo.api.motan.rpc.Request;
-
-import java.util.List;
-
-/**
- * 权重可配置的负载均衡器
- *
- * @author 张峰 zfvip_it@163.com
- * 2017/12/1 10:44
- */
-@SpiMeta(name = "configurableWeightLcn")
-@Activation(key = {MotanConstants.NODE_TYPE_SERVICE, MotanConstants.NODE_TYPE_REFERER})
-public class ConfigurableWeightLoadBalanceProxy extends ConfigurableWeightLoadBalance {
-
- private LCNBalanceProxy lcnBalanceProxy = new LCNBalanceProxy();
-
- @Override
- protected Referer doSelect(Request request) {
- return lcnBalanceProxy.proxy(getReferers(),super.doSelect(request));
- }
-
- @Override
- protected void doSelectToHolder(Request request, List refersHolder) {
- super.doSelectToHolder(request, refersHolder);
- refersHolder.set(0, lcnBalanceProxy.proxy(getReferers(),super.doSelect(request)));
- }
-}
diff --git a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/ConsistentHashLoadBalanceProxy.java b/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/ConsistentHashLoadBalanceProxy.java
deleted file mode 100644
index 98c6b42ba..000000000
--- a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/ConsistentHashLoadBalanceProxy.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.codingapi.tx.motan.balance;
-
-import com.weibo.api.motan.cluster.loadbalance.ConsistentHashLoadBalance;
-import com.weibo.api.motan.common.MotanConstants;
-import com.weibo.api.motan.core.extension.Activation;
-import com.weibo.api.motan.core.extension.SpiMeta;
-import com.weibo.api.motan.rpc.Referer;
-import com.weibo.api.motan.rpc.Request;
-
-import java.util.List;
-
-/**
- * 一致性 Hash,相同参数的请求总是发到同一提供者
- *
- * @author 张峰 zfvip_it@163.com
- * 2017/12/1 10:44
- */
-@SpiMeta(name = "consistentLcn")
-@Activation(key = {MotanConstants.NODE_TYPE_SERVICE, MotanConstants.NODE_TYPE_REFERER})
-public class ConsistentHashLoadBalanceProxy extends ConsistentHashLoadBalance {
-
- private LCNBalanceProxy lcnBalanceProxy = new LCNBalanceProxy();
-
- @Override
- protected Referer doSelect(Request request) {
- return lcnBalanceProxy.proxy(getReferers(),super.doSelect(request));
- }
-
- @Override
- protected void doSelectToHolder(Request request, List refersHolder) {
- super.doSelectToHolder(request, refersHolder);
- refersHolder.set(0, lcnBalanceProxy.proxy(getReferers(),super.doSelect(request)));
- }
-}
diff --git a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/LCNBalanceProxy.java b/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/LCNBalanceProxy.java
deleted file mode 100644
index c7e9160dc..000000000
--- a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/LCNBalanceProxy.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.codingapi.tx.motan.balance;
-
-import com.codingapi.tx.aop.bean.TxTransactionLocal;
-import com.lorne.core.framework.utils.encode.MD5Util;
-import com.weibo.api.motan.rpc.Referer;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-
-/**
- * LCN负载均衡代理
- *
- * @author 张峰 zfvip_it@163.com
- * 2017/12/1 10:21
- */
-public class LCNBalanceProxy {
-
- private Logger logger = LoggerFactory.getLogger(LCNBalanceProxy.class);
-
- protected Referer proxy(List referers,Referer referer) {
- TxTransactionLocal txTransactionLocal = TxTransactionLocal.current();
- if (txTransactionLocal == null) {
- return referer;
- }
-
- try {
- logger.debug("LCNBalanceProxy - > start");
-
- String groupId = txTransactionLocal.getGroupId();
-
- String uniqueKey = referer.getInterface().getName();
-
- logger.debug("LCNBalanceProxy - > uniqueKey - >" + uniqueKey);
-
- String key = MD5Util.md5((groupId + "_" + uniqueKey).getBytes());
-
- Referer old = getReferer(txTransactionLocal,referers,key);
- if (old != null) {
- logger.debug("LCNBalanceProxy - > load old referer ");
-
- return old;
- }
-
- putReferer(key,txTransactionLocal,referer);
-
- logger.debug("LCNBalanceProxy - > load new referer ");
-
- return referer;
- }finally {
- logger.debug("LCNBalanceProxy - > end");
- }
- }
-
-
- private void putReferer(String key,TxTransactionLocal txTransactionLocal,Referer referer){
- String serviceName = referer.getInterface().getName();
- String address = referer.getUrl().getHost()+":"+referer.getUrl().getPort();
-
- String md5 = MD5Util.md5((address+serviceName).getBytes());
-
- logger.debug("putReferer->address->"+address+",md5-->"+md5);
-
- txTransactionLocal.putLoadBalance(key,md5);
- }
-
-
- private Referer getReferer(TxTransactionLocal txTransactionLocal,List referers,String key){
- String val = txTransactionLocal.getLoadBalance(key);
- if(StringUtils.isEmpty(val)){
- return null;
- }
- for(Referer invoker:referers){
- String serviceName = invoker.getInterface().getName();
- String address = invoker.getUrl().getHost()+":"+invoker.getUrl().getPort();
-
- String md5 = MD5Util.md5((address+serviceName).getBytes());
-
- logger.debug("getReferer->address->"+address+",md5-->"+md5);
-
- if(val.equals(md5)){
- return invoker;
- }
- }
- return null;
- }
-}
diff --git a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/LocalFirstLoadBalanceProxy.java b/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/LocalFirstLoadBalanceProxy.java
deleted file mode 100644
index ce2eb4b4a..000000000
--- a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/LocalFirstLoadBalanceProxy.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.codingapi.tx.motan.balance;
-
-import com.weibo.api.motan.cluster.loadbalance.LocalFirstLoadBalance;
-import com.weibo.api.motan.common.MotanConstants;
-import com.weibo.api.motan.core.extension.Activation;
-import com.weibo.api.motan.core.extension.SpiMeta;
-import com.weibo.api.motan.rpc.Referer;
-import com.weibo.api.motan.rpc.Request;
-
-import java.util.List;
-
-/**
- * "本地服务优先" 负载均衡代理
- *
- * @author 张峰 zfvip_it@163.com
- * 2017/12/1 10:46
- */
-@SpiMeta(name = "localFirstLcn")
-@Activation(key = {MotanConstants.NODE_TYPE_SERVICE, MotanConstants.NODE_TYPE_REFERER})
-public class LocalFirstLoadBalanceProxy extends LocalFirstLoadBalance {
-
- private LCNBalanceProxy lcnBalanceProxy = new LCNBalanceProxy();
-
- @Override
- protected Referer doSelect(Request request) {
- return lcnBalanceProxy.proxy(getReferers(),super.doSelect(request));
- }
-
- @Override
- protected void doSelectToHolder(Request request, List refersHolder) {
- super.doSelectToHolder(request, refersHolder);
- refersHolder.set(0, lcnBalanceProxy.proxy(getReferers(),super.doSelect(request)));
- }
-}
diff --git a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/RandomLoadBalanceProxy.java b/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/RandomLoadBalanceProxy.java
deleted file mode 100644
index bb3785e68..000000000
--- a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/RandomLoadBalanceProxy.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.codingapi.tx.motan.balance;
-
-import com.weibo.api.motan.cluster.loadbalance.RandomLoadBalance;
-import com.weibo.api.motan.common.MotanConstants;
-import com.weibo.api.motan.core.extension.Activation;
-import com.weibo.api.motan.core.extension.SpiMeta;
-import com.weibo.api.motan.rpc.Referer;
-import com.weibo.api.motan.rpc.Request;
-
-import java.util.List;
-
-/**
- * 随机,按权重设置随机概率
- *
- * @author 张峰 zfvip_it@163.com
- * 2017/12/1 10:46
- */
-@SpiMeta(name = "randomLcn")
-@Activation(key = {MotanConstants.NODE_TYPE_SERVICE, MotanConstants.NODE_TYPE_REFERER})
-public class RandomLoadBalanceProxy extends RandomLoadBalance {
-
- private LCNBalanceProxy lcnBalanceProxy = new LCNBalanceProxy();
-
- @Override
- protected Referer doSelect(Request request) {
- return lcnBalanceProxy.proxy(getReferers(),super.doSelect(request));
- }
-
- @Override
- protected void doSelectToHolder(Request request, List refersHolder) {
- super.doSelectToHolder(request, refersHolder);
- refersHolder.set(0, lcnBalanceProxy.proxy(getReferers(),super.doSelect(request)));
- }
-}
diff --git a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/RoundRobinLoadBalanceProxy.java b/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/RoundRobinLoadBalanceProxy.java
deleted file mode 100644
index 22edf5a5e..000000000
--- a/transaction-motan/src/main/java/com/codingapi/tx/motan/balance/RoundRobinLoadBalanceProxy.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.codingapi.tx.motan.balance;
-
-import com.weibo.api.motan.cluster.loadbalance.RoundRobinLoadBalance;
-import com.weibo.api.motan.common.MotanConstants;
-import com.weibo.api.motan.core.extension.Activation;
-import com.weibo.api.motan.core.extension.SpiMeta;
-import com.weibo.api.motan.rpc.Referer;
-import com.weibo.api.motan.rpc.Request;
-
-import java.util.List;
-
-/**
- * 轮循,按公约后的权重设置轮循比率
- *
- * @author 张峰 zfvip_it@163.com
- * 2017/12/1 10:47
- */
-@SpiMeta(name = "roundrobinLcn")
-@Activation(key = {MotanConstants.NODE_TYPE_SERVICE, MotanConstants.NODE_TYPE_REFERER})
-public class RoundRobinLoadBalanceProxy extends RoundRobinLoadBalance {
-
- private LCNBalanceProxy lcnBalanceProxy = new LCNBalanceProxy();
-
- @Override
- protected Referer doSelect(Request request) {
- return lcnBalanceProxy.proxy(getReferers(),super.doSelect(request));
- }
-
- @Override
- protected void doSelectToHolder(Request request, List refersHolder) {
- super.doSelectToHolder(request, refersHolder);
- refersHolder.set(0, lcnBalanceProxy.proxy(getReferers(),super.doSelect(request)));
- }
-}
diff --git a/transaction-motan/src/main/java/com/codingapi/tx/motan/filter/TransactionFilter.java b/transaction-motan/src/main/java/com/codingapi/tx/motan/filter/TransactionFilter.java
deleted file mode 100644
index 56bd7d381..000000000
--- a/transaction-motan/src/main/java/com/codingapi/tx/motan/filter/TransactionFilter.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.codingapi.tx.motan.filter;
-
-import com.codingapi.tx.aop.bean.TxTransactionLocal;
-import com.weibo.api.motan.common.MotanConstants;
-import com.weibo.api.motan.core.extension.Activation;
-import com.weibo.api.motan.core.extension.SpiMeta;
-import com.weibo.api.motan.filter.Filter;
-import com.weibo.api.motan.rpc.Caller;
-import com.weibo.api.motan.rpc.Request;
-import com.weibo.api.motan.rpc.Response;
-import com.weibo.api.motan.rpc.RpcContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Map;
-
-/**
- * motan拦截器
- *
- * @author 张峰 zfvip_it@163.com
- * 2017/11/17 15:38
- */
-@SpiMeta(name = "transaction")
-@Activation(key = {MotanConstants.NODE_TYPE_SERVICE, MotanConstants.NODE_TYPE_REFERER})
-public class TransactionFilter implements Filter {
-
- private Logger logger = LoggerFactory.getLogger(TransactionFilter.class);
-
- /**
- * 实现新浪的filter接口 rpc传参数
- * @param caller caller
- * @param request 请求
- * @return Response
- */
- public Response filter(Caller> caller, Request request) {
- TxTransactionLocal txTransactionLocal = TxTransactionLocal.current();
- if (txTransactionLocal != null) {
-
- request.setAttachment("tx-group", txTransactionLocal.getGroupId());
-
- logger.info("LCN-dubbo TxGroup info -> groupId:"+ txTransactionLocal.getGroupId()+",maxTimeOut:"+txTransactionLocal.getMaxTimeOut());
-
- } else {
- Map map = request.getAttachments();
- if (map != null && !map.isEmpty()) {
- if (map.containsKey("tx-group")) {
- RpcContext.getContext().putAttribute("tx-group", request.getAttachments().get("tx-group"));
- }
- }
- }
-
-
- return caller.call(request);
- }
-}
diff --git a/transaction-motan/src/main/java/com/codingapi/tx/motan/interceptor/TransactionAspect.java b/transaction-motan/src/main/java/com/codingapi/tx/motan/interceptor/TransactionAspect.java
deleted file mode 100644
index 0d91a2e9f..000000000
--- a/transaction-motan/src/main/java/com/codingapi/tx/motan/interceptor/TransactionAspect.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.codingapi.tx.motan.interceptor;
-
-import com.codingapi.tx.Constants;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.Ordered;
-import org.springframework.stereotype.Component;
-
-/**
- * LCN 事务拦截器
- * create by lorne on 2018/1/5
- */
-
-@Aspect
-@Component
-public class TransactionAspect implements Ordered {
-
- private Logger logger = LoggerFactory.getLogger(TransactionAspect.class);
-
- @Autowired
- private TxManagerInterceptor txManagerInterceptor;
-
-
- @Around("@annotation(com.codingapi.tx.annotation.TxTransaction)")
- public Object transactionRunning(ProceedingJoinPoint point)throws Throwable{
- logger.debug("annotation-TransactionRunning-start---->");
- Object obj = txManagerInterceptor.around(point);
- logger.debug("annotation-TransactionRunning-end---->");
- return obj;
- }
-
- @Around("this(com.codingapi.tx.annotation.ITxTransaction) && execution( * *(..))")
- public Object around(ProceedingJoinPoint point)throws Throwable{
- logger.debug("interface-ITransactionRunning-start---->");
- Object obj = txManagerInterceptor.around(point);
- logger.debug("interface-ITransactionRunning-end---->");
- return obj;
- }
-
-
- @Override
- public int getOrder() {
- return Constants.ASPECT_ORDER;
- }
-
-
-}
diff --git a/transaction-motan/src/main/java/com/codingapi/tx/motan/interceptor/TxManagerInterceptor.java b/transaction-motan/src/main/java/com/codingapi/tx/motan/interceptor/TxManagerInterceptor.java
deleted file mode 100644
index 20f71e3df..000000000
--- a/transaction-motan/src/main/java/com/codingapi/tx/motan/interceptor/TxManagerInterceptor.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.codingapi.tx.motan.interceptor;
-
-import com.codingapi.tx.aop.service.AspectBeforeService;
-import com.weibo.api.motan.rpc.RpcContext;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-
-/**
- * 类说明
- *
- * @author 张峰 zfvip_it@163.com
- * 2017/11/17 15:42
- */
-@Component
-public class TxManagerInterceptor {
-
- @Resource
- private AspectBeforeService aspectBeforeService;
-
-
- public Object around(ProceedingJoinPoint point) throws Throwable {
-
- String groupId = null;
- String mode = null;
- try {
- groupId = (String) RpcContext.getContext().getAttribute("tx-group");
- mode = (String) RpcContext.getContext().getAttribute("tx-mode");
- } catch (Exception e) {
- }
- return aspectBeforeService.around(groupId, point, mode);
- }
-}
diff --git a/transaction-motan/src/main/java/com/codingapi/tx/motan/listener/TransactionSocketListener.java b/transaction-motan/src/main/java/com/codingapi/tx/motan/listener/TransactionSocketListener.java
deleted file mode 100644
index 4a3f9fc5f..000000000
--- a/transaction-motan/src/main/java/com/codingapi/tx/motan/listener/TransactionSocketListener.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.codingapi.tx.motan.listener;
-
-import com.codingapi.tx.listener.service.InitService;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.stereotype.Component;
-
-/**
- * Created by lorne on 2017/7/1.
- */
-@Component
-public class TransactionSocketListener implements ApplicationContextAware {
-
-
- @Autowired
- private InitService initService;
-
-
- @Override
- public void setApplicationContext(ApplicationContext event) throws BeansException {
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- // 若连接不上txmanager start()方法将阻塞
- initService.start();
- }
- });
- thread.setName("TxInit-thread");
- thread.start();
- }
-
-}
diff --git a/transaction-motan/src/main/java/com/codingapi/tx/motan/service/impl/ModelNameServiceImpl.java b/transaction-motan/src/main/java/com/codingapi/tx/motan/service/impl/ModelNameServiceImpl.java
deleted file mode 100644
index 84d0c186d..000000000
--- a/transaction-motan/src/main/java/com/codingapi/tx/motan/service/impl/ModelNameServiceImpl.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.codingapi.tx.motan.service.impl;
-
-import com.codingapi.tx.listener.service.ModelNameService;
-import com.lorne.core.framework.utils.encode.MD5Util;
-import com.weibo.api.motan.config.springsupport.BasicServiceConfigBean;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-
-/**
- * 类说明
- *
- * @author 张峰 zfvip_it@163.com
- * 2017/11/17 13:30
- */
-@Service
-public class ModelNameServiceImpl implements ModelNameService {
-
- @Resource
- private BasicServiceConfigBean basicServiceConfigBean;
-
- @Resource
- private Environment environment;
-
- private String host = null;
-
- public String getModelName() {
- return environment.getProperty("tx.application");
- }
-
- public String getUniqueKey() {
- String address = getIp() + getPort();
- return MD5Util.md5(address.getBytes());
- }
-
- public String getIpAddress() {
- String address = getIp() + ":" + getPort();
- return address;
- }
-
- private String getIp() {
- if (host == null) {
- try {
- host = InetAddress.getLocalHost().getHostAddress();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- }
- }
- return host;
- }
-
- private String getPort() {
- String export = basicServiceConfigBean.getExport();
- if (StringUtils.isNotBlank(export)) {
- return export.split(":")[1];
- }
- return null;
- }
-
- /**
- * 超时时间
- *
- * @return 超时时间
- */
- public String getTimeOut() {
- return basicServiceConfigBean.getRequestTimeout().toString();
- }
-}
diff --git a/transaction-motan/src/main/resources/META-INF/services/com.weibo.api.motan.cluster.LoadBalance b/transaction-motan/src/main/resources/META-INF/services/com.weibo.api.motan.cluster.LoadBalance
deleted file mode 100644
index f43532524..000000000
--- a/transaction-motan/src/main/resources/META-INF/services/com.weibo.api.motan.cluster.LoadBalance
+++ /dev/null
@@ -1,6 +0,0 @@
-com.codingapi.tx.motan.balance.ActiveWeightLoadBalanceProxy
-com.codingapi.tx.motan.balance.LocalFirstLoadBalanceProxy
-com.codingapi.tx.motan.balance.RandomLoadBalanceProxy
-com.codingapi.tx.motan.balance.RoundRobinLoadBalanceProxy
-com.codingapi.tx.motan.balance.ConfigurableWeightLoadBalanceProxy
-com.codingapi.tx.motan.balance.ConsistentHashLoadBalanceProxy
\ No newline at end of file
diff --git a/transaction-motan/src/main/resources/META-INF/services/com.weibo.api.motan.filter.Filter b/transaction-motan/src/main/resources/META-INF/services/com.weibo.api.motan.filter.Filter
deleted file mode 100644
index 42974e950..000000000
--- a/transaction-motan/src/main/resources/META-INF/services/com.weibo.api.motan.filter.Filter
+++ /dev/null
@@ -1 +0,0 @@
-com.codingapi.tx.motan.filter.TransactionFilter
\ No newline at end of file
diff --git a/transaction-motan/src/main/resources/banner.txt b/transaction-motan/src/main/resources/banner.txt
deleted file mode 100644
index 51d683404..000000000
--- a/transaction-motan/src/main/resources/banner.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-
- >=> >=> >==> >=>
- >=> >=> >=> >> >=> >=>
- >=> >=> >=> >=> >=>
- >=> >=> >=> >=>>=>
- >=> >=> >=> > >=>
- >=> >=> >=> >=> >>=>
- >=======> >===> >=> >=>
-
- LCN-Client version:4.1.0
-
-
-
diff --git a/transaction-springcloud/.gitignore b/transaction-springcloud/.gitignore
deleted file mode 100644
index e371e574f..000000000
--- a/transaction-springcloud/.gitignore
+++ /dev/null
@@ -1,19 +0,0 @@
-.DS_Store
-node_modules/
-dist/
-npm-debug.log
-test/unit/coverage
-test/e2e/reports
-selenium-debug.log
-
-.classpath
-.project
-.settings/
-target/
-out/
-output/
-
-.idea/
-*.iml
-logging.path_IS_UNDEFINED/
-nohup.out
diff --git a/transaction-springcloud/pom.xml b/transaction-springcloud/pom.xml
index d5f04dcfe..4c890ce05 100644
--- a/transaction-springcloud/pom.xml
+++ b/transaction-springcloud/pom.xml
@@ -1,30 +1,22 @@
-
4.0.0
com.codingapi
tx-lcn
- 4.2.0-SNAPSHOT
+ 4.2.0
- com.codingapi
transaction-springcloud
- ${lcn.last.version}
-
transaction-springcloud
https://github.com/codingapi/tx-lcn
transaction-springcloud project for Spring Boot
-
- 1.3.2.RELEASE
- 4.3.7.RELEASE
-
-
-
@@ -34,23 +26,37 @@
- org.springframework.cloud
- spring-cloud-starter-feign
- ${spring-cloud.version}
-
-
- com.google.guava
- guava
-
-
+ org.springframework
+ spring-context
+ ${org.springframework-version}
+
+ com.netflix.ribbon
+ ribbon-core
+ 2.2.5
+
org.springframework
- spring-context
+ spring-web
${org.springframework-version}
-
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-ribbon
+ 2.0.1.RELEASE
+
+
+ com.netflix.feign
+ feign-core
+ 8.18.0
+ runtime
+
+
+ org.springframework.boot
+ spring-boot
+ ${spring-cloud.version}
+
diff --git a/transaction-springcloud/src/main/java/com/codingapi/tx/RequestInterceptorConfiguration.java b/transaction-springcloud/src/main/java/com/codingapi/tx/RequestInterceptorConfiguration.java
index 1b7c36f17..7aea96456 100644
--- a/transaction-springcloud/src/main/java/com/codingapi/tx/RequestInterceptorConfiguration.java
+++ b/transaction-springcloud/src/main/java/com/codingapi/tx/RequestInterceptorConfiguration.java
@@ -1,9 +1,12 @@
package com.codingapi.tx;
import com.codingapi.tx.springcloud.feign.TransactionRestTemplateInterceptor;
+import com.codingapi.tx.springcloud.http.TransactionHttpRequestInterceptor;
import feign.RequestInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
/**
* create by lorne on 2018/1/18
@@ -15,4 +18,13 @@ public class RequestInterceptorConfiguration {
public RequestInterceptor requestInterceptor(){
return new TransactionRestTemplateInterceptor();
}
+
+ @Bean
+ public TransactionHttpRequestInterceptor transactionHttpRequestInterceptor(@Autowired(required = false) RestTemplate restTemplate){
+ TransactionHttpRequestInterceptor transactionHttpRequestInterceptor = new TransactionHttpRequestInterceptor();
+ if(restTemplate != null){
+ restTemplate.getInterceptors().add(transactionHttpRequestInterceptor);
+ }
+ return transactionHttpRequestInterceptor;
+ }
}
diff --git a/transaction-springcloud/src/main/java/com/codingapi/tx/springcloud/interceptor/TransactionAspect.java b/transaction-springcloud/src/main/java/com/codingapi/tx/springcloud/interceptor/TransactionAspect.java
index 1b33e9c6b..aec99dd02 100644
--- a/transaction-springcloud/src/main/java/com/codingapi/tx/springcloud/interceptor/TransactionAspect.java
+++ b/transaction-springcloud/src/main/java/com/codingapi/tx/springcloud/interceptor/TransactionAspect.java
@@ -13,37 +13,40 @@
/**
* LCN 事务拦截器
* create by lorne on 2018/1/5
+ *
+ * @author Administrator
*/
-
@Aspect
@Component
-public class TransactionAspect implements Ordered {
+public class TransactionAspect implements Ordered
+{
private Logger logger = LoggerFactory.getLogger(TransactionAspect.class);
@Autowired
private TxManagerInterceptor txManagerInterceptor;
-
@Around("@annotation(com.codingapi.tx.annotation.TxTransaction)")
- public Object transactionRunning(ProceedingJoinPoint point)throws Throwable{
+ public Object transactionRunning(ProceedingJoinPoint point) throws Throwable
+ {
logger.debug("annotation-TransactionRunning-start---->");
- Object obj = txManagerInterceptor.around(point);
+ Object obj = txManagerInterceptor.around(point);
logger.debug("annotation-TransactionRunning-end---->");
return obj;
}
@Around("this(com.codingapi.tx.annotation.ITxTransaction) && execution( * *(..))")
- public Object around(ProceedingJoinPoint point)throws Throwable{
+ public Object around(ProceedingJoinPoint point) throws Throwable
+ {
logger.debug("interface-ITransactionRunning-start---->");
- Object obj = txManagerInterceptor.around(point);
+ Object obj = txManagerInterceptor.around(point);
logger.debug("interface-ITransactionRunning-end---->");
return obj;
}
-
@Override
- public int getOrder() {
+ public int getOrder()
+ {
return Constants.ASPECT_ORDER;
}
diff --git a/transaction-springcloud/src/main/java/com/codingapi/tx/springcloud/listener/ServerListener.java b/transaction-springcloud/src/main/java/com/codingapi/tx/springcloud/listener/ServerListener.java
index c6dab85f1..69c47aed3 100644
--- a/transaction-springcloud/src/main/java/com/codingapi/tx/springcloud/listener/ServerListener.java
+++ b/transaction-springcloud/src/main/java/com/codingapi/tx/springcloud/listener/ServerListener.java
@@ -4,42 +4,37 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.context.embedded.EmbeddedServletContainerInitializedEvent;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.web.context.WebServerInitializedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
-public class ServerListener implements ApplicationListener {
+public class ServerListener implements ApplicationListener {
private Logger logger = LoggerFactory.getLogger(ServerListener.class);
+ @Value("${server.port}")
private int serverPort;
@Autowired
private InitService initService;
@Override
- public void onApplicationEvent(EmbeddedServletContainerInitializedEvent event) {
- logger.info("onApplicationEvent -> onApplicationEvent. "+event.getEmbeddedServletContainer());
- this.serverPort = event.getEmbeddedServletContainer().getPort();
-
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- // 若连接不上txmanager start()方法将阻塞
- initService.start();
- }
+ public void onApplicationEvent(WebServerInitializedEvent event) {
+ logger.info("onApplicationEvent -> onApplicationEvent. "+event.getWebServer());
+ this.serverPort = event.getWebServer().getPort();
+
+ Thread thread = new Thread(() -> {
+ // 若连接不上txmanager start()方法将阻塞
+ initService.start();
});
thread.setName("TxInit-thread");
thread.start();
}
- public int getPort() {
- return this.serverPort;
- }
-
- public void setServerPort(int serverPort) {
- this.serverPort = serverPort;
+ public int getServerPort() {
+ return serverPort;
}
}
diff --git a/transaction-springcloud/src/main/java/com/codingapi/tx/springcloud/service/impl/ModelNameServiceImpl.java b/transaction-springcloud/src/main/java/com/codingapi/tx/springcloud/service/impl/ModelNameServiceImpl.java
index a9b6f9de4..5fff0e50a 100644
--- a/transaction-springcloud/src/main/java/com/codingapi/tx/springcloud/service/impl/ModelNameServiceImpl.java
+++ b/transaction-springcloud/src/main/java/com/codingapi/tx/springcloud/service/impl/ModelNameServiceImpl.java
@@ -44,7 +44,7 @@ private String getIp() {
}
private int getPort() {
- int port = serverListener.getPort();
+ int port = serverListener.getServerPort();
int count = 0;
while (port == 0) {
try {
@@ -52,7 +52,7 @@ private int getPort() {
} catch (InterruptedException e) {
e.printStackTrace();
}
- port = serverListener.getPort();
+ port = serverListener.getServerPort();
count++;
if(count==2000){
diff --git a/transaction-springcloud/src/main/resources/banner.txt b/transaction-springcloud/src/main/resources/banner.txt
index 51d683404..9161fc577 100644
--- a/transaction-springcloud/src/main/resources/banner.txt
+++ b/transaction-springcloud/src/main/resources/banner.txt
@@ -7,7 +7,7 @@
>=> >=> >=> >=> >>=>
>=======> >===> >=> >=>
- LCN-Client version:4.1.0
+ LCN-Client version:4.2.0
diff --git a/tx-client/.editorconfig b/tx-client/.editorconfig
deleted file mode 100644
index e291365a9..000000000
--- a/tx-client/.editorconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-root = true
-
-[*]
-charset = utf-8
-indent_style = space
-indent_size = 4
-end_of_line = lf
-insert_final_newline = true
-trim_trailing_whitespace = true
diff --git a/tx-client/.gitignore b/tx-client/.gitignore
deleted file mode 100644
index e371e574f..000000000
--- a/tx-client/.gitignore
+++ /dev/null
@@ -1,19 +0,0 @@
-.DS_Store
-node_modules/
-dist/
-npm-debug.log
-test/unit/coverage
-test/e2e/reports
-selenium-debug.log
-
-.classpath
-.project
-.settings/
-target/
-out/
-output/
-
-.idea/
-*.iml
-logging.path_IS_UNDEFINED/
-nohup.out
diff --git a/tx-client/pom.xml b/tx-client/pom.xml
index 7f206d268..f185e56e5 100644
--- a/tx-client/pom.xml
+++ b/tx-client/pom.xml
@@ -6,31 +6,30 @@
com.codingapi
tx-lcn
- 4.2.0-SNAPSHOT
+ 4.2.0
com.codingapi
tx-client
- ${lcn.last.version}
tx-client
https://github.com/codingapi/tx-lcn
tx-client project for Spring Boot
-
-
- 4.3.7.RELEASE
- 19.0
- 4.0.38
- 1.1.3
- 4.0.0
- 1.7.7
-
-
-
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+ ${spring-cloud-starter-openfeign.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-ribbon
+ 1.4.4.RELEASE
+
+
com.github.1991wangliang
lorne_core
@@ -43,19 +42,17 @@
4.1.12.Final
-
org.aspectj
aspectjweaver
- 1.8.4
+ ${org.aspectj.version}
org.aspectj
aspectjrt
- 1.8.4
+ ${org.aspectj.version}
-
org.slf4j
slf4j-api
@@ -77,22 +74,18 @@
${org.slf4j-version}
-
-
javax.servlet
javax.servlet-api
3.1.0
-
org.springframework
spring-context
${org.springframework-version}
-
com.caucho
hessian
diff --git a/tx-client/src/main/java/com/codingapi/tx/Constants.java b/tx-client/src/main/java/com/codingapi/tx/Constants.java
index b4650b9b0..7dded7743 100644
--- a/tx-client/src/main/java/com/codingapi/tx/Constants.java
+++ b/tx-client/src/main/java/com/codingapi/tx/Constants.java
@@ -17,9 +17,6 @@ public class Constants {
/**
* 主切面的 order值
- * 主切面一定要在 @Transaction 切面的外层(ASPECT_ORDER 小于 标签中的order )
- * 主切面需要能接受到异常。接收到异常才会触发回滚
- * 这意味着自定义的切面若catch了异常且不向外传递,那么这个切面需要在主切面的外层(自定义切面order 小于 ASPECT_ORDER)
*/
public static final int ASPECT_ORDER = 1000;
diff --git a/tx-client/src/main/java/com/codingapi/tx/MQTxManagerFegin.java b/tx-client/src/main/java/com/codingapi/tx/MQTxManagerFegin.java
new file mode 100644
index 000000000..c6ca8ae9b
--- /dev/null
+++ b/tx-client/src/main/java/com/codingapi/tx/MQTxManagerFegin.java
@@ -0,0 +1,41 @@
+package com.codingapi.tx;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author yizhishang
+ */
+@FeignClient(value = "tx-manager")
+public interface MQTxManagerFegin {
+
+ /**
+ * 检查并清理事务数据
+ * @param groupId 事务组id
+ * @param waitTaskId 任务id
+ * @return 事务状态
+ */
+ @GetMapping("/tx/manager/cleanNotifyTransactionHttp")
+ String cleanNotifyTransactionHttp(@RequestParam(value = "groupId") String groupId, @RequestParam(value = "waitTaskId") String waitTaskId);
+
+ /**
+ * 记录补偿事务数据到tm
+ */
+ @PostMapping("/tx/manager/sendCompensateMsg")
+ String sendCompensateMsg(@RequestParam("currentTime") long currentTime, @RequestParam("groupId") String groupId,
+ @RequestParam("model") String model, @RequestParam("address") String address,
+ @RequestParam("uniqueKey") String uniqueKey,
+ @RequestParam("className") String className, @RequestParam("methodStr") String methodStr,
+ @RequestParam("data") String data, @RequestParam("time") long time,
+ @RequestParam("startError") int startError);
+
+ /**
+ * 获取TM服务地址
+ * @return txServer
+ */
+ @GetMapping("/tx/manager/getServer")
+ String getServer();
+
+}
diff --git a/tx-client/src/main/java/com/codingapi/tx/aop/bean/TxCompensateLocal.java b/tx-client/src/main/java/com/codingapi/tx/aop/bean/TxCompensateLocal.java
index c4053460a..19037daf2 100644
--- a/tx-client/src/main/java/com/codingapi/tx/aop/bean/TxCompensateLocal.java
+++ b/tx-client/src/main/java/com/codingapi/tx/aop/bean/TxCompensateLocal.java
@@ -6,7 +6,7 @@
*/
public class TxCompensateLocal {
- private final static ThreadLocal currentLocal = new InheritableThreadLocal();
+ private final static ThreadLocal currentLocal = new InheritableThreadLocal<>();
private String groupId;
diff --git a/tx-client/src/main/java/com/codingapi/tx/aop/bean/TxTransactionInfo.java b/tx-client/src/main/java/com/codingapi/tx/aop/bean/TxTransactionInfo.java
index 6d229b286..194788f0b 100644
--- a/tx-client/src/main/java/com/codingapi/tx/aop/bean/TxTransactionInfo.java
+++ b/tx-client/src/main/java/com/codingapi/tx/aop/bean/TxTransactionInfo.java
@@ -12,8 +12,7 @@
public class TxTransactionInfo {
- private TxTransaction transaction;
-
+ private TxTransaction txTransaction;
private TxTransactionLocal txTransactionLocal;
@@ -27,8 +26,8 @@ public class TxTransactionInfo {
private TxTransactionMode mode;
- public TxTransactionInfo(TxTransaction transaction, TxTransactionLocal txTransactionLocal, TransactionInvocation invocation, String txGroupId) {
- this.transaction = transaction;
+ public TxTransactionInfo(TxTransaction txTransaction, TxTransactionLocal txTransactionLocal, TransactionInvocation invocation, String txGroupId) {
+ this.txTransaction = txTransaction;
this.txTransactionLocal = txTransactionLocal;
this.txGroupId = txGroupId;
this.invocation = invocation;
@@ -42,8 +41,8 @@ public void setMode(TxTransactionMode mode) {
this.mode = mode;
}
- public TxTransaction getTransaction() {
- return transaction;
+ public TxTransaction getTxTransaction() {
+ return txTransaction;
}
public TxTransactionLocal getTxTransactionLocal() {
diff --git a/tx-client/src/main/java/com/codingapi/tx/aop/bean/TxTransactionLocal.java b/tx-client/src/main/java/com/codingapi/tx/aop/bean/TxTransactionLocal.java
index e134b5ea8..3fce24713 100644
--- a/tx-client/src/main/java/com/codingapi/tx/aop/bean/TxTransactionLocal.java
+++ b/tx-client/src/main/java/com/codingapi/tx/aop/bean/TxTransactionLocal.java
@@ -19,7 +19,7 @@ public class TxTransactionLocal {
private Logger logger = LoggerFactory.getLogger(TxTransactionLocal.class);
- private final static ThreadLocal currentLocal = new InheritableThreadLocal();
+ private final static ThreadLocal currentLocal = new InheritableThreadLocal<>();
private String groupId;
diff --git a/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TransactionServerFactoryServiceImpl.java b/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TransactionServerFactoryServiceImpl.java
index 8d1d06c98..f47a9d9d3 100644
--- a/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TransactionServerFactoryServiceImpl.java
+++ b/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TransactionServerFactoryServiceImpl.java
@@ -1,22 +1,19 @@
package com.codingapi.tx.aop.service.impl;
-
import com.codingapi.tx.aop.bean.TxTransactionInfo;
import com.codingapi.tx.aop.service.TransactionServer;
import com.codingapi.tx.aop.service.TransactionServerFactoryService;
import com.codingapi.tx.datasource.ILCNTransactionControl;
import com.codingapi.tx.framework.utils.SocketManager;
-import com.codingapi.tx.netty.service.NettyService;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-
-
/**
- * Created by lorne on 2017/6/8.
+ * @author lorne
+ * @date 2017/6/8
*/
@Service
public class TransactionServerFactoryServiceImpl implements TransactionServerFactoryService {
@@ -35,24 +32,22 @@ public class TransactionServerFactoryServiceImpl implements TransactionServerFac
@Autowired
private TransactionServer txRunningNoTransactionServer;
- @Autowired
- private NettyService nettyService;
-
@Autowired
private ILCNTransactionControl transactionControl;
-
+ @Override
public TransactionServer createTransactionServer(TxTransactionInfo info) throws Throwable {
-
if (!SocketManager.getInstance().isNetState()) {
+ //检查socket通讯是否正常 (第一次执行时启动txRunningTransactionServer的业务处理控制,然后嵌套调用其他事务的业务方法时都并到txInServiceTransactionServer业务处理下)
logger.warn("tx-manager not connected.");
return txDefaultTransactionServer;
}
- /*********分布式事务处理逻辑*开始***********/
+ /*********分布式事务处理逻辑***********/
+ logger.info("分布式事务处理逻辑...开始");
- /** 尽当Transaction注解不为空,其他都为空时。表示分布式事务开始启动 **/
- if (info.getTransaction() != null && info.getTransaction().isStart() && info.getTxTransactionLocal() == null && StringUtils.isEmpty(info.getTxGroupId())) {
+ /** 事务发起方:仅当TxTransaction注解不为空,其他都为空时。表示分布式事务开始启动 **/
+ if (info.getTxTransaction() != null && info.getTxTransaction().isStart() && info.getTxTransactionLocal() == null && StringUtils.isEmpty(info.getTxGroupId())) {
//检查socket通讯是否正常 (当启动事务的主业务方法执行完以后,再执行其他业务方法时将进入txInServiceTransactionServer业务处理)
if (SocketManager.getInstance().isNetState()) {
return txStartTransactionServer;
@@ -62,18 +57,18 @@ public TransactionServer createTransactionServer(TxTransactionInfo info) throws
}
}
-
- /** 分布式事务已经开启,业务进行中 **/
+ /** 事务参与方:分布式事务已经开启,业务进行中 **/
+ logger.debug("事务参与方:分布式事务已经开启,业务进行中");
if (info.getTxTransactionLocal() != null || StringUtils.isNotEmpty(info.getTxGroupId())) {
//检查socket通讯是否正常 (第一次执行时启动txRunningTransactionServer的业务处理控制,然后嵌套调用其他事务的业务方法时都并到txInServiceTransactionServer业务处理下)
if (SocketManager.getInstance().isNetState()) {
if (info.getTxTransactionLocal() != null) {
return txDefaultTransactionServer;
} else {
- if(transactionControl.isNoTransactionOperation() // 表示整个应用没有获取过DB连接
- || info.getTransaction().readOnly()) { //无事务业务的操作
+ /** 表示整个应用没有获取过DB连接 || 无事务业务的操作 **/
+ if (transactionControl.isNoTransactionOperation() || info.getTxTransaction().readOnly()) {
return txRunningNoTransactionServer;
- }else {
+ } else {
return txRunningTransactionServer;
}
}
@@ -83,7 +78,7 @@ public TransactionServer createTransactionServer(TxTransactionInfo info) throws
}
}
/*********分布式事务处理逻辑*结束***********/
-
+ logger.debug("分布式事务处理逻辑*结束");
return txDefaultTransactionServer;
}
}
diff --git a/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxDefaultTransactionServerImpl.java b/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxDefaultTransactionServerImpl.java
index 7dca22511..b7df72477 100644
--- a/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxDefaultTransactionServerImpl.java
+++ b/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxDefaultTransactionServerImpl.java
@@ -3,6 +3,8 @@
import com.codingapi.tx.aop.bean.TxTransactionInfo;
import com.codingapi.tx.aop.service.TransactionServer;
import org.aspectj.lang.ProceedingJoinPoint;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
@@ -11,10 +13,11 @@
@Service(value = "txDefaultTransactionServer")
public class TxDefaultTransactionServerImpl implements TransactionServer {
-
+ private Logger logger = LoggerFactory.getLogger(getClass());
@Override
public Object execute(ProceedingJoinPoint point, TxTransactionInfo info) throws Throwable {
+ logger.info("默认事务管理器...");
return point.proceed();
}
}
diff --git a/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxRunningNoTransactionServerImpl.java b/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxRunningNoTransactionServerImpl.java
index b38579a0e..0ce99a013 100644
--- a/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxRunningNoTransactionServerImpl.java
+++ b/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxRunningNoTransactionServerImpl.java
@@ -23,6 +23,8 @@ public class TxRunningNoTransactionServerImpl implements TransactionServer {
@Override
public Object execute(final ProceedingJoinPoint point, final TxTransactionInfo info) throws Throwable {
+ logger.info("无事务模块...");
+
String kid = KidUtils.generateShortUuid();
String txGroupId = info.getTxGroupId();
logger.debug("--->begin readonly transaction, groupId: " + txGroupId);
diff --git a/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxRunningTransactionServerImpl.java b/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxRunningTransactionServerImpl.java
index 24e81e454..68ec4add4 100644
--- a/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxRunningTransactionServerImpl.java
+++ b/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxRunningTransactionServerImpl.java
@@ -26,20 +26,19 @@
@Service(value = "txRunningTransactionServer")
public class TxRunningTransactionServerImpl implements TransactionServer {
-
@Autowired
private MQTxManagerService txManagerService;
-
@Autowired
private ILCNTransactionControl transactionControl;
-
private Logger logger = LoggerFactory.getLogger(TxRunningTransactionServerImpl.class);
@Override
public Object execute(final ProceedingJoinPoint point, final TxTransactionInfo info) throws Throwable {
+ logger.info("事务参与方...");
+
String kid = KidUtils.generateShortUuid();
String txGroupId = info.getTxGroupId();
logger.debug("--->begin running transaction,groupId:" + txGroupId);
@@ -47,7 +46,6 @@ public Object execute(final ProceedingJoinPoint point, final TxTransactionInfo i
boolean isHasIsGroup = transactionControl.hasGroup(txGroupId);
-
TxTransactionLocal txTransactionLocal = new TxTransactionLocal();
txTransactionLocal.setGroupId(txGroupId);
txTransactionLocal.setHasStart(false);
@@ -57,7 +55,6 @@ public Object execute(final ProceedingJoinPoint point, final TxTransactionInfo i
txTransactionLocal.setMode(info.getMode());
TxTransactionLocal.setCurrent(txTransactionLocal);
-
try {
Object res = point.proceed();
diff --git a/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxStartTransactionServerImpl.java b/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxStartTransactionServerImpl.java
index 69d90bf07..7dcdbcb1f 100644
--- a/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxStartTransactionServerImpl.java
+++ b/tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxStartTransactionServerImpl.java
@@ -35,7 +35,9 @@ public class TxStartTransactionServerImpl implements TransactionServer {
public Object execute(ProceedingJoinPoint point,final TxTransactionInfo info) throws Throwable {
//分布式事务开始执行
- logger.debug("--->begin start transaction");
+ logger.info("事务发起方...");
+
+ logger.debug("--->分布式事务开始执行 begin start transaction");
final long start = System.currentTimeMillis();
@@ -44,18 +46,17 @@ public Object execute(ProceedingJoinPoint point,final TxTransactionInfo info) th
final String groupId = TxCompensateLocal.current()==null?KidUtils.generateShortUuid():TxCompensateLocal.current().getGroupId();
//创建事务组
+ logger.debug("创建事务组并发送消息");
txManagerService.createTransactionGroup(groupId);
-
TxTransactionLocal txTransactionLocal = new TxTransactionLocal();
txTransactionLocal.setGroupId(groupId);
txTransactionLocal.setHasStart(true);
txTransactionLocal.setMaxTimeOut(Constants.txServer.getCompensateMaxWaitTime());
- txTransactionLocal.setMode(info.getTransaction().mode());
- txTransactionLocal.setReadOnly(info.getTransaction().readOnly());
+ txTransactionLocal.setMode(info.getTxTransaction().mode());
+ txTransactionLocal.setReadOnly(info.getTxTransaction().readOnly());
TxTransactionLocal.setCurrent(txTransactionLocal);
-
try {
Object obj = point.proceed();
state = 1;
@@ -101,7 +102,7 @@ public Object execute(ProceedingJoinPoint point,final TxTransactionInfo info) th
long end = System.currentTimeMillis();
long time = end - start;
if ((executeConnectionError == 1&&rs == 1)||(lastState == 1 && rs == 0)) {
- //记录补偿日志
+ logger.debug("记录补偿日志");
txManagerService.sendCompensateMsg(groupId, time, info,executeConnectionError);
}
}else{
@@ -113,7 +114,7 @@ public Object execute(ProceedingJoinPoint point,final TxTransactionInfo info) th
}
TxTransactionLocal.setCurrent(null);
- logger.debug("<---end start transaction");
+ logger.debug("<---分布式事务 end start transaction");
logger.debug("start transaction over, res -> groupId:" + groupId + ", now state:" + (lastState == 1 ? "commit" : "rollback"));
}
@@ -132,7 +133,7 @@ private int rollbackException(TxTransactionInfo info,Throwable throwable){
}
//回滚异常检测.
- for(Class extends Throwable> rollbackFor:info.getTransaction().rollbackFor()){
+ for(Class extends Throwable> rollbackFor:info.getTxTransaction().rollbackFor()){
//存在关系
if(rollbackFor.isAssignableFrom(throwable.getClass())){
@@ -142,7 +143,7 @@ private int rollbackException(TxTransactionInfo info,Throwable throwable){
}
//不回滚异常检测.
- for(Class extends Throwable> rollbackFor:info.getTransaction().noRollbackFor()){
+ for(Class extends Throwable> rollbackFor:info.getTxTransaction().noRollbackFor()){
//存在关系
if(rollbackFor.isAssignableFrom(throwable.getClass())){
diff --git a/tx-client/src/main/java/com/codingapi/tx/config/ConfigReader.java b/tx-client/src/main/java/com/codingapi/tx/config/ConfigReader.java
deleted file mode 100644
index 63e90b257..000000000
--- a/tx-client/src/main/java/com/codingapi/tx/config/ConfigReader.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.codingapi.tx.config;
-
-import com.codingapi.tx.config.service.TxManagerTxUrlService;
-import com.lorne.core.framework.utils.config.ConfigUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.stereotype.Component;
-
-/**
- * create by lorne on 2017/11/13
- */
-@Component
-public class ConfigReader {
-
-
- private Logger logger = LoggerFactory.getLogger(ConfigReader.class);
-
-
- private TxManagerTxUrlService txManagerTxUrlService;
-
- @Autowired
- private ApplicationContext spring;
-
-
- public String getTxUrl() {
-
- try {
- txManagerTxUrlService = spring.getBean(TxManagerTxUrlService.class);
- }catch (Exception e){
- logger.debug("load default txManagerTxUrlService ");
- }
-
- if(txManagerTxUrlService == null){
- txManagerTxUrlService = new TxManagerTxUrlService() {
-
- private final String configName = "tx.properties";
-
- private final String configKey = "url";
-
- @Override
- public String getTxUrl() {
- return ConfigUtils.getString(configName,configKey);
- }
- };
-
- logger.debug("load default txManagerTxUrlService");
- }else{
- logger.debug("load txManagerTxUrlService");
- }
-
- return txManagerTxUrlService.getTxUrl();
- }
-
-
-}
diff --git a/tx-client/src/main/java/com/codingapi/tx/config/service/TxManagerTxUrlService.java b/tx-client/src/main/java/com/codingapi/tx/config/service/TxManagerTxUrlService.java
deleted file mode 100644
index 3d8004658..000000000
--- a/tx-client/src/main/java/com/codingapi/tx/config/service/TxManagerTxUrlService.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.codingapi.tx.config.service;
-
-/**
- * create by lorne on 2017/11/18
- */
-public interface TxManagerTxUrlService {
-
- String getTxUrl();
-}
diff --git a/tx-client/src/main/java/com/codingapi/tx/netty/service/MQTxManagerFeginService.java b/tx-client/src/main/java/com/codingapi/tx/netty/service/MQTxManagerFeginService.java
new file mode 100644
index 000000000..d1f0314ce
--- /dev/null
+++ b/tx-client/src/main/java/com/codingapi/tx/netty/service/MQTxManagerFeginService.java
@@ -0,0 +1,38 @@
+package com.codingapi.tx.netty.service;
+
+/**
+ * @author yizhishang
+ */
+public interface MQTxManagerFeginService {
+
+ /**
+ * 检查并清理事务数据
+ * @param groupId 事务组id
+ * @param waitTaskId 任务id
+ * @return 事务状态
+ */
+ String cleanNotifyTransactionHttp(String groupId, String waitTaskId);
+
+ /**
+ * 记录补偿事务数据到tm
+ * @param currentTime 时间
+ * @param groupId 事务组id
+ * @param model 模块名称
+ * @param address 模块地址
+ * @param uniqueKey 唯一标示
+ * @param className 事务启动类
+ * @param methodStr 事务启动方法
+ * @param data 切面数据
+ * @param time 执行时间
+ * @param startError 启动模块异常
+ * @return 是否保存成功
+ */
+ String sendCompensateMsg(long currentTime, String groupId, String model, String address, String uniqueKey, String className, String methodStr, String data, long time,int startError);
+
+ /**
+ * 获取TM服务地址
+ * @return txServer
+ */
+ String getServer();
+
+}
diff --git a/tx-client/src/main/java/com/codingapi/tx/netty/service/TxManagerHttpRequestHelper.java b/tx-client/src/main/java/com/codingapi/tx/netty/service/TxManagerHttpRequestHelper.java
deleted file mode 100644
index c3438938d..000000000
--- a/tx-client/src/main/java/com/codingapi/tx/netty/service/TxManagerHttpRequestHelper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.codingapi.tx.netty.service;
-
-
-import com.lorne.core.framework.utils.http.HttpUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.stereotype.Component;
-
-/**
- * create by lorne on 2017/11/17
- */
-@Component
-public class TxManagerHttpRequestHelper {
-
-
- private TxManagerHttpRequestService httpRequestService;
-
- @Autowired
- private ApplicationContext spring;
-
- private Logger logger = LoggerFactory.getLogger(TxManagerHttpRequestHelper.class);
-
-
- private void reloadHttpRequestService(){
- try {
- httpRequestService = spring.getBean(TxManagerHttpRequestService.class);
- }catch (Exception e){
- logger.debug("load default httpRequestService ");
- }
-
- if(httpRequestService==null){
- httpRequestService = new TxManagerHttpRequestService() {
- @Override
- public String httpGet(String url) {
- return HttpUtils.get(url);
- }
-
- @Override
- public String httpPost(String url, String params) {
- return HttpUtils.post(url, params);
- }
- };
- logger.info("load default HttpRequestService .");
- }else {
- logger.info("load HttpRequestService .");
- }
- }
-
- public String httpGet(String url) {
- reloadHttpRequestService();
- return httpRequestService.httpGet(url);
- }
-
- public String httpPost(String url, String params) {
- reloadHttpRequestService();
- return httpRequestService.httpPost(url,params);
- }
-
-
-}
diff --git a/tx-client/src/main/java/com/codingapi/tx/netty/service/TxManagerHttpRequestService.java b/tx-client/src/main/java/com/codingapi/tx/netty/service/TxManagerHttpRequestService.java
deleted file mode 100644
index e8ae5769d..000000000
--- a/tx-client/src/main/java/com/codingapi/tx/netty/service/TxManagerHttpRequestService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.codingapi.tx.netty.service;
-
-/**
- * create by lorne on 2017/11/17
- */
-public interface TxManagerHttpRequestService {
-
- String httpGet(String url);
-
- String httpPost(String url, String params);
-
-}
diff --git a/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/MQTxManagerFeginServiceImpl.java b/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/MQTxManagerFeginServiceImpl.java
new file mode 100644
index 000000000..bc6a7c2c8
--- /dev/null
+++ b/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/MQTxManagerFeginServiceImpl.java
@@ -0,0 +1,48 @@
+package com.codingapi.tx.netty.service.impl;
+
+import com.codingapi.tx.MQTxManagerFegin;
+import com.codingapi.tx.netty.service.MQTxManagerFeginService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author yizhishang
+ */
+@Service
+public class MQTxManagerFeginServiceImpl implements MQTxManagerFeginService {
+
+ @Autowired
+ private MQTxManagerFegin mqTxManagerFegin;
+
+ /**
+ * 检查并清理事务数据
+ *
+ * @param groupId 事务组id
+ * @param waitTaskId 任务id
+ * @return 事务状态
+ */
+ @Override
+ public String cleanNotifyTransactionHttp(String groupId, String waitTaskId) {
+ return mqTxManagerFegin.cleanNotifyTransactionHttp(groupId, waitTaskId);
+ }
+
+ /**
+ * 记录补偿事务数据到tm
+ */
+ @Override
+ public String sendCompensateMsg(long currentTime, String groupId, String model, String address, String uniqueKey, String className, String methodStr, String data, long time,int startError) {
+ return mqTxManagerFegin.sendCompensateMsg(currentTime, groupId, model, address, uniqueKey, className, methodStr, data, time,startError);
+ }
+
+ /**
+ * 获取TM服务地址
+ *
+ * @return txServer
+ */
+ @Override
+ public String getServer() {
+ return mqTxManagerFegin.getServer();
+ }
+
+}
diff --git a/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/MQTxManagerServiceImpl.java b/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/MQTxManagerServiceImpl.java
index 5362b63d8..a6fbb4a10 100644
--- a/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/MQTxManagerServiceImpl.java
+++ b/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/MQTxManagerServiceImpl.java
@@ -1,18 +1,16 @@
package com.codingapi.tx.netty.service.impl;
import com.alibaba.fastjson.JSONObject;
-import com.codingapi.tx.aop.bean.TxCompensateLocal;
import com.codingapi.tx.aop.bean.TxTransactionInfo;
import com.codingapi.tx.compensate.model.CompensateInfo;
import com.codingapi.tx.compensate.service.CompensateService;
-import com.codingapi.tx.config.ConfigReader;
import com.codingapi.tx.framework.utils.SerializerUtils;
import com.codingapi.tx.framework.utils.SocketManager;
import com.codingapi.tx.listener.service.ModelNameService;
import com.codingapi.tx.model.Request;
import com.codingapi.tx.model.TxGroup;
+import com.codingapi.tx.netty.service.MQTxManagerFeginService;
import com.codingapi.tx.netty.service.MQTxManagerService;
-import com.codingapi.tx.netty.service.TxManagerHttpRequestHelper;
import com.lorne.core.framework.utils.encode.Base64Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -27,15 +25,11 @@ public class MQTxManagerServiceImpl implements MQTxManagerService {
@Autowired
private ModelNameService modelNameService;
- @Autowired
- private ConfigReader configReader;
-
@Autowired
private CompensateService compensateService;
@Autowired
- private TxManagerHttpRequestHelper managerHelper;
-
+ private MQTxManagerFeginService mqTxManagerFeginService;
@Override
public void createTransactionGroup(String groupId) {
@@ -57,7 +51,6 @@ public TxGroup addTransactionGroup(String groupId, String taskId, boolean isGrou
return TxGroup.parser(json);
}
-
@Override
public int closeTransactionGroup(final String groupId, final int state) {
JSONObject jsonObject = new JSONObject();
@@ -100,8 +93,7 @@ public int cleanNotifyTransaction(String groupId, String taskId) {
@Override
public int cleanNotifyTransactionHttp(String groupId, String waitTaskId) {
- String url = configReader.getTxUrl() + "cleanNotifyTransactionHttp?groupId=" + groupId + "&taskId=" + waitTaskId;
- String clearRes = managerHelper.httpGet(url);
+ String clearRes = mqTxManagerFeginService.cleanNotifyTransactionHttp(groupId, waitTaskId);
if(clearRes==null){
return -1;
}
@@ -111,8 +103,7 @@ public int cleanNotifyTransactionHttp(String groupId, String waitTaskId) {
@Override
public String httpGetServer() {
- String url = configReader.getTxUrl() + "getServer";
- return managerHelper.httpGet(url);
+ return mqTxManagerFeginService.getServer();
}
@Override
@@ -133,7 +124,7 @@ public void sendCompensateMsg(String groupId, long time, TxTransactionInfo info,
CompensateInfo compensateInfo = new CompensateInfo(currentTime, modelName, uniqueKey, data, methodStr, className, groupId, address, time,startError);
- String json = managerHelper.httpPost(configReader.getTxUrl() + "sendCompensateMsg", compensateInfo.toParamsString());
+ String json = mqTxManagerFeginService.sendCompensateMsg(currentTime, groupId, modelName, address, uniqueKey, className, methodStr, data, time,startError);
compensateInfo.setResJson(json);
diff --git a/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/NettyControlServiceImpl.java b/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/NettyControlServiceImpl.java
index 77b963f9e..24b57e348 100644
--- a/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/NettyControlServiceImpl.java
+++ b/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/NettyControlServiceImpl.java
@@ -52,18 +52,15 @@ public void restart() {
@Override
public void uploadModelInfo() {
- new Thread(new Runnable() {
- @Override
- public void run() {
- while (!SocketManager.getInstance().isNetState()|| !IpAddressUtils.isIpAddress(modelNameService.getIpAddress())) {
- try {
- Thread.sleep(1000 * 5);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ new Thread(() -> {
+ while (!SocketManager.getInstance().isNetState()|| !IpAddressUtils.isIpAddress(modelNameService.getIpAddress())) {
+ try {
+ Thread.sleep(1000 * 5);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
}
- mqTxManagerService.uploadModelInfo();
}
+ mqTxManagerService.uploadModelInfo();
}).start();
}
diff --git a/tx-manager/.gitignore b/tx-manager/.gitignore
deleted file mode 100644
index 76331cfb8..000000000
--- a/tx-manager/.gitignore
+++ /dev/null
@@ -1,23 +0,0 @@
-target/
-!.mvn/wrapper/maven-wrapper.jar
-
-### STS ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-
-### IntelliJ IDEA ###
-.idea
-*.iws
-*.iml
-*.ipr
-
-### NetBeans ###
-nbproject/private/
-nbbuild/
-dist/
-nbdist/
-.nb-gradle/
\ No newline at end of file
diff --git a/tx-manager/.mvn/wrapper/maven-wrapper.jar b/tx-manager/.mvn/wrapper/maven-wrapper.jar
deleted file mode 100644
index 9cc84ea9b..000000000
Binary files a/tx-manager/.mvn/wrapper/maven-wrapper.jar and /dev/null differ
diff --git a/tx-manager/.mvn/wrapper/maven-wrapper.properties b/tx-manager/.mvn/wrapper/maven-wrapper.properties
deleted file mode 100644
index c31504370..000000000
--- a/tx-manager/.mvn/wrapper/maven-wrapper.properties
+++ /dev/null
@@ -1 +0,0 @@
-distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip
diff --git a/tx-manager/mvnw b/tx-manager/mvnw
deleted file mode 100644
index 5bf251c07..000000000
--- a/tx-manager/mvnw
+++ /dev/null
@@ -1,225 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------------------------
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# ----------------------------------------------------------------------------
-
-# ----------------------------------------------------------------------------
-# Maven2 Start Up Batch script
-#
-# Required ENV vars:
-# ------------------
-# JAVA_HOME - location of a JDK home dir
-#
-# Optional ENV vars
-# -----------------
-# M2_HOME - location of maven2's installed home dir
-# MAVEN_OPTS - parameters passed to the Java VM when running Maven
-# e.g. to debug Maven itself, use
-# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-# ----------------------------------------------------------------------------
-
-if [ -z "$MAVEN_SKIP_RC" ] ; then
-
- if [ -f /etc/mavenrc ] ; then
- . /etc/mavenrc
- fi
-
- if [ -f "$HOME/.mavenrc" ] ; then
- . "$HOME/.mavenrc"
- fi
-
-fi
-
-# OS specific support. $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-mingw=false
-case "`uname`" in
- CYGWIN*) cygwin=true ;;
- MINGW*) mingw=true;;
- Darwin*) darwin=true
- # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
- # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
- if [ -z "$JAVA_HOME" ]; then
- if [ -x "/usr/libexec/java_home" ]; then
- export JAVA_HOME="`/usr/libexec/java_home`"
- else
- export JAVA_HOME="/Library/Java/Home"
- fi
- fi
- ;;
-esac
-
-if [ -z "$JAVA_HOME" ] ; then
- if [ -r /etc/gentoo-release ] ; then
- JAVA_HOME=`java-config --jre-home`
- fi
-fi
-
-if [ -z "$M2_HOME" ] ; then
- ## resolve links - $0 may be a link to maven's home
- PRG="$0"
-
- # need this for relative symlinks
- while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG="`dirname "$PRG"`/$link"
- fi
- done
-
- saveddir=`pwd`
-
- M2_HOME=`dirname "$PRG"`/..
-
- # make it fully qualified
- M2_HOME=`cd "$M2_HOME" && pwd`
-
- cd "$saveddir"
- # echo Using m2 at $M2_HOME
-fi
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
- [ -n "$M2_HOME" ] &&
- M2_HOME=`cygpath --unix "$M2_HOME"`
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
- [ -n "$CLASSPATH" ] &&
- CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
-fi
-
-# For Migwn, ensure paths are in UNIX format before anything is touched
-if $mingw ; then
- [ -n "$M2_HOME" ] &&
- M2_HOME="`(cd "$M2_HOME"; pwd)`"
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
- # TODO classpath?
-fi
-
-if [ -z "$JAVA_HOME" ]; then
- javaExecutable="`which javac`"
- if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
- # readlink(1) is not available as standard on Solaris 10.
- readLink=`which readlink`
- if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
- if $darwin ; then
- javaHome="`dirname \"$javaExecutable\"`"
- javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
- else
- javaExecutable="`readlink -f \"$javaExecutable\"`"
- fi
- javaHome="`dirname \"$javaExecutable\"`"
- javaHome=`expr "$javaHome" : '\(.*\)/bin'`
- JAVA_HOME="$javaHome"
- export JAVA_HOME
- fi
- fi
-fi
-
-if [ -z "$JAVACMD" ] ; then
- if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- else
- JAVACMD="`which java`"
- fi
-fi
-
-if [ ! -x "$JAVACMD" ] ; then
- echo "Error: JAVA_HOME is not defined correctly." >&2
- echo " We cannot execute $JAVACMD" >&2
- exit 1
-fi
-
-if [ -z "$JAVA_HOME" ] ; then
- echo "Warning: JAVA_HOME environment variable is not set."
-fi
-
-CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
-
-# traverses directory structure from process work directory to filesystem root
-# first directory with .mvn subdirectory is considered project base directory
-find_maven_basedir() {
-
- if [ -z "$1" ]
- then
- echo "Path not specified to find_maven_basedir"
- return 1
- fi
-
- basedir="$1"
- wdir="$1"
- while [ "$wdir" != '/' ] ; do
- if [ -d "$wdir"/.mvn ] ; then
- basedir=$wdir
- break
- fi
- # workaround for JBEAP-8937 (on Solaris 10/Sparc)
- if [ -d "${wdir}" ]; then
- wdir=`cd "$wdir/.."; pwd`
- fi
- # end of workaround
- done
- echo "${basedir}"
-}
-
-# concatenates all lines of a file
-concat_lines() {
- if [ -f "$1" ]; then
- echo "$(tr -s '\n' ' ' < "$1")"
- fi
-}
-
-BASE_DIR=`find_maven_basedir "$(pwd)"`
-if [ -z "$BASE_DIR" ]; then
- exit 1;
-fi
-
-export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
-echo $MAVEN_PROJECTBASEDIR
-MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin; then
- [ -n "$M2_HOME" ] &&
- M2_HOME=`cygpath --path --windows "$M2_HOME"`
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
- [ -n "$CLASSPATH" ] &&
- CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
- [ -n "$MAVEN_PROJECTBASEDIR" ] &&
- MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
-fi
-
-WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-exec "$JAVACMD" \
- $MAVEN_OPTS \
- -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
- "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
- ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/tx-manager/mvnw.cmd b/tx-manager/mvnw.cmd
deleted file mode 100644
index 019bd74d7..000000000
--- a/tx-manager/mvnw.cmd
+++ /dev/null
@@ -1,143 +0,0 @@
-@REM ----------------------------------------------------------------------------
-@REM Licensed to the Apache Software Foundation (ASF) under one
-@REM or more contributor license agreements. See the NOTICE file
-@REM distributed with this work for additional information
-@REM regarding copyright ownership. The ASF licenses this file
-@REM to you under the Apache License, Version 2.0 (the
-@REM "License"); you may not use this file except in compliance
-@REM with the License. You may obtain a copy of the License at
-@REM
-@REM http://www.apache.org/licenses/LICENSE-2.0
-@REM
-@REM Unless required by applicable law or agreed to in writing,
-@REM software distributed under the License is distributed on an
-@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-@REM KIND, either express or implied. See the License for the
-@REM specific language governing permissions and limitations
-@REM under the License.
-@REM ----------------------------------------------------------------------------
-
-@REM ----------------------------------------------------------------------------
-@REM Maven2 Start Up Batch script
-@REM
-@REM Required ENV vars:
-@REM JAVA_HOME - location of a JDK home dir
-@REM
-@REM Optional ENV vars
-@REM M2_HOME - location of maven2's installed home dir
-@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
-@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
-@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
-@REM e.g. to debug Maven itself, use
-@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-@REM ----------------------------------------------------------------------------
-
-@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
-@echo off
-@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
-@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
-
-@REM set %HOME% to equivalent of $HOME
-if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
-
-@REM Execute a user defined script before this one
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
-@REM check for pre script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
-if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
-:skipRcPre
-
-@setlocal
-
-set ERROR_CODE=0
-
-@REM To isolate internal variables from possible post scripts, we use another setlocal
-@setlocal
-
-@REM ==== START VALIDATION ====
-if not "%JAVA_HOME%" == "" goto OkJHome
-
-echo.
-echo Error: JAVA_HOME not found in your environment. >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-:OkJHome
-if exist "%JAVA_HOME%\bin\java.exe" goto init
-
-echo.
-echo Error: JAVA_HOME is set to an invalid directory. >&2
-echo JAVA_HOME = "%JAVA_HOME%" >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-@REM ==== END VALIDATION ====
-
-:init
-
-@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
-@REM Fallback to current working directory if not found.
-
-set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
-IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
-
-set EXEC_DIR=%CD%
-set WDIR=%EXEC_DIR%
-:findBaseDir
-IF EXIST "%WDIR%"\.mvn goto baseDirFound
-cd ..
-IF "%WDIR%"=="%CD%" goto baseDirNotFound
-set WDIR=%CD%
-goto findBaseDir
-
-:baseDirFound
-set MAVEN_PROJECTBASEDIR=%WDIR%
-cd "%EXEC_DIR%"
-goto endDetectBaseDir
-
-:baseDirNotFound
-set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
-cd "%EXEC_DIR%"
-
-:endDetectBaseDir
-
-IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
-
-@setlocal EnableExtensions EnableDelayedExpansion
-for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
-@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
-
-:endReadAdditionalConfig
-
-SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
-
-set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
-set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
-if ERRORLEVEL 1 goto error
-goto end
-
-:error
-set ERROR_CODE=1
-
-:end
-@endlocal & set ERROR_CODE=%ERROR_CODE%
-
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
-@REM check for post script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
-if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
-:skipRcPost
-
-@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
-if "%MAVEN_BATCH_PAUSE%" == "on" pause
-
-if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
-
-exit /B %ERROR_CODE%
diff --git a/tx-manager/pom.xml b/tx-manager/pom.xml
index a0c5f052a..684aee77a 100644
--- a/tx-manager/pom.xml
+++ b/tx-manager/pom.xml
@@ -5,7 +5,7 @@
com.codingapi
tx-manager
- 4.2.0-SNAPSHOT
+ 4.2.0
jar
tx-manager
@@ -14,24 +14,35 @@
org.springframework.boot
spring-boot-starter-parent
- 1.5.4.RELEASE
+ 2.0.4.RELEASE
UTF-8
UTF-8
- 1.7
- 1.7
- 1.7
+ 1.8
+ 1.8
+ 1.8
19.0
- Dalston.SR1
+ Finchley.RELEASE
true
true
-
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
@@ -46,7 +57,6 @@
-
io.netty
netty-all
@@ -55,31 +65,34 @@
org.springframework.cloud
- spring-cloud-starter-eureka-server
+ spring-cloud-starter-netflix-eureka-client
+ 2.0.0.RELEASE
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
- com.google.guava
- guava
+ org.springframework.boot
+ spring-boot-starter-tomcat
-
-
-
-
-
-
-
org.springframework.boot
- spring-boot-starter-web
+ spring-boot-starter-undertow
-
org.springframework.boot
- spring-boot-starter-redis
- 1.3.8.RELEASE
+ spring-boot-starter-data-redis
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.47
@@ -90,19 +103,6 @@
-
-
-
-
- org.springframework.cloud
- spring-cloud-dependencies
- ${spring-cloud.version}
- pom
- import
-
-
-
-
@@ -147,26 +147,6 @@
-
- maven-assembly-plugin
-
- false
-
- src/main/build/package.xml
-
-
-
-
- make-assembly
- package
-
- single
-
-
-
-
-
-
org.springframework.boot
spring-boot-maven-plugin
diff --git a/tx-manager/src/main/build/package.xml b/tx-manager/src/main/build/package.xml
deleted file mode 100644
index 5b5cf98ea..000000000
--- a/tx-manager/src/main/build/package.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
- package
-
- zip
-
- true
-
-
- bin
- /
-
-
- src/main/resources
- /
-
-
- ${project.build.directory}
- /
-
- *.jar
-
-
-
-
-
- lib
- runtime
-
- ${groupId}:${artifactId}
-
-
-
-
diff --git a/tx-manager/src/main/java/com/codingapi/tm/ServletInitializer.java b/tx-manager/src/main/java/com/codingapi/tm/ServletInitializer.java
index f9ee98fd9..dbf897b36 100644
--- a/tx-manager/src/main/java/com/codingapi/tm/ServletInitializer.java
+++ b/tx-manager/src/main/java/com/codingapi/tm/ServletInitializer.java
@@ -1,18 +1,16 @@
package com.codingapi.tm;
import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.boot.web.support.SpringBootServletInitializer;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* Created by lorne on 2017/7/3.
*/
public class ServletInitializer extends SpringBootServletInitializer {
-
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(TxManagerApplication.class);
}
-
}
diff --git a/tx-manager/src/main/java/com/codingapi/tm/TxManagerApplication.java b/tx-manager/src/main/java/com/codingapi/tm/TxManagerApplication.java
index 156b2821f..e4b8112d8 100644
--- a/tx-manager/src/main/java/com/codingapi/tm/TxManagerApplication.java
+++ b/tx-manager/src/main/java/com/codingapi/tm/TxManagerApplication.java
@@ -2,15 +2,12 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+@EnableEurekaClient
@SpringBootApplication
-@EnableDiscoveryClient
public class TxManagerApplication {
-
-
public static void main(String[] args) {
SpringApplication.run(TxManagerApplication.class, args);
}
diff --git a/tx-manager/src/main/java/com/codingapi/tm/compensate/dao/impl/CompensateDaoImpl.java b/tx-manager/src/main/java/com/codingapi/tm/compensate/dao/impl/CompensateDaoImpl.java
index 46b7c2278..2969da2cf 100644
--- a/tx-manager/src/main/java/com/codingapi/tm/compensate/dao/impl/CompensateDaoImpl.java
+++ b/tx-manager/src/main/java/com/codingapi/tm/compensate/dao/impl/CompensateDaoImpl.java
@@ -6,6 +6,8 @@
import com.codingapi.tm.config.ConfigReader;
import com.codingapi.tm.redis.service.RedisServerService;
import com.lorne.core.framework.utils.DateUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -18,6 +20,7 @@
@Service
public class CompensateDaoImpl implements CompensateDao {
+ Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private RedisServerService redisServerService;
@@ -33,6 +36,7 @@ public String saveCompensateMsg(TransactionCompensateMsg transactionCompensateMs
String json = JSON.toJSONString(transactionCompensateMsg);
+ logger.debug("保存补偿数据至redis: {}", json);
redisServerService.saveCompensateMsg(name, json);
return name;
diff --git a/tx-manager/src/main/java/com/codingapi/tm/compensate/service/impl/CompensateServiceImpl.java b/tx-manager/src/main/java/com/codingapi/tm/compensate/service/impl/CompensateServiceImpl.java
index 84d183bd6..398455aa7 100644
--- a/tx-manager/src/main/java/com/codingapi/tm/compensate/service/impl/CompensateServiceImpl.java
+++ b/tx-manager/src/main/java/com/codingapi/tm/compensate/service/impl/CompensateServiceImpl.java
@@ -114,6 +114,7 @@ public void autoCompensate(final String compensateKey, TransactionCompensateMsg
final String json = JSON.toJSONString(transactionCompensateMsg);
logger.info("Auto Compensate->" + json);
//自动补偿业务执行...
+ logger.debug("自动补偿业务执行...");
final int tryTime = configReader.getCompensateTryTime();
boolean autoExecuteRes = false;
try {
@@ -278,9 +279,11 @@ public void reloadCompensate(TxGroup txGroup) {
}
}
}
+ logger.info("重新加载补偿数据...");
logger.info("Compensate Loaded->"+JSON.toJSONString(txGroup));
}
+ @Override
public TxGroup getCompensateByGroupId(String groupId) {
String json = compensateDao.getCompensateByGroupId(groupId);
if (json == null) {
diff --git a/tx-manager/src/main/java/com/codingapi/tm/listener/ApplicationStartListener.java b/tx-manager/src/main/java/com/codingapi/tm/listener/ApplicationStartListener.java
index ecb20d049..3d86c4918 100644
--- a/tx-manager/src/main/java/com/codingapi/tm/listener/ApplicationStartListener.java
+++ b/tx-manager/src/main/java/com/codingapi/tm/listener/ApplicationStartListener.java
@@ -1,7 +1,7 @@
package com.codingapi.tm.listener;
import com.codingapi.tm.Constants;
-import org.springframework.boot.context.embedded.EmbeddedServletContainerInitializedEvent;
+import org.springframework.boot.web.context.WebServerInitializedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@@ -12,12 +12,12 @@
* create by lorne on 2017/8/7
*/
@Component
-public class ApplicationStartListener implements ApplicationListener {
+public class ApplicationStartListener implements ApplicationListener {
@Override
- public void onApplicationEvent(EmbeddedServletContainerInitializedEvent event) {
- int serverPort = event.getEmbeddedServletContainer().getPort();
+ public void onApplicationEvent(WebServerInitializedEvent event) {
+ int serverPort = event.getWebServer().getPort();
String ip = getIp();
Constants.address = ip+":"+serverPort;
}
diff --git a/tx-manager/src/main/java/com/codingapi/tm/manager/service/impl/MicroServiceImpl.java b/tx-manager/src/main/java/com/codingapi/tm/manager/service/impl/MicroServiceImpl.java
index 5a74ac913..5855b14bb 100644
--- a/tx-manager/src/main/java/com/codingapi/tm/manager/service/impl/MicroServiceImpl.java
+++ b/tx-manager/src/main/java/com/codingapi/tm/manager/service/impl/MicroServiceImpl.java
@@ -6,10 +6,14 @@
import com.codingapi.tm.manager.service.MicroService;
import com.codingapi.tm.model.TxServer;
import com.codingapi.tm.model.TxState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
@@ -23,6 +27,7 @@
@Service
public class MicroServiceImpl implements MicroService {
+ private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private RestTemplate restTemplate;
@@ -34,7 +39,11 @@ public class MicroServiceImpl implements MicroService {
@Autowired
private DiscoveryClient discoveryClient;
-
+ /**
+ * 服务注册
+ */
+ @Autowired
+ private Registration registration;
private boolean isIp(String ipAddress) {
String ip = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";
@@ -43,15 +52,14 @@ private boolean isIp(String ipAddress) {
return matcher.matches();
}
-
-
@Override
public TxState getState() {
TxState state = new TxState();
- String ipAddress = discoveryClient.getLocalServiceInstance().getHost();
+ String ipAddress = registration.getHost();
if(!isIp(ipAddress)){
ipAddress = "127.0.0.1";
}
+ logger.info("ipAddress: {}, port: {}", ipAddress, Constants.socketPort);
state.setIp(ipAddress);
state.setPort(Constants.socketPort);
state.setMaxConnection(SocketManager.getInstance().getMaxConnection());
diff --git a/tx-manager/src/main/java/com/codingapi/tm/manager/service/impl/TxManagerSenderServiceImpl.java b/tx-manager/src/main/java/com/codingapi/tm/manager/service/impl/TxManagerSenderServiceImpl.java
index e5ee4e270..2edae671a 100644
--- a/tx-manager/src/main/java/com/codingapi/tm/manager/service/impl/TxManagerSenderServiceImpl.java
+++ b/tx-manager/src/main/java/com/codingapi/tm/manager/service/impl/TxManagerSenderServiceImpl.java
@@ -110,13 +110,11 @@ private void setChannel(List list) {
/**
* 事务提交或回归
*
- * @param checkSate
+ * @param checkSate 1-提交事务
*/
private boolean transaction(final TxGroup txGroup, final int checkSate) {
-
-
if (checkSate == 1) {
-
+ logger.info("事务提交");
//补偿请求,加载历史数据
if (txGroup.getIsCompensate() == 1) {
compensateService.reloadCompensate(txGroup);
@@ -135,8 +133,8 @@ public Boolean execute() {
final JSONObject jsonObject = new JSONObject();
jsonObject.put("a", "t");
-
- if (txGroup.getIsCompensate() == 1) { //补偿请求
+ /** 补偿请求 **/
+ if (txGroup.getIsCompensate() == 1) {
jsonObject.put("c", txInfo.getIsCommit());
} else { //正常业务
jsonObject.put("c", checkSate);
@@ -193,24 +191,25 @@ public Boolean execute() {
}
logger.info("--->" + hasOk + ",group:" + txGroup.getGroupId() + ",state:" + checkSate + ",list:" + txGroup.toJsonString());
return hasOk;
- }else{
- //回滚操作只发送通过不需要等待确认
- for (TxInfo txInfo : txGroup.getList()) {
- if(txInfo.getChannel()!=null) {
- if (txInfo.getIsGroup() == 0) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("a", "t");
- jsonObject.put("c", checkSate);
- jsonObject.put("t", txInfo.getKid());
- String key = KidUtils.generateShortUuid();
- jsonObject.put("k", key);
- txInfo.getChannel().send(jsonObject.toJSONString());
- }
+ }
+
+ logger.info("事务回滚");
+ //回滚操作只发送通过不需要等待确认
+ for (TxInfo txInfo : txGroup.getList()) {
+ if(txInfo.getChannel()!=null) {
+ if (txInfo.getIsGroup() == 0) {
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("a", "t");
+ jsonObject.put("c", checkSate);
+ jsonObject.put("t", txInfo.getKid());
+ String key = KidUtils.generateShortUuid();
+ jsonObject.put("k", key);
+ txInfo.getChannel().send(jsonObject.toJSONString());
}
}
- txManagerService.deleteTxGroup(txGroup);
- return true;
}
+ txManagerService.deleteTxGroup(txGroup);
+ return true;
}
diff --git a/tx-manager/src/main/java/com/codingapi/tm/manager/service/impl/TxManagerServiceImpl.java b/tx-manager/src/main/java/com/codingapi/tm/manager/service/impl/TxManagerServiceImpl.java
index da6e1360f..76700de76 100644
--- a/tx-manager/src/main/java/com/codingapi/tm/manager/service/impl/TxManagerServiceImpl.java
+++ b/tx-manager/src/main/java/com/codingapi/tm/manager/service/impl/TxManagerServiceImpl.java
@@ -23,8 +23,6 @@
@Service
public class TxManagerServiceImpl implements TxManagerService {
-
-
@Autowired
private ConfigReader configReader;
@@ -42,12 +40,12 @@ public class TxManagerServiceImpl implements TxManagerService {
@Autowired
private CompensateService compensateService;
-
private Logger logger = LoggerFactory.getLogger(TxManagerServiceImpl.class);
@Override
public TxGroup createTransactionGroup(String groupId) {
+ logger.info("创建事物组");
TxGroup txGroup = new TxGroup();
if (compensateService.getCompensateByGroupId(groupId)!=null) {
txGroup.setIsCompensate(1);
@@ -65,6 +63,8 @@ public TxGroup createTransactionGroup(String groupId) {
@Override
public TxGroup addTransactionGroup(String groupId, String taskId, int isGroup, String channelAddress, String methodStr) {
+
+ logger.info("添加事务组子对象...");
String key = getTxGroupKey(groupId);
TxGroup txGroup = getTxGroup(groupId);
if (txGroup==null) {
@@ -77,7 +77,6 @@ public TxGroup addTransactionGroup(String groupId, String taskId, int isGroup, S
txInfo.setIsGroup(isGroup);
txInfo.setMethodStr(methodStr);
-
ModelInfo modelInfo = ModelInfoManager.getInstance().getModelByChannelName(channelAddress);
if(modelInfo!=null) {
txInfo.setUniqueKey(modelInfo.getUniqueKey());
@@ -94,6 +93,7 @@ public TxGroup addTransactionGroup(String groupId, String taskId, int isGroup, S
@Override
public boolean rollbackTransactionGroup(String groupId) {
+ logger.info("设置强制回滚事务...");
String key = getTxGroupKey(groupId);
TxGroup txGroup = getTxGroup(groupId);
if (txGroup==null) {
@@ -106,6 +106,7 @@ public boolean rollbackTransactionGroup(String groupId) {
@Override
public int cleanNotifyTransaction(String groupId, String taskId) {
+ logger.info("检查事务组数据...");
int res = 0;
logger.info("start-cleanNotifyTransaction->groupId:"+groupId+",taskId:"+taskId);
String key = getTxGroupKey(groupId);
@@ -169,6 +170,7 @@ public int cleanNotifyTransaction(String groupId, String taskId) {
@Override
public int closeTransactionGroup(String groupId,int state) {
+ logger.info("关闭事务组");
String key = getTxGroupKey(groupId);
TxGroup txGroup = getTxGroup(groupId);
if(txGroup==null){
diff --git a/tx-manager/src/main/java/com/codingapi/tm/redis/JedisClusterConfig.java b/tx-manager/src/main/java/com/codingapi/tm/redis/JedisClusterConfig.java
deleted file mode 100644
index 6f7112431..000000000
--- a/tx-manager/src/main/java/com/codingapi/tm/redis/JedisClusterConfig.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.codingapi.tm.redis;
-
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.core.env.MapPropertySource;
-import org.springframework.data.redis.connection.RedisClusterConfiguration;
-import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import redis.clients.jedis.HostAndPort;
-import redis.clients.jedis.JedisCluster;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Created by lorne on 2017/10/31.
- */
-@ConditionalOnClass({JedisCluster.class})
-@EnableConfigurationProperties(RedisProperties.class)
-public class JedisClusterConfig {
-
- @Autowired
- private RedisProperties redisProperties;
-
- @Bean
- public JedisCluster jedisClusterFactory() {
- String[] serverArray = redisProperties.getNodes().split(",");
- Set nodes = new HashSet();
- for (String ipPort: serverArray) {
- String[] ipPortPair = ipPort.split(":");
- nodes.add(new HostAndPort(ipPortPair[0].trim(),Integer.valueOf(ipPortPair[1].trim())));
- }
- return new JedisCluster(nodes, redisProperties.getCommandTimeout());
- }
-
- @Bean
- public RedisTemplate redisTemplateFactory(){
- RedisTemplate redisTemplate =new RedisTemplate();
- redisTemplate.setConnectionFactory(jedisConnectionFactory());
-
- //指定具体序列化方式 不过这种方式不是很好,一个系统中可能对应值的类型不一样,如果全部使用StringRedisSerializer 序列化
- //会照成其他类型报错,所以还是推荐使用第一种,直接指定泛型的类型,spring 会根据指定类型序列化。
-// redisTemplate.setKeySerializer( new StringRedisSerializer());
-// redisTemplate.setValueSerializer(new StringRedisSerializer());
-// redisTemplate.setHashKeySerializer(new StringRedisSerializer());
-// redisTemplate.setHashValueSerializer(new StringRedisSerializer());
- return redisTemplate;
- }
-
-
- /**
- * redisCluster配置
- * @return
- */
- @Bean
- public RedisClusterConfiguration redisClusterConfiguration() {
- Map source = new HashMap();
- source.put("spring.redis.cluster.nodes", redisProperties.getNodes());
- source.put("spring.redis.cluster.timeout", redisProperties.getCommandTimeout());
- return new RedisClusterConfiguration(new MapPropertySource("RedisClusterConfiguration", source));
- }
-
-
- /**
- * 其实在JedisConnectionFactory的afterPropertiesSet()方法 中
- * if(cluster !=null) this.cluster =createCluster();
- * 也就是当
- * spring.redis.cluster.nodes 配置好的情况下,就可以实例化 JedisCluster.
- * 也就是说,我们使用JedisCluster 的方式只需要在application.properties 配置文件中
- *
- * #redis cluster
- * spring.redis.cluster.nodes=127.0.0.1:7000,127.0.0.1:7001,127.0.0.1:7002
- *
- * RedisTemplate.afterPropertiesSet() 中查看到最终方法中使用了JedisCluster 对象。
- * 也就是说 redisTemplate依赖jedis ,内部操作的就是jedis,同理内部也操作jedisCluster.
- *
- *
- * @return
- */
- @Bean
- public JedisConnectionFactory jedisConnectionFactory() {
- return new JedisConnectionFactory(redisClusterConfiguration());
- }
-}
\ No newline at end of file
diff --git a/tx-manager/src/main/java/com/codingapi/tm/redis/RedisConfig.java b/tx-manager/src/main/java/com/codingapi/tm/redis/RedisConfig.java
deleted file mode 100644
index 81ceae8f6..000000000
--- a/tx-manager/src/main/java/com/codingapi/tm/redis/RedisConfig.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.codingapi.tm.redis;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import redis.clients.jedis.JedisPoolConfig;
-
-/**
- * Created by lorne on 2017/7/5.
- */
-
-@EnableAutoConfiguration
-public class RedisConfig {
-
- private static Logger logger = LoggerFactory.getLogger(RedisConfig.class);
-
- @Bean
- @ConfigurationProperties(prefix = "spring.redis")
- public JedisPoolConfig getRedisConfig() {
- JedisPoolConfig config = new JedisPoolConfig();
- return config;
- }
-
- @Bean
- @ConfigurationProperties(prefix = "spring.redis")
- public JedisConnectionFactory getConnectionFactory() {
- JedisConnectionFactory factory = new JedisConnectionFactory();
- JedisPoolConfig config = getRedisConfig();
- factory.setPoolConfig(config);
- logger.info("JedisConnectionFactory bean init success.");
- return factory;
- }
-
-
- @Bean
- public RedisTemplate, ?> getRedisTemplate() {
- return new StringRedisTemplate(getConnectionFactory());
- }
-}
diff --git a/tx-manager/src/main/java/com/codingapi/tm/redis/RedisProperties.java b/tx-manager/src/main/java/com/codingapi/tm/redis/RedisProperties.java
deleted file mode 100644
index bd1815c95..000000000
--- a/tx-manager/src/main/java/com/codingapi/tm/redis/RedisProperties.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.codingapi.tm.redis;
-
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-/**
- * Created by lorne on 2017/10/31.
- */
-
-@Component
-@ConfigurationProperties(prefix = "spring.redis.cluster")
-public class RedisProperties {
-
-
- private String nodes;
-
- private Integer commandTimeout;
-
- public String getNodes() {
- return nodes;
- }
-
- public void setNodes(String nodes) {
- this.nodes = nodes;
- }
-
- public Integer getCommandTimeout() {
- return commandTimeout;
- }
-
- public void setCommandTimeout(Integer commandTimeout) {
- this.commandTimeout = commandTimeout;
- }
-}
diff --git a/tx-manager/src/main/java/com/codingapi/tm/redis/configuration/RedisTemplateConfig.java b/tx-manager/src/main/java/com/codingapi/tm/redis/configuration/RedisTemplateConfig.java
new file mode 100644
index 000000000..e1322625f
--- /dev/null
+++ b/tx-manager/src/main/java/com/codingapi/tm/redis/configuration/RedisTemplateConfig.java
@@ -0,0 +1,52 @@
+package com.codingapi.tm.redis.configuration;
+
+import com.alibaba.fastjson.parser.ParserConfig;
+import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author yizhishhang
+ * @description 使用一个Transfer类间接注入RedisConnectionFactory
+ * Created on 2018/4/18 0018 10:21
+ */
+@Component
+public class RedisTemplateConfig
+{
+ private Logger logger = LoggerFactory.getLogger(getClass());
+
+ @Bean
+ public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory)
+ {
+ logger.info("redis...初始化");
+
+ RedisTemplate redisTemplate = new RedisTemplate<>();
+ redisTemplate.setConnectionFactory(redisConnectionFactory);
+
+ FastJsonRedisSerializer