Transaction timeout (unit is always seconds) can be configured in various ways:
This argument is the same no matter if you are using JBossTM(<=4.0.5) or JBossJTA-Arjuna(>=4.2).
-
Globally: You can change this behavior globally by modifying the TransactionManagerService in /conf/jboss-service.xml (or /deploy/jta-service.xml for 4.0.3)
Version <= 4.0.5
<mbean code="com.arjuna.ats.jbossatx.jta.TransactionManagerService"
name="jboss:service=TransactionManager">
<attribute name="TransactionTimeout">
300</attribute>
...
</mbean>
Version >= 4.2
<mbean code="com.arjuna.ats.jbossatx.jta.TransactionManagerService"
name="jboss:service=TransactionManager">
<attribute name="TransactionTimeout">
300</attribute>
<attribute name="ObjectStoreDir">
${jboss.server.data.dir}/tx-object-store</attribute>
</mbean>
This part is the same for either JBossTM or JBossJTA and is the same for ejb2 and ejb3
-
Per-method basis: Modifying the <transaction-timeout> element inside the <method> element of a session or entity bean. This is located in the META-INF/jboss.xml deployment descriptor of a session bean. When the transaction timeout is specified at the method level, it overrides the default timeout. Further information about this element can be found in jboss-x.x.x/docs/dtd/jboss_4_0.dtd. Example taken from the testsuite:
<?xml version="1.0"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>
TxTimeout</ejb-name>
<jndi-name>
jbosstest/tm/TxTimeout</jndi-name>
<exception-on-rollback>
true</exception-on-rollback>
<method-attributes>
<method>
<method-name>
testOverriddenTimeoutExpires</method-name>
<transaction-timeout>
5</transaction-timeout>
</method>
<method>
<method-name>
testOverriddenTimeoutDoesNotExpire</method-name>
<transaction-timeout>
20</transaction-timeout>
</method>
</method-attributes>
</session>
</enterprise-beans>
</jboss>
-
Using BMT: Calling javax.transaction.UserTransaction.setTransactionTimeout(int seconds). Please, be aware that this only applies to transactions started after this invocation on the same thread. Example:
UserTransaction ut = (UserTransaction)ctx.lookup("java:comp/UserTransaction"
);
ut.setTransactionTimeout(20);
ut.begin();
...
ut.commit();
-
Using it with EJB3 annotations..
For MBDs, you can specify it as an activation configuration that applies to the entire bean:
@ActivationConfigProperty(propertyName="transactionTimeout"
, propertyValue="1"
)
For the rest of beans, you can use @TransactionTimeout annotation that can be applied either at class level or method level:
@TransactionTimeout(1500)