第一阶段
Try 对操作数据进行 预留、冻结 资源
第二阶段‘
Confirm 提交
Cancel 回滚
@LocalTCC
public interface OrderTccAction {
@TwoPhaseBusinessAction(name = "xOrderTccAction") //加上这个注解就是第一阶段方法,commitMeth="commit"默认
boolean prepare(BusinessActionContext ctx,
@BusinessActionContextParameter(paramName = "orderId") Long orderId,
Long userId,
Long productId,
Integer count,
BigDecimal money);
boolean commit(BusinessActionContext ctx);
boolean rollback(BusinessActionContext ctx);
}
幂等性问题
public class ResultHolder {
private static Map, Map> map = new ConcurrentHashMap, Map>();
public static void setResult(Class> actionClass, String xid, String v) {
Map results = map.get(actionClass);
if (results == null) {
synchronized (map) {
if (results == null) {
results = new ConcurrentHashMap<>();
map.put(actionClass, results);
}
}
}
results.put(xid, v);
}
public static String getResult(Class> actionClass, String xid) {
Map results = map.get(actionClass);
if (results != null) {
return results.get(xid);
}
return null;
}
public static void removeResult(Class> actionClass, String xid) {
Map results = map.get(actionClass);
if (results != null) {
results.remove(xid);
}
}
}



