It helps if an error occurs in the doStuff() part, because the transaction
is closed properly. As a further benefit, all updates/inserts since the
last commit/rollback (which is hopefully at the point where you last
returned the connection to the pool) are reverted.
If no errors occur, the rollback does not hurt, because it is after the
commit.
By the way, I just committed the documentation page about transactions and
connections. See
http://svn.apache.org/viewcvs.cgi/db/torque/runtime/trunk/xdocs/reference/connections-transactions.xml?view=markup
Thomas
On Mon, 10 Apr 2006, Jim Caserta wrote:
Exactly how does that rollback help at that point of
the code Thomas?
--- Thomas Fischer <[EMAIL PROTECTED]> wrote:
The code now looks good. It's fine to rollback after
you do the commit.
Thomas
On Mon, 10 Apr 2006, Jim Caserta wrote:
So if I'm using the following code below,
My question is:
Even if the connection is fine and the database
logic
does it's stuff correctly (Do Stuff)..
And the connection is NOT closed. It's ok to do
the
"rollback" since the commit worked fine also.
correct?
Connection dbConn = null;
try {
dbConn =
Torque.getConnection("db2.torque.environment");
////Do Stuff
dbConn.commit();
}
finally {
if (dbConn == null) {
//Connection error logic
}
if (!dbConn.isClosed()) {
dbConn.rollback();
dbConn.close();
}
}
--- Thomas Fischer <[EMAIL PROTECTED]> wrote:
Jim Caserta <[EMAIL PROTECTED]> schrieb am
10.04.2006 17:40:05:
Sorry about the confusion. I meant using
Torque.getConnection() and dbConn.close()
instead
of
Transaction.begin()..
For any DB which supports transactions: _Make
sure_
that the connection is
in autocommit mode or use Transaction.begin and
Transaction.commit() or do
both. If you do not commit/rollback and are not
in
autocommit mode you can
run into ugly trouble (e.g. if the transaction
serialization is read
committed, other connections will never see the
changes to the data in the
uncommitted transaction and the like).
And if iI was. the following would work well?
Connection dbConn = null;
try {
// get a connection from the pool
dbConn =
Torque.getConnection(db2.torque.environment);
////Do Stuff
//Commit the transaction
dbConn.commit();
}
finally {
if (!dbConn.isClosed()) {
// some error occurred, try to rollback
and return
connection to the pool
dbConn.close();
dbConn.rollback(); //Is this needed?
}
}
This is similar to an earlier version I used some
time ago. The problem is
it would throw a NullPointerException in the
finally
block if
Torque.getConnection() fails. Also, you should
rollback() before you
close().
Whatever code you use in the end, make sure (i.e.
_test_) that an error in
retrieving/working with the connection is handled
correctly.
Thomas
---------------------------------------------------------------------
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam
protection around
http://mail.yahoo.com
---------------------------------------------------------------------
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]