package com.revolsys.ui.command;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.transaction.PlatformTransactionManager;
import com.revolsys.transaction.Propagation;
import com.revolsys.transaction.Transaction;
public abstract class AbstractTransactionalCommand implements Runnable {
private final BeanFactory beanFactory;
public AbstractTransactionalCommand(final BeanFactory beanFactory) {
this.beanFactory = beanFactory;
}
public BeanFactory getBeanFactory() {
return this.beanFactory;
}
public void runInTransaction() {
final PlatformTransactionManager transactionManager = (PlatformTransactionManager)this.beanFactory
.getBean("transactionManager");
try (
Transaction transaction = new Transaction(transactionManager, Propagation.REQUIRES_NEW)) {
try {
run();
} catch (final RuntimeException e) {
throw transaction.setRollbackOnly(e);
}
}
}
}