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;
        }
    }
  • 相关阅读:
    洛谷 P3391 文艺平衡树
    [ZJOI2008]杀蚂蚁 Solution
    POJ P3667 Hotel——solution
    洛谷 P2469 [SDOI2010]星际竞速 解题报告
    POJ P2318 TOYS与POJ P1269 Intersecting Lines——计算几何入门题两道
    【linux】基础知识学习
    【linux】打包压缩命令
    【python】类file文件处理
    【python】使用asyncore进行异步通信
    【python】命令行解析工具getopt用法
  • 原文地址:https://www.cnblogs.com/zhonghan/p/3842499.html
Copyright © 2011-2022 走看看