Spring offers a few options when it comes to transaction management. I used the Programmatic Transaction option this was the easiest to implement in the architecture that I was working with. Here are the steps that I used.
First I modified the jboss-spring.xml file to include a bean reference to the JTA Transaction Manager.
jboss-spring.xml
<bean id=”transactionManager”
class=”org.springframework.transaction.jta.JtaTransactionManager” />
Then in the classes that I wanted to use transactions I added a reference to the bean as a property in the jboss-spring.xml file.
<bean id=”bookMgmtHandler” class=”com.davis.bo.BookMgmtHandler”>
<property name=”bookDAO” ref=”bookDAO” />
<property name=”transactionManager” ref=”transactionManager”/>
</bean>
I then needed to add some imports to the actual Java class that would contain the transactional references. The additional functions that I needed to add related to Spring transactions are highlighted in bold.
BookMgmtHandler.java
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
public class BookMgmtHandler {
BookDAO BookDAO = null;
BookDataAggregator BookDataAggregator = null;
private PlatformTransactionManager transactionManager = null;
private TransactionDefinition getDefinition() {
DefaultTransactionDefinition def = new DefaultTransactionDefinition
(TransactionDefinition.PROPAGATION_REQUIRED);
return def;
}
public Book saveBook(Book book) throws BOOKException {
Book retBook = null;
TransactionStatus status = transactionManager.getTransaction(getDefinition());
// put a block for catching exceptions to rollback the transaction
try {
BookDAO.updateBook(book);
retBook = BookDataAggregator.getBook(book.getBookID());
}
catch (BOOKException be){
transactionManager.rollback(status);
throw be;
}
transactionManager.commit(status);
return retBook;
}
public void setTransactionManager(PlatformTransactionManager platformTransactionManager) {
this.transactionManager = platformTransactionManager;
}
}
And that’s it!