Seam UserTransaction Timout problem
susnet.susanne.susnet.se Jan 4, 2009 5:00 AMI want to have a bean where I can run batch jobs that takes more than 5 minutes. I have read a lot in this forum and jboss but I can not find a solution that works for me. I tried different timeout settings but no one works. My code is below. I added a thread sleep of 5 minutes in the code just to test.
The entityManager always times out and fails. Any help is very much appreciated.
@Name("statService") @Stateless @TransactionManagement(TransactionManagementType.BEAN) @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @TransactionTimeout(1000000000) public class StatServiceBean implements StatServiceLocal { @Logger private Log log; @In EntityManager entityManager; @Resource UserTransaction userTransaction; @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @TransactionTimeout(1000000000) public void generateRecipeShowStat() { entityManager.joinTransaction(); // Loop... while (condition) { Query query = entityManager.createNativeQuery( "INSERT INTO bla bla"); // Save to database. Create manual transaction since the built in only works for 5 minutes. try { userTransaction.begin(); query.executeUpdate(); userTransaction.commit(); } catch (Exception e) { try { log.error("Transaction failed when updating stat. Try rolling back.", e); userTransaction.rollback(); } catch (Exception exp) { log.error("Transaction failed roling back.", exp); } } try { // Test timeout 5 minutes to see that transaction does not fail Thread.sleep(1000*60*5); } catch (InterruptedException e) { System.out.println(e); } } }
Environment: JBoss 4.2.3 Seam 2.1.1.GA, EJB3 with transactionmanagement configured with
<transaction:ejb-transaction />
in components.xml