在我的应用程序中,我需要将纯JDBC与Guice一起使用.但是,Guice不提供任何内置支持来管理事务.guice-persist只提供基于JPA的支持,我不能使用它.
所以我尝试实现一个简单的解决方案来管理Guice和JDBC的事务.这是第一个版本:
使用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)
}
实现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)