Hello,

Has anyone considered the case of using try-with-resources (Java SE 7) with Derby connections with auto-commit off?

I haven't studied this in detail, but from what I can see the above configuration will cause Connection.close to throw an exception if a transaction is active. Based on what the Java API docs say, I think Derby is behaving in a way that's allowed [1]. Nonetheless, this may not be what users expect.

I suppose one could work around this issue with an extra try-catch block, where you would call rollback/commit before rethrowing the exception, but this kind of defeats the purpose of try-with-resource.

Connection.close implements AutoClosable.close so we can't have two different behaviors for the two [2] scenarios (try-with-resources vs explicit close).

Have I missed something that makes this problem moot?


Regards,
--
Kristian

[1] "It is strongly recommended that an application explicitly commits or rolls back an active transaction prior to calling the close method. If the close method is called and there is an active transaction, the results are implementation-defined."
[2] Maybe one could use stack trace inspection, but that doesn't sound like a good solution.