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;
        }
    }
  • 相关阅读:
    (转)值得学习百度开源70+项目
    C#中$的用法
    (转载)《C#高级编程》读书笔记
    C#调用大漠插件
    Visual Studio 2017 扩展推荐
    C#操作Dataset数据集与SQLite数据库
    (转载)C#格式规范
    (转载)DataTable与List<T>相互转换
    FastReport.Net
    (转载)C #开源框架
  • 原文地址:https://www.cnblogs.com/zhonghan/p/3842499.html
Copyright © 2011-2022 走看看