Flowable源码注释(五十四)Spring事务

本文深入探讨Flowable源码中与Spring事务相关的部分,主要关注TransactionContext事务上下文接口及其SpringTransactionContext的实现。通过链接提供的源码地址,读者可以详细研究Flowable在Spring环境下如何处理事务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flowable源码地址:https://github.com/flowable/flowable-engine

Flowable-6.7.2 源码注释地址:https://github.com/solojin/flowable-6.7.2-annotated

Spring事务,包路径:org.activiti.spring

TransactionContext 事务上下文接口

package org.activiti.engine.impl.cfg;
/**
 * 事务上下文
 *
 * @author Tom Baeyens
 */
public interface TransactionContext {

    // 提交
    void commit();

    // 回滚
    void rollback();

    void addTransactionListener(TransactionState transactionState, TransactionListener transactionListener);
}

SpringTransactionContext Spring事务

/**
 * 将事务交给Spring管理
 *
 * @author Frederik Heremans
 * @author Joram Barrez
 */
public class SpringTransactionContext implements TransactionContext {

    protected PlatformTransactionManager transactionManager;
    protected CommandContext commandContext;
    protected Integer transactionSynchronizationAdapterOrder;

    public SpringTransactionContext(PlatformTransactionManager transactionManager, CommandContext commandContext) {
        this(transactionManager, commandContext, null);
    }

    public SpringTransactionContext(PlatformTransactionManager transactionManager, CommandContext commandContext, Integer transactionSynchronizationAdapterOrder) {
        this.transactionManager = transactionManager;
        this.commandContext = commandContext;
        if (transactionSynchronizationAdapterOrder != null) {
            this.transactionSynchronizationAdapterOrder = transactionSynchronizationAdapterOrder;
        } else {
            // 恢复到默认值,这是一个很高的数字,因为添加订单之前的行为会将TransactionSynchronizationAdapter
            // 设置为在所有实现Ordered的适配器之后调用
            this.transactionSynchronizationAdapterOrder = Integer.MAX_VALUE;
        }
    }

    @Override
    public void commit() {
        // 什么都不做,事务由spring管理
    }

    @Override
    public void rollback() {
        // 为了防止回滚不是由异常触发的,我们将当前事务标记为rollBackOnly。
        transactionManager.getTransaction(null).setRollbackOnly();
    }

    @Override
    public void addTransactionListener(final TransactionState transactionState, final TransactionListener transactionListener) {
        if (transactionState == TransactionState.COMMITTING) {

            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                @Override
                public void beforeCommit(boolean readOnly) {
                    transactionListener.execute(commandContext);
                }
            });

        } else if (transactionState == TransactionState.COMMITTED) {

            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                @Override
                public void afterCommit() {
                    transactionListener.execute(commandContext);
                }
            });

        } else if (transactionState == TransactionState.ROLLINGBACK) {

            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                @Override
                public void beforeCompletion() {
                    transactionListener.execute(commandContext);
                }
            });

        } else if (transactionState == TransactionState.ROLLED_BACK) {

            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                @Override
                public void afterCompletion(int status) {
                    if (TransactionSynchronization.STATUS_ROLLED_BACK == status) {
                        transactionListener.execute(commandContext);
                    }
                }
            });
        }
    }

    protected abstract class TransactionSynchronizationAdapter implements TransactionSynchronization, Ordered {

        @Override
        public void suspend() {
        }

        @Override
        public void resume() {
        }

        @Override
        public void flush() {
        }

        @Override
        public void beforeCommit(boolean readOnly) {
        }

        @Override
        public void beforeCompletion() {
        }

        @Override
        public void afterCommit() {
        }

        @Override
        public void afterCompletion(int status) {
        }

        @Override
        public int getOrder() {
            return transactionSynchronizationAdapterOrder;
        }

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值