zoukankan      html  css  js  c++  java
  • TransactionSynchronizationManager TransactionSynchronizationAdapter

    public class TransactionSynchronizer {
        private final static Logger logger = LoggerFactory.getLogger(TransactionSynchronizer.class);
    
        public static void afterCommit(final Runnable runnable) {
            if (TransactionSynchronizationManager.isActualTransactionActive()) {
                TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                    @Override
                    public void afterCommit() {
                        runnable.run();
                    }
                });
            } else {
                //directly call
                runnable.run();
            }
        }
    
        @SuppressWarnings("unchecked")
        public static <T> Future<T> afterCommit(final Callable<T> callable) {
            final TransactionFuture<T> future = new TransactionFuture<>();
            if (TransactionSynchronizationManager.isActualTransactionActive()) {
                TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                    @Override
                    public void afterCommit() {
                        try {
                            future.put(callable.call());
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
            } else {
                //directly call
                try {
                    future.put(callable.call());
                } catch (Exception e) {
                    future.cancel(true);
                }
            }
            return future;
        }
    
        /**
         * after commit or rollback
         */
        public static void afterCompletion(final Runnable runnable) {
            if (TransactionSynchronizationManager.isActualTransactionActive()) {
                TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                    @Override
                    public void afterCompletion(int status) {
                        runnable.run();
                    }
                });
            } else {
                //directly call
                runnable.run();
            }
        }
    
        @SuppressWarnings("unchecked")
        public static <T> Future<T> afterCompletion(final Callable<T> callable) {
            final TransactionFuture<T> future = new TransactionFuture<>();
            if (TransactionSynchronizationManager.isActualTransactionActive()) {
                TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                    @Override
                    public void afterCompletion(int status) {
                        try {
                            future.put(callable.call());
                        } catch (Exception e) {
                            logger.error("error calling callable.", e);
                            future.cancel(true);
                        }
                    }
                });
            } else {
                //directly call
                try {
                    future.put(callable.call());
                } catch (Exception e) {
                    logger.error("error calling callable.", e);
                    future.cancel(true);
                }
            }
            return future;
        }
    }
  • 相关阅读:
    矩阵相关计算-基础
    列表-元祖-字典
    Python制作NTF传递函数工况文件和后处理文件
    C++栈和堆的生长方向
    malloc/free与new/delete的区别
    C++中4个类型转换相关的关键字/特点/应用场合
    Python 拾遗
    Python 常用库
    Python 视频转字符动画
    Python 命令行(CLI)基础库
  • 原文地址:https://www.cnblogs.com/zhonghan/p/3842499.html
Copyright © 2011-2022 走看看