Thomas, I'm sorry but I do not understand the state kept in TorqueConnectionImpl. As I understand it, TorqueConnectionImpl.committed and TorqueConnectionImpl.rolledBack keep track of whether there could be outstanding operations in a transaction. So when one calls close() on a connection with uncommitted changes these get rolled back. But what if one calls commit() and then does other operations on the connection? As I understand the javadoc of java.sql.Connection, this is legal (maybe I'm wrong). But the current logic in TorqueConnectionImpl would not do any rollback on close() then.
And what id autocommit is true? Should there be any rollback attempt in this case? And what if the user switches from autoaommit to non autocommit in the midst of doing database operation? These are just some random questions, in no way complete. In short, I am not sure whether one wants to get involved in the (perhaps complicated) state keeping logic of java.sql.Connection. And does TorqueCoonnectionImpl keep the contract of java.sql.Connection.close()? It says in https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#close()that close() would release all resources, but TorqueConnectionImpl does more than that. However, I know other frameworks, e.g. Connection pools, which do other stuff on close() to guarantee a clean connection, but personally I'm not happy about that either. Just a not-well-thought-through idea: Perhaps one can solve some of these issues if TorqueConnection would not inherit from java.sql.Connection, but would be a different object wrapping a java.sql.Connection, with a different contract, like: public class TorqueTransactionConnection implements AutoCloseable { private java.sql.Connection connection; public TorqueTransactionConnectionImpl() { connection = TransactionManagerImpl.begin(); } public void commit() { if (connection == null) { throw new IllegalStateException("already closed"); } TorqueTransactionConnectionImpl.commit(connection); connection = null; } public void rollback() { // analogous to close } public void close() { rollback(); } } Not sure if that idea works through, though. Thomas
smime.p7s
Description: S/MIME Cryptographic Signature