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

Aaron Digulla commented on DERBY-4443:
--------------------------------------

The usual solution is to use a mock connection that throws Exceptions when 
rollback() is called.

If you look at the code, then you'll see that the connection is created with a 
call to getDefaultConn(). This will query the InternalDriver for a connection.

In your tests, extend InternalDriver and override connect() to return a 
connection object which throws exceptions for prepareStatement() and rollback():

@Override
public PreparedStatement prepareStatement(String sql) { throw SQLException( 
"Error in prepareStatement" ); }

@Override
public void rollback() { throw SQLException( "Error in rollback" ); }

Make sure that correct exception is visible outside.

Note that this messes with internal static variables. To fix that, you may need 
to create a new driver instance in the tearDown() of your tests.

> 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
>              Labels: derby_triage10_8
>         Attachments: 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