小编hon*_*hai的帖子

与Guice和JDBC的交易 - 解决方案讨论

在我的应用程序中,我需要将纯JDBC与Guice一起使用.但是,Guice不提供任何内置支持来管理事务.guice-persist只提供基于JPA的支持,我不能使用它.

所以我尝试实现一个简单的解决方案来管理Guice和JDBC的事务.这是第一个版本:

  1. 使用TransactionHolder存储每个线程的事务.

    公共类JdbcTransactionHolder {

    private static ThreadLocal<JdbcTransaction> currentTransaction = new ThreadLocal<JdbcTransaction>();
    
    public static void setCurrentTransaction(JdbcTransaction transaction) {
        currentTransaction.set(transaction);
    }
    
    public static JdbcTransaction getCurrentTransaction() {
        return currentTransaction.get();
    }
    
    public static void removeCurrentTransaction() {
        currentTransaction.remove();
    }
    
    Run Code Online (Sandbox Code Playgroud)

    }

  2. 实现JDBC的事务管理器,现在只有begin(),getTransaction(),commit()和rollback()方法:

    公共类JdbcTransactionManager实现TransactionManager {

    @Inject
    private DataSource dataSource;
    
    @Override
    public void begin() throws NotSupportedException, SystemException {
        logger.debug("Start the transaction");
        try {
            JdbcTransaction tran = JdbcTransactionHolder.getCurrentTransaction();
            Connection conn = null;
            if(tran == null) {
                conn = dataSource.getConnection();
            }
            else {
                conn = tran.getConnection();
            }
    
            // We …
    Run Code Online (Sandbox Code Playgroud)

transactions jdbc guice transactionmanager

5
推荐指数
0
解决办法
2420
查看次数

标签 统计

guice ×1

jdbc ×1

transactionmanager ×1

transactions ×1