Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<groupId>com.codingapi</groupId>
<artifactId>tx-lcn</artifactId>
<version>4.1.0</version>
<version>4.2.0-SNAPSHOT</version>
<packaging>pom</packaging>

<name>tx-lcn</name>
Expand All @@ -32,7 +32,7 @@
<java.version>1.7</java.version>
<maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>

<lcn.last.version>4.1.0</lcn.last.version>
<lcn.last.version>4.2.0-SNAPSHOT</lcn.last.version>
</properties>


Expand Down
2 changes: 1 addition & 1 deletion transaction-dubbo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<parent>
<groupId>com.codingapi</groupId>
<artifactId>tx-lcn</artifactId>
<version>4.1.0</version>
<version>4.2.0-SNAPSHOT</version>
</parent>

<groupId>com.codingapi</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.codingapi.tx.dubbo.filter;

import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.extension.Activate;
import com.alibaba.dubbo.rpc.*;
import com.codingapi.tx.aop.bean.TxTransactionLocal;
import org.slf4j.Logger;
Expand All @@ -8,6 +10,7 @@
/**
* Created by lorne on 2017/6/30.
*/
@Activate(group = Constants.CONSUMER, order = -10001)
public class TransactionFilter implements Filter {


Expand All @@ -23,6 +26,7 @@ public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcExcept

if(txTransactionLocal!=null){
RpcContext.getContext().setAttachment("tx-group",groupId);
RpcContext.getContext().setAttachment("tx-mode",txTransactionLocal.getMode().name());
}

return invoker.invoke(invocation);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.codingapi.tx.dubbo.interceptor;

import com.codingapi.tx.Constants;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
Expand Down Expand Up @@ -45,7 +46,7 @@ public Object around(ProceedingJoinPoint point)throws Throwable{

@Override
public int getOrder() {
return HIGHEST_PRECEDENCE;
return Constants.ASPECT_ORDER;
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,12 @@ public class TxManagerInterceptor {
public Object around(ProceedingJoinPoint point) throws Throwable {

String groupId = null;
String mode = null;
try {
groupId = RpcContext.getContext().getAttachment("tx-group");
mode = RpcContext.getContext().getAttachment("tx-mode");
}catch (Exception e){}
return aspectBeforeService.around(groupId,point);
return aspectBeforeService.around(groupId,point,mode);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,15 @@ public class TransactionSocketListener implements ApplicationContextAware {

@Override
public void setApplicationContext(ApplicationContext event) throws BeansException {
initService.start();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// 若连接不上txmanager start()方法将阻塞
initService.start();
}
});
thread.setName("TxInit-thread");
thread.start();
}

}
2 changes: 1 addition & 1 deletion transaction-motan/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<parent>
<groupId>com.codingapi</groupId>
<artifactId>tx-lcn</artifactId>
<version>4.1.0</version>
<version>4.2.0-SNAPSHOT</version>
</parent>

<groupId>com.codingapi</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
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;
Expand Down Expand Up @@ -43,7 +44,7 @@ public Object around(ProceedingJoinPoint point)throws Throwable{

@Override
public int getOrder() {
return HIGHEST_PRECEDENCE;
return Constants.ASPECT_ORDER;
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,12 @@ public class TxManagerInterceptor {
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);
return aspectBeforeService.around(groupId, point, mode);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,15 @@ public class TransactionSocketListener implements ApplicationContextAware {

@Override
public void setApplicationContext(ApplicationContext event) throws BeansException {
initService.start();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// 若连接不上txmanager start()方法将阻塞
initService.start();
}
});
thread.setName("TxInit-thread");
thread.start();
}

}
2 changes: 1 addition & 1 deletion transaction-springcloud/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi</groupId>
<artifactId>tx-lcn</artifactId>
<version>4.1.0</version>
<version>4.2.0-SNAPSHOT</version>
</parent>

<groupId>com.codingapi</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.codingapi.tx.springcloud.interceptor;

import com.codingapi.tx.Constants;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
Expand Down Expand Up @@ -43,7 +44,7 @@ public Object around(ProceedingJoinPoint point)throws Throwable{

@Override
public int getOrder() {
return HIGHEST_PRECEDENCE;
return Constants.ASPECT_ORDER;
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,13 @@ public class TxManagerInterceptor {

public Object around(ProceedingJoinPoint point) throws Throwable {
String groupId = null;
String mode = null;
try {
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = requestAttributes == null ? null : ((ServletRequestAttributes) requestAttributes).getRequest();
groupId = request == null ? null : request.getHeader("tx-group");
mode = request == null ? null : request.getHeader("tx-mode");
}catch (Exception e){}
return aspectBeforeService.around(groupId, point);
return aspectBeforeService.around(groupId, point, mode);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,15 @@ public void onApplicationEvent(EmbeddedServletContainerInitializedEvent event) {
logger.info("onApplicationEvent -> onApplicationEvent. "+event.getEmbeddedServletContainer());
this.serverPort = event.getEmbeddedServletContainer().getPort();

initService.start();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// 若连接不上txmanager start()方法将阻塞
initService.start();
}
});
thread.setName("TxInit-thread");
thread.start();
}

public int getPort() {
Expand Down
2 changes: 1 addition & 1 deletion tx-client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi</groupId>
<artifactId>tx-lcn</artifactId>
<version>4.1.0</version>
<version>4.2.0-SNAPSHOT</version>
</parent>

<groupId>com.codingapi</groupId>
Expand Down
8 changes: 8 additions & 0 deletions tx-client/src/main/java/com/codingapi/tx/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,12 @@ public class Constants {
*/
public static TxServer txServer;

/**
* 主切面的 order值
* 主切面一定要在 @Transaction 切面的外层(ASPECT_ORDER 小于 <tx:annotation-driven>标签中的order )
* 主切面需要能接受到异常。接收到异常才会触发回滚
* 这意味着自定义的切面若catch了异常且不向外传递,那么这个切面需要在主切面的外层(自定义切面order 小于 ASPECT_ORDER)
*/
public static final int ASPECT_ORDER = 1000;

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,17 @@
*/
Class<? extends Throwable>[] noRollbackFor() default {};

/**
* 事务模式 仅在事务发起方配置有效
* @return
*/
TxTransactionMode mode() default TxTransactionMode.TX_MODE_LCN;

/**
* 标示本服务是否是只读
* 若为true : 不会加入事务组; Connection 不会被 Wrap; 事务信息能正常传递
* 在本服务无DB操作或仅有查询时请配置 true 将提高性能
* 若应用都没有DB配置,此配置无意义不用设值
*/
boolean readOnly() default false;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.codingapi.tx.annotation;

/**
*
*
* @author caican
* 2018/7/24
*/
public enum TxTransactionMode {
/** LCN 模式 */
TX_MODE_LCN("LCN 模式,2阶段提交 读提交"),

/** TXC 模式 */
TX_MODE_TXC("TXC 模式,未提交读(READ UNCOMMITTED)");


private String description;

TxTransactionMode(String description) {
this.description = description;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.codingapi.tx.aop.bean;

import com.codingapi.tx.annotation.TxTransaction;
import com.codingapi.tx.annotation.TxTransactionMode;
import com.codingapi.tx.model.TransactionInvocation;


Expand All @@ -24,6 +25,7 @@ public class TxTransactionInfo {

private TransactionInvocation invocation;

private TxTransactionMode mode;

public TxTransactionInfo(TxTransaction transaction, TxTransactionLocal txTransactionLocal, TransactionInvocation invocation, String txGroupId) {
this.transaction = transaction;
Expand All @@ -32,6 +34,13 @@ public TxTransactionInfo(TxTransaction transaction, TxTransactionLocal txTransac
this.invocation = invocation;
}

public TxTransactionMode getMode() {
return mode;
}

public void setMode(TxTransactionMode mode) {
this.mode = mode;
}

public TxTransaction getTransaction() {
return transaction;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.codingapi.tx.aop.bean;

import com.alibaba.fastjson.JSONObject;
import com.codingapi.tx.annotation.TxTransactionMode;
import com.codingapi.tx.framework.utils.SocketManager;
import com.codingapi.tx.model.Request;
import org.apache.commons.lang.StringUtils;
Expand Down Expand Up @@ -48,6 +49,8 @@ public class TxTransactionLocal {

private boolean readOnly = false;

private TxTransactionMode mode;

public boolean isHasIsGroup() {
return hasIsGroup;
}
Expand Down Expand Up @@ -106,6 +109,13 @@ public static void setCurrent(TxTransactionLocal current) {
currentLocal.set(current);
}

public TxTransactionMode getMode() {
return mode;
}

public void setMode(TxTransactionMode mode) {
this.mode = mode;
}

public void putLoadBalance(String key, String data){
cacheModelInfo.put(key,data);
Expand Down Expand Up @@ -157,4 +167,14 @@ public void setReadOnly(boolean readOnly) {
this.readOnly = readOnly;
}

public static boolean isInTxcTransaction() {
TxTransactionLocal local = current();
if (local != null
&& local.mode != null
&& local.mode == TxTransactionMode.TX_MODE_TXC
&& !local.isReadOnly()) {
return true;
}
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
*/
public interface AspectBeforeService {

Object around(String groupId, ProceedingJoinPoint point) throws Throwable;
Object around(String groupId, ProceedingJoinPoint point, String mode) throws Throwable;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.codingapi.tx.aop.service.impl;

import com.codingapi.tx.annotation.TxTransaction;
import com.codingapi.tx.annotation.TxTransactionMode;
import com.codingapi.tx.aop.bean.TxTransactionInfo;
import com.codingapi.tx.aop.bean.TxTransactionLocal;
import com.codingapi.tx.aop.service.AspectBeforeService;
Expand Down Expand Up @@ -28,8 +29,8 @@ public class AspectBeforeServiceImpl implements AspectBeforeService {

private Logger logger = LoggerFactory.getLogger(AspectBeforeServiceImpl.class);


public Object around(String groupId, ProceedingJoinPoint point) throws Throwable {
@Override
public Object around(String groupId, ProceedingJoinPoint point, String mode) throws Throwable {

MethodSignature signature = (MethodSignature) point.getSignature();
Method method = signature.getMethod();
Expand All @@ -46,6 +47,11 @@ public Object around(String groupId, ProceedingJoinPoint point) throws Throwable
TransactionInvocation invocation = new TransactionInvocation(clazz, thisMethod.getName(), thisMethod.toString(), args, method.getParameterTypes());

TxTransactionInfo info = new TxTransactionInfo(transaction,txTransactionLocal,invocation,groupId);
try {
info.setMode(TxTransactionMode.valueOf(mode));
} catch (Exception e) {
info.setMode(TxTransactionMode.TX_MODE_LCN);
}

TransactionServer server = transactionServerFactoryService.createTransactionServer(info);

Expand Down
Loading