diff --git a/pom.xml b/pom.xml index d12ed89ac..f1a119f82 100644 --- a/pom.xml +++ b/pom.xml @@ -5,10 +5,12 @@ com.codingapi tx-lcn - 4.0.0 + 4.0.3.M1 pom tx-lcn + https://github.com/codingapi/tx-lcn + tx-lcn project for LCN tx-client @@ -77,14 +79,6 @@ - - org.apache.maven.plugins - maven-compiler-plugin - - ${java.version} - ${java.version} - - org.apache.maven.plugins maven-compiler-plugin @@ -108,6 +102,8 @@ + + org.sonatype.plugins nexus-staging-maven-plugin @@ -132,21 +128,24 @@ - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - + + + + + + + + + + + + + + + + + + diff --git a/transaction-dubbo/pom.xml b/transaction-dubbo/pom.xml index 5146d4280..e5cb7369f 100644 --- a/transaction-dubbo/pom.xml +++ b/transaction-dubbo/pom.xml @@ -8,7 +8,7 @@ com.codingapi tx-lcn - 4.0.0 + 4.0.3.M1 com.codingapi diff --git a/transaction-motan/pom.xml b/transaction-motan/pom.xml index 15b14cc2f..1acc4b0f7 100644 --- a/transaction-motan/pom.xml +++ b/transaction-motan/pom.xml @@ -8,7 +8,7 @@ com.codingapi tx-lcn - 4.0.0 + 4.0.3.M1 com.codingapi diff --git a/transaction-springcloud/pom.xml b/transaction-springcloud/pom.xml index 3be3fb924..7b33184bf 100644 --- a/transaction-springcloud/pom.xml +++ b/transaction-springcloud/pom.xml @@ -6,7 +6,7 @@ com.codingapi tx-lcn - 4.0.0 + 4.0.3.M1 com.codingapi diff --git a/tx-client/pom.xml b/tx-client/pom.xml index 6c155b5ff..6df8b15a1 100644 --- a/tx-client/pom.xml +++ b/tx-client/pom.xml @@ -6,7 +6,7 @@ com.codingapi tx-lcn - 4.0.0 + 4.0.3.M1 com.codingapi @@ -123,78 +123,4 @@ - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${maven.compile.source} - ${maven.compile.target} - ${project.build.sourceEncoding} - - - - org.apache.maven.plugins - maven-source-plugin - 2.4 - - - attach-sources - - jar-no-fork - - - - - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.3 - true - - ossrh - https://oss.sonatype.org/ - true - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.10.3 - - - attach-javadocs - - jar - - - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - - - - 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 e3938de4b..d2956504a 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 @@ -83,50 +83,56 @@ public Object execute(ProceedingJoinPoint point,final TxTransactionInfo info) th new Thread(new HookRunnable() { @Override public void run0() { - if(task.isAwait()) { - int rs = txManagerService.closeTransactionGroup(groupId, resState); + while (!task.isAwait() && !Thread.currentThread().interrupted()) { + try { + Thread.sleep(1); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } - int lastState = rs==-1?0:resState; + int rs = txManagerService.closeTransactionGroup(groupId, resState); - int executeConnectionError = 0; + int lastState = rs==-1?0:resState; - //控制本地事务的数据提交 - final TxTask waitTask = TaskGroupManager.getInstance().getTask(groupId, type); - if(waitTask!=null){ - waitTask.setState(lastState); - waitTask.signalTask(); + int executeConnectionError = 0; - while (!waitTask.isRemove()){ - try { - Thread.sleep(1); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } + //控制本地事务的数据提交 + final TxTask waitTask = TaskGroupManager.getInstance().getTask(groupId, type); + if(waitTask!=null){ + waitTask.setState(lastState); + waitTask.signalTask(); - if(waitTask.getState()== TaskState.connectionError.getCode()){ - //本地执行失败. - executeConnectionError = 1; - - lastState = 0; + while (!waitTask.isRemove()){ + try { + Thread.sleep(1); + } catch (InterruptedException e) { + e.printStackTrace(); } } + if(waitTask.getState()== TaskState.connectionError.getCode()){ + //本地执行失败. + executeConnectionError = 1; - if (compensateLocal == null) { - long end = System.currentTimeMillis(); - long time = end - start; - if (executeConnectionError == 1||(lastState == 1 && rs == 0)) { - //记录补偿日志 - txManagerService.sendCompensateMsg(groupId, time, info,executeConnectionError); - } + lastState = 0; } + } - task.setState(lastState); - task.signalTask(); + if (compensateLocal == null) { + long end = System.currentTimeMillis(); + long time = end - start; + if (executeConnectionError == 1||(lastState == 1 && rs == 0)) { + //记录补偿日志 + txManagerService.sendCompensateMsg(groupId, time, info,executeConnectionError); + } } + + task.setState(lastState); + task.signalTask(); } + }).start(); task.awaitTask(); diff --git a/tx-client/src/main/java/com/codingapi/tx/framework/utils/IpAddressUtils.java b/tx-client/src/main/java/com/codingapi/tx/framework/utils/IpAddressUtils.java new file mode 100644 index 000000000..8845bc4cd --- /dev/null +++ b/tx-client/src/main/java/com/codingapi/tx/framework/utils/IpAddressUtils.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.codingapi.tx.framework.utils; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * create by lorne on 2017/12/12 + */ +public class IpAddressUtils { + + + public static boolean isIpAddress(String ipAddress){ + String ipAddressRegex = "([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}:([0-9]|[1-9]\\d{1,3}|[1-5]\\d{4}|6[0-5][0-9][0-3][0-5])"; + Pattern ipAddressPattern = Pattern.compile(ipAddressRegex); + Matcher matcher = ipAddressPattern.matcher(ipAddress); + return matcher.matches(); + } + + public static boolean isIpFormat(String ipAddress){ + return ipAddress.contains(":"); + } + + public static String getIpByDomain(String domain){ + InetAddress ip= null; + try { + ip = InetAddress.getByName(domain); + } catch (UnknownHostException e) { + return null; + } + return ip.getHostAddress(); + } + + + public static boolean isIp(String ipString) { + String ipRegex = "([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}"; + Pattern pattern = Pattern.compile(ipRegex); + Matcher matcher = pattern.matcher(ipString); + return matcher.matches(); + } + + +} 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 dfc1f081c..5934e1bcd 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 @@ -7,7 +7,7 @@ import com.codingapi.tx.netty.service.MQTxManagerService; import com.codingapi.tx.netty.service.NettyControlService; import com.codingapi.tx.netty.service.NettyService; -import com.codingapi.tx.netty.utils.IpAddressUtils; +import com.codingapi.tx.framework.utils.IpAddressUtils; import com.lorne.core.framework.utils.task.ConditionUtils; import com.lorne.core.framework.utils.task.IBack; import com.lorne.core.framework.utils.task.Task; diff --git a/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/NettyServiceImpl.java b/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/NettyServiceImpl.java index 5f00e0452..96655682f 100644 --- a/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/NettyServiceImpl.java +++ b/tx-client/src/main/java/com/codingapi/tx/netty/service/impl/NettyServiceImpl.java @@ -79,6 +79,7 @@ public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new LengthFieldPrepender(4, false)); ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 4, 0, 4)); + ch.pipeline().addLast(transactionHandler); } }); diff --git a/tx-client/src/main/java/com/codingapi/tx/netty/utils/IpAddressUtils.java b/tx-client/src/main/java/com/codingapi/tx/netty/utils/IpAddressUtils.java deleted file mode 100644 index a5adaf4f0..000000000 --- a/tx-client/src/main/java/com/codingapi/tx/netty/utils/IpAddressUtils.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.codingapi.tx.netty.utils; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * create by lorne on 2017/12/12 - */ -public class IpAddressUtils { - - private final static String ipAddressRegex = "([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}:([0-9]|[1-9]\\d{1,3}|[1-5]\\d{4}|6[0-5]{2}[0-3][0-5])"; - - private final static Pattern pattern = Pattern.compile(ipAddressRegex); - - public static boolean isIpAddress(String ipAddress){ - Matcher matcher = pattern.matcher(ipAddress); - return matcher.matches(); - } - -} diff --git a/tx-manager/pom.xml b/tx-manager/pom.xml index 974563d27..5d6e431a6 100644 --- a/tx-manager/pom.xml +++ b/tx-manager/pom.xml @@ -80,6 +80,16 @@ + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + true + + + org.apache.maven.plugins maven-jar-plugin diff --git a/tx-manager/src/main/java/com/codingapi/tm/framework/utils/IpAddressUtils.java b/tx-manager/src/main/java/com/codingapi/tm/framework/utils/IpAddressUtils.java new file mode 100644 index 000000000..3f219f2a5 --- /dev/null +++ b/tx-manager/src/main/java/com/codingapi/tm/framework/utils/IpAddressUtils.java @@ -0,0 +1,46 @@ +package com.codingapi.tm.framework.utils; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * create by lorne on 2017/12/12 + */ +public class IpAddressUtils { + + + public static boolean isIpAddress(String ipAddress){ + String ipAddressRegex = "([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}:([0-9]|[1-9]\\d{1,3}|[1-5]\\d{4}|6[0-5][0-9][0-3][0-5])"; + Pattern ipAddressPattern = Pattern.compile(ipAddressRegex); + Matcher matcher = ipAddressPattern.matcher(ipAddress); + return matcher.matches(); + } + + public static boolean isIpFormat(String ipAddress){ + return ipAddress.contains(":"); + } + + public static String getIpByDomain(String domain){ + InetAddress ip= null; + try { + ip = InetAddress.getByName(domain); + } catch (UnknownHostException e) { + return null; + } + return ip.getHostAddress(); + } + + + public static boolean isIp(String ipString) { + String ipRegex = "([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}"; + Pattern pattern = Pattern.compile(ipRegex); + Matcher matcher = pattern.matcher(ipString); + return matcher.matches(); + } + + + + +} 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 04c980131..34da55993 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 @@ -2,6 +2,7 @@ import com.codingapi.tm.Constants; import com.codingapi.tm.config.ConfigReader; +import com.codingapi.tm.framework.utils.IpAddressUtils; import com.codingapi.tm.framework.utils.SocketManager; import com.codingapi.tm.manager.service.MicroService; import com.codingapi.tm.model.TxServer; @@ -18,8 +19,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /** * create by lorne on 2017/11/11 @@ -43,19 +42,10 @@ public class MicroServiceImpl implements MicroService { private EurekaClient eurekaClient; - - /** logger */ private static final Logger logger = LoggerFactory.getLogger(MicroServiceImpl.class); - 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}"; - Pattern pattern = Pattern.compile(ip); - Matcher matcher = pattern.matcher(ipAddress); - return matcher.matches(); - } - public List getConfigServiceInstances() { Application application = eurekaClient.getApplication(tmKey); @@ -70,10 +60,7 @@ public TxState getState() { TxState state = new TxState(); //String ipAddress = EurekaServerContextHolder.getInstance().getServerContext().getApplicationInfoManager().getEurekaInstanceConfig().getIpAddress(); - String ipAddress = discoveryClient.getLocalServiceInstance().getHost(); - if(!isIp(ipAddress)){ - ipAddress = "127.0.0.1"; - } + String ipAddress = getIp(discoveryClient.getLocalServiceInstance().getHost()); state.setIp(ipAddress); state.setPort(Constants.socketPort); state.setMaxConnection(SocketManager.getInstance().getMaxConnection()); @@ -90,18 +77,28 @@ public TxState getState() { } + private String getIp(String ipAddress){ + if(!IpAddressUtils.isIp(ipAddress)){ + + ipAddress = IpAddressUtils.getIpByDomain(ipAddress); + + if(ipAddress==null||!IpAddressUtils.isIp(ipAddress)) { + ipAddress = "127.0.0.1"; + } + } + return ipAddress; + } + private List getServices(){ List urls = new ArrayList<>(); List instanceInfos =getConfigServiceInstances(); for (InstanceInfo instanceInfo : instanceInfos) { String url = instanceInfo.getHomePageUrl(); String address = instanceInfo.getIPAddr(); - if (isIp(address)) { - urls.add(url); - }else{ - url = url.replace(address,"127.0.0.1"); - urls.add(url); - } + String ipAddress = getIp(address); + + url = url.replace(address,ipAddress); + urls.add(url); } return urls; } diff --git a/tx-manager/src/main/java/com/codingapi/tm/netty/service/impl/NettyServerServiceImpl.java b/tx-manager/src/main/java/com/codingapi/tm/netty/service/impl/NettyServerServiceImpl.java index 3f458cf35..c77b42f87 100644 --- a/tx-manager/src/main/java/com/codingapi/tm/netty/service/impl/NettyServerServiceImpl.java +++ b/tx-manager/src/main/java/com/codingapi/tm/netty/service/impl/NettyServerServiceImpl.java @@ -2,10 +2,8 @@ import com.codingapi.tm.Constants; import com.codingapi.tm.config.ConfigReader; -import com.codingapi.tm.manager.service.TxManagerService; import com.codingapi.tm.netty.handler.TxCoreServerHandler; import com.codingapi.tm.netty.service.NettyServerService; - import com.codingapi.tm.netty.service.NettyService; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelInitializer; diff --git a/tx-plugins-db/pom.xml b/tx-plugins-db/pom.xml index 37706a102..214de51a6 100644 --- a/tx-plugins-db/pom.xml +++ b/tx-plugins-db/pom.xml @@ -6,7 +6,7 @@ com.codingapi tx-lcn - 4.0.0 + 4.0.3.M1 com.codingapi diff --git a/tx-plugins-nodb/pom.xml b/tx-plugins-nodb/pom.xml index 2a3a4f0ec..e40ef0d56 100644 --- a/tx-plugins-nodb/pom.xml +++ b/tx-plugins-nodb/pom.xml @@ -6,7 +6,7 @@ com.codingapi tx-lcn - 4.0.0 + 4.0.3.M1 diff --git a/tx-plugins-redis/pom.xml b/tx-plugins-redis/pom.xml index ca9bf5b38..0433c20cd 100644 --- a/tx-plugins-redis/pom.xml +++ b/tx-plugins-redis/pom.xml @@ -7,7 +7,7 @@ com.codingapi tx-lcn - 4.0.0 + 4.0.3.M1 com.codingapi @@ -15,6 +15,7 @@ ${lcn.last.version} tx-plugins-redis + https://github.com/codingapi/tx-lcn tx-plugins-redis project for Spring Boot