[ 
https://issues.apache.org/jira/browse/DERBY-4443?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13015356#comment-13015356
 ] 

Knut Anders Hatlen commented on DERBY-4443:
-------------------------------------------

It looks like the rollback exception is stripped off by this piece of code in 
StandardException.unexpectedUserException():

                // Look for simple wrappers for 3.0.1 - will be cleaned up in 
main
                if (ferry != null) {
                        if (ferry.isSimpleWrapper()) {
                                Throwable wrapped = 
((SQLException)ferry).getCause();
                                if (wrapped instanceof StandardException)
                                        return (StandardException) wrapped;
                        }
                }

This happens when the SQLException needs to be re-thrown as a 
StandardException, and the error handler finds that it's simpler to remove the 
top-level SQLException than it is to wrap it in yet another exception. 
Normally, an SQLException that wraps a StandardException doesn't provide any 
extra information, so removing it doesn't harm. But in our case the top-level 
exception carries extra information (the next exception), and it's not really a 
simple wrapper anymore. Perhaps we need to override setNextException() in 
EmbedSQLException and clear the simpleWrapper flag if it's called. The comments 
in the StandardException class give the impression that this "simple wrapper" 
code was a temporary hack that was supposed to be reworked, but they don't give 
any details on how.

> Wrap rollback in exception handlers in try-catch
> ------------------------------------------------
>
>                 Key: DERBY-4443
>                 URL: https://issues.apache.org/jira/browse/DERBY-4443
>             Project: Derby
>          Issue Type: Bug
>          Components: Demos/Scripts, Documentation, Eclipse Plug-in, JDBC, 
> Network Client, Network Server, Replication, Services, SQL, Test, Tools
>    Affects Versions: 10.5.3.0
>            Reporter: Aaron Digulla
>            Assignee: Houx Zhang
>              Labels: derby_triage10_8
>         Attachments: DERBY-4443-1.patch, DERBY-4443-2.patch, 
> DERBY-4443-3.patch, DERBY-4443-4.patch, DERBY-4443-4.png, DERBY-4443-5.patch, 
> DERBY-4443.patch
>
>
> Avoid this pattern everywhere:
>               }catch(SQLException se){
>                       //issue a rollback on any errors
>                       conn.rollback();
>                       throw  se;
>               }
> because an error in rollback will shadow the original exception.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to