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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand Up@@ -48,6 +49,8 @@ public class TxTransactionLocal {

private boolean readOnly = false;

private TxTransactionMode mode;

public boolean isHasIsGroup() {
return hasIsGroup;
}
Expand DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand Up@@ -48,6 +49,8 @@ public class TxTransactionLocal {

private boolean readOnly = false;

private TxTransactionMode mode;

public boolean isHasIsGroup() {
return hasIsGroup;
}
Expand DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand Up@@ -48,6 +49,8 @@ public class TxTransactionLocal {

private boolean readOnly = false;

private TxTransactionMode mode;

public boolean isHasIsGroup() {
return hasIsGroup;
}
Expand DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand Up@@ -48,6 +49,8 @@ public class TxTransactionLocal {

private boolean readOnly = false;

private TxTransactionMode mode;

public boolean isHasIsGroup() {
return hasIsGroup;
}
Expand DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand Up@@ -48,6 +49,8 @@ public class TxTransactionLocal {

private boolean readOnly = false;

private TxTransactionMode mode;

public boolean isHasIsGroup() {
return hasIsGroup;
}
Expand DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand Up@@ -48,6 +49,8 @@ public class TxTransactionLocal {

private boolean readOnly = false;

private TxTransactionMode mode;

public boolean isHasIsGroup() {
return hasIsGroup;
}
Expand DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand Up@@ -48,6 +49,8 @@ public class TxTransactionLocal {

private boolean readOnly = false;

private TxTransactionMode mode;

public boolean isHasIsGroup() {
return hasIsGroup;
}
Expand DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand Up@@ -48,6 +49,8 @@ public class TxTransactionLocal {

private boolean readOnly = false;

private TxTransactionMode mode;

public boolean isHasIsGroup() {
return hasIsGroup;
}
Expand DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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