JBoss takes advantage of an obvious (though undocmented)
performance optimization done by all databases.
connection.setAutoCommit(false); // do work connection.commit(); // ends the previous transaction
We should do the following, but that would typically involve
two network requests for poorly implemented jdbc drivers
// When the user does connection.close() connection.setAutoCommit(true); // At the next setAutoCommit(false) when the user asks for the connection again. connection.setAutoCommit(false);
But we actually do
Followed by the next transaction
// do work connection.commit();
Databases don't automatically start a new/next transaction after
a connection.commit() because this would be a waste if the
user is just going to do connection.close() straight away.
They start the next transaction at the first "do work".
In fact, JBoss's jdbc wrapper uses the same technique (for the same
reason) with the checkTransaction() done during createStatement(), etc.