OTS does not let you call rollback-only if the state of the transaction is not active. JTA doesn't make it clear whether or not that is an error. That makes it implementation dependent. At the moment both of our JTA implementations mask this issue. AS appears to not expect an exception from setRollbackOnly either, but that's may cause an issue if someone uses a different JTA.