Hi,

Sorry, I didn't have time to look at it. I don't know if this is a bug or
not.

Could you create a test case, if possible one that we can run again other
databases as well, to check whether the behavior is compatible with what
other databases do?

Please also see the general comments about patches:
http://h2database.com/html/build.html#providing_patches

Regards,
Thomas


On Fri, Dec 13, 2013 at 12:07 PM, Markus Menner <
[email protected]> wrote:

> Any idea about this? Is it a bug such that I can create an issue for it?
>
>
> On Wednesday, 11 December 2013 19:45:24 UTC+1, Markus Menner wrote:
>>
>> Hi all,
>>
>> I use h2-1.3.174 and I believe that there is a bug
>> inside JdbcXAConnection in the rollback() method.
>>
>> I ran into the bug when I simulated an exception during the 2pc.
>> If rollback() and setAutoCommit(true) are invoked once prepare() has been
>> called,  "ROLLBACK TRANSACTION" throws an exception saying that the current
>> transaction doesn't exist any more.
>> Thus rollback() and setAutoCommit(true) should only be called if no
>> prepare has been executed?
>>
>> Here's my suggestion (my unit test works with the change):
>>
>> Original code:
>>
>>         if (isDebugEnabled()) {
>>             debugCode("rollback("+JdbcXid.toString(xid)+");");
>>         }
>>         try {
>>             physicalConn.rollback();
>>             physicalConn.setAutoCommit(true);
>>             if (prepared) {
>>                 Statement stat = null;
>>                 try {
>>                     stat = physicalConn.createStatement();
>>                     stat.execute("ROLLBACK TRANSACTION " +
>> JdbcXid.toString(xid));
>>                 } finally {
>>                     JdbcUtils.closeSilently(stat);
>>                 }
>>                 prepared = false;
>>             }
>>         } catch (SQLException e) {
>>             throw convertException(e);
>>         }
>>         currentTransaction = null;
>>
>> should be
>>
>>         if (isDebugEnabled()) {
>>             debugCode("rollback("+JdbcXid.toString(xid)+");");
>>         }
>>         try {
>>             if (prepared) {
>>                 Statement stat = null;
>>                 try {
>>                     stat = physicalConn.createStatement();
>>                     stat.execute("ROLLBACK TRANSACTION " +
>> JdbcXid.toString(xid));
>>                 } finally {
>>                     JdbcUtils.closeSilently(stat);
>>                 }
>>                 prepared = false;
>>             }
>>     else {
>>             physicalConn.rollback();
>>     }
>>     physicalConn.setAutoCommit(true);
>>         } catch (SQLException e) {
>>             throw convertException(e);
>>         }
>>         currentTransaction = null;
>>
>> Cheers
>> Markus
>>
>>  --
> You received this message because you are subscribed to the Google Groups
> "H2 Database" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/h2-database.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to