Skip to content

Commit 2a44cfb

Browse files
committed
Merge branch '5.0.0-dev' of https://github.com/codingapi/tx-lcn into 5.0.0-dev
2 parents d3f344f + c459206 commit 2a44cfb

29 files changed

Lines changed: 269 additions & 341 deletions

File tree

example/spring-demo-client/src/main/java/com/codingapi/example/client/TransactionConfiguration.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
*
2020
* @author ujued
2121
*/
22-
@Configuration
23-
@EnableTransactionManagement
24-
@EnableConfigurationProperties(TransactionProperties.class)
22+
//@Configuration
23+
//@EnableTransactionManagement
24+
//@EnableConfigurationProperties(TransactionProperties.class)
2525
public class TransactionConfiguration {
2626

2727
@Bean

example/spring-demo-client/src/main/java/com/codingapi/example/client/service/DemoServiceImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.codingapi.example.common.spring.DDemoClient;
66
import com.codingapi.example.common.spring.EDemoClient;
77
import com.codingapi.tx.client.bean.DTXLocal;
8+
import com.codingapi.tx.commons.annotation.LcnTransaction;
89
import org.springframework.beans.factory.annotation.Autowired;
910
import org.springframework.beans.factory.annotation.Value;
1011
import org.springframework.core.annotation.Order;
@@ -35,6 +36,7 @@ public class DemoServiceImpl implements DemoService {
3536
private String appName;
3637

3738
@Override
39+
@LcnTransaction
3840
public String execute(String value) {
3941
String dResp = dDemoClient.rpc(value);
4042
String eResp = eDemoClient.rpc(value);

example/spring-demo-client/src/main/resources/application-ujued.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ spring.datasource.password=123456
33
tx-lcn.logger.enabled=true
44

55
#spring.cloud.consul.discovery.health-check-url=http://127.0.0.1:${server.port}/actuator/health
6-
logging.level.com.codingapi.tx.client=DEBUG
6+
#logging.level.com.codingapi.tx.client=DEBUG

tx-client/src/main/java/com/codingapi/tx/client/TxClientConfiguration.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
import com.codingapi.tx.client.spi.transaction.txc.resource.init.DefaultTxcSettingFactory;
44
import com.codingapi.tx.client.spi.transaction.txc.resource.init.TxcSettingFactory;
5+
import com.codingapi.tx.client.support.checking.DTXChecking;
6+
import com.codingapi.tx.client.support.checking.SimpleDTXChecking;
7+
import com.codingapi.tx.client.support.common.template.TransactionCleanTemplate;
58
import org.apache.commons.dbutils.QueryRunner;
9+
import org.springframework.beans.factory.SmartInitializingSingleton;
610
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
711
import org.springframework.boot.context.properties.EnableConfigurationProperties;
812
import org.springframework.context.annotation.Bean;
@@ -34,4 +38,14 @@ public QueryRunner queryRunner(DataSource dataSource) {
3438
public TxcSettingFactory txcSettingFactory() {
3539
return new DefaultTxcSettingFactory();
3640
}
41+
42+
@Bean
43+
public SmartInitializingSingleton dtxCheckingTransactionCleanTemplateAdapter(DTXChecking dtxChecking,
44+
TransactionCleanTemplate transactionCleanTemplate) {
45+
if (dtxChecking instanceof SimpleDTXChecking) {
46+
return () -> ((SimpleDTXChecking) dtxChecking).setTransactionCleanTemplate(transactionCleanTemplate);
47+
}
48+
return () -> {
49+
};
50+
}
3751
}

tx-client/src/main/java/com/codingapi/tx/client/aspect/weave/DTXLogicWeaver.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ public Object runTransaction(DTXInfo dtxInfo, BusinessCallback business) throws
6868
try {
6969
return transactionServiceExecutor.transactionRunning(info);
7070
} finally {
71+
synchronized (DTXLocal.cur()) {
72+
DTXLocal.cur().notify();
73+
}
7174
DTXLocal.makeNeverAppeared();
7275
log.info("tx-unit end------>");
7376
}

tx-client/src/main/java/com/codingapi/tx/client/bean/DTXLocal.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ public class DTXLocal {
3131
*/
3232
private String unitId;
3333

34+
/**
35+
* 业务相关资源
36+
*/
37+
private Object resource;
38+
3439

3540
////////////////////////// volatile ///////////////////////////////
3641

tx-client/src/main/java/com/codingapi/tx/client/spi/message/txc/TxcTransactionCleanService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.codingapi.tx.client.spi.transaction.txc.resource.def.TxcService;
44
import com.codingapi.tx.commons.exception.TransactionClearException;
55
import com.codingapi.tx.client.support.common.TransactionCleanService;
6+
import com.codingapi.tx.commons.exception.TxcLogicException;
67
import com.codingapi.tx.logger.TxLogger;
78
import lombok.extern.slf4j.Slf4j;
89
import org.springframework.beans.factory.annotation.Autowired;
@@ -40,7 +41,7 @@ public void clear(String groupId, int state, String unitId, String unitType) thr
4041

4142
// 清理TXC
4243
txcService.cleanTxc(groupId, unitId);
43-
} catch (SQLException e) {
44+
} catch (TxcLogicException e) {
4445
log.error("txc > clean transaction error. {}", e.getMessage());
4546
throw new TransactionClearException(e.getMessage());
4647
}

tx-client/src/main/java/com/codingapi/tx/client/spi/transaction/txc/control/TxcRunningTransaction.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.codingapi.tx.client.spi.transaction.txc.resource.def.bean.RollbackInfo;
1010
import com.codingapi.tx.commons.exception.TransactionClearException;
1111
import com.codingapi.tx.commons.exception.TxClientException;
12+
import com.codingapi.tx.commons.exception.TxcLogicException;
1213
import lombok.extern.slf4j.Slf4j;
1314
import org.springframework.beans.factory.annotation.Autowired;
1415
import org.springframework.stereotype.Component;
@@ -51,10 +52,6 @@ public void preBusinessCode(TxTransactionInfo info) {
5152

5253
@Override
5354
public void onBusinessCodeError(TxTransactionInfo info, Throwable throwable) {
54-
// 写Undo log 早于 clean
55-
txcService.writeUndoLog(
56-
info.getGroupId(), info.getUnitId(), (RollbackInfo) DTXLocal.cur().getAttachment());
57-
5855
try {
5956
log.info("txc > running > clean transaction.");
6057
transactionCleanTemplate.clean(
@@ -70,8 +67,12 @@ public void onBusinessCodeError(TxTransactionInfo info, Throwable throwable) {
7067
@Override
7168
public void onBusinessCodeSuccess(TxTransactionInfo info, Object result) throws TxClientException {
7269
// 写Undo log
73-
txcService.writeUndoLog(
74-
info.getGroupId(), info.getUnitId(), (RollbackInfo) DTXLocal.cur().getAttachment());
70+
try {
71+
txcService.writeUndoLog(
72+
info.getGroupId(), info.getUnitId(), (RollbackInfo) DTXLocal.cur().getAttachment());
73+
} catch (TxcLogicException e) {
74+
throw new TxClientException(e);
75+
}
7576
// 加入事务组
7677
transactionControlTemplate.joinGroup(info.getGroupId(), info.getUnitId(), info.getTransactionType(),
7778
info.getTransactionInfo());

tx-client/src/main/java/com/codingapi/tx/client/spi/transaction/txc/control/TxcStartingTransaction.java

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package com.codingapi.tx.client.spi.transaction.txc.control;
22

3-
import com.codingapi.tx.client.bean.TxTransactionInfo;
43
import com.codingapi.tx.client.bean.DTXLocal;
5-
import com.codingapi.tx.client.spi.transaction.txc.resource.def.TxcService;
4+
import com.codingapi.tx.client.bean.TxTransactionInfo;
65
import com.codingapi.tx.client.spi.transaction.txc.resource.def.bean.RollbackInfo;
7-
import com.codingapi.tx.client.support.separate.TXLCNTransactionControl;
86
import com.codingapi.tx.client.support.common.template.TransactionControlTemplate;
7+
import com.codingapi.tx.client.support.separate.TXLCNTransactionControl;
98
import com.codingapi.tx.commons.exception.BeforeBusinessException;
109
import lombok.extern.slf4j.Slf4j;
1110
import org.springframework.beans.factory.annotation.Autowired;
@@ -23,15 +22,10 @@
2322
@Slf4j
2423
public class TxcStartingTransaction implements TXLCNTransactionControl {
2524

26-
private final TxcService txcService;
27-
2825
private final TransactionControlTemplate transactionControlTemplate;
2926

3027
@Autowired
31-
public TxcStartingTransaction(
32-
TxcService txcService,
33-
TransactionControlTemplate transactionControlTemplate) {
34-
this.txcService = txcService;
28+
public TxcStartingTransaction(TransactionControlTemplate transactionControlTemplate) {
3529
this.transactionControlTemplate = transactionControlTemplate;
3630
}
3731

@@ -74,11 +68,6 @@ public void postBusinessCode(TxTransactionInfo info) {
7468
state = -1;
7569
}
7670

77-
// 非提交状态,写Undo log
78-
if (state != 1) {
79-
txcService.writeUndoLog(info.getGroupId(), info.getUnitId(), rollbackInfo);
80-
}
81-
8271
// 关闭事务组
8372
transactionControlTemplate.notifyGroup(info.getGroupId(), info.getUnitId(), info.getTransactionType(), state);
8473
}

tx-client/src/main/java/com/codingapi/tx/client/spi/transaction/txc/resource/TxcJdbcEventListener.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package com.codingapi.tx.client.spi.transaction.txc.resource;
22

3+
import com.codingapi.tx.client.bean.DTXLocal;
34
import com.codingapi.tx.client.spi.transaction.txc.resource.def.SqlExecuteInterceptor;
45
import com.codingapi.tx.client.spi.transaction.txc.resource.def.bean.LockableSelect;
56
import com.codingapi.tx.client.spi.transaction.txc.resource.init.TxcSettingFactory;
7+
import com.codingapi.tx.client.spi.transaction.txc.resource.util.SqlUtils;
68
import com.codingapi.tx.jdbcproxy.p6spy.common.PreparedStatementInformation;
79
import com.codingapi.tx.jdbcproxy.p6spy.common.StatementInformation;
810
import com.codingapi.tx.jdbcproxy.p6spy.event.SimpleJdbcEventListener;
11+
import com.codingapi.tx.jdbcproxy.p6spy.util.TxcUtils;
912
import lombok.extern.slf4j.Slf4j;
1013
import net.sf.jsqlparser.JSQLParserException;
1114
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
@@ -42,11 +45,14 @@ public TxcJdbcEventListener(SqlExecuteInterceptor sqlExecuteInterceptor, TxcSett
4245
public void onBeforeAnyExecute(StatementInformation statementInformation) throws SQLException {
4346
String sql = statementInformation.getSqlWithValues();
4447

45-
// 忽略Txc数据表
46-
if (sql.contains(txcSettingFactory.lockTableName()) || sql.contains(txcSettingFactory.undoLogTableName())) {
48+
// 忽略TxcSQL
49+
if (TxcUtils.isTxcSQL(sql)) {
4750
return;
4851
}
4952

53+
// 当前业务链接
54+
DTXLocal.cur().setResource(statementInformation.getStatement().getConnection());
55+
5056
// 拦截处理
5157
try {
5258
long startTime = System.currentTimeMillis();

0 commit comments

Comments
 (0)