Pat Fox created AMQ-5318:
----------------------------

             Summary: JDBC store; commit called on connection that uses 
autocommit during "deleteAllMessages" .
                 Key: AMQ-5318
                 URL: https://issues.apache.org/jira/browse/AMQ-5318
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.10.0
            Reporter: Pat Fox
            Priority: Minor


The oracle v12 driver throws the following exception if commit() is called on a 
connection that has auto-commit enabled(see [1]) . This seems to be a change in 
behaviour since v11.  

{code}

caused by: java.sql.SQLException: Could not commit with auto-commit set on
        at 
oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:4443)
        at 
oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:4490)
        at 
org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:334)
        at 
org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:334)
        at 
org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.commit(PoolingDataSource.java:211)
        at 
org.apache.activemq.store.jdbc.adapter.DefaultJDBCAdapter.doDropTables(DefaultJDBCAdapter.java:148)
        at 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.deleteAllMessages(JDBCPersistenceAdapter.java:534)
        ... 40 more

{code}


In the org.apache.activemq.store.jdbc.adapter.DefaultJDBCAdapter#doDropTables() 
it explicitly calls connection.commit() without checking if auto-commit is 
enabled.  In other places auto-commit does seem to be checked before commit is 
called  - org.apache.activemq.store.jdbc.TransactionContext#commit().

The v12 driver does allow  autocommit-SpecCompliance to be turned off by 
setting system property "oracle.jdbc.autoCommitSpecCompliant=false". But it 
does seem like 
org.apache.activemq.store.jdbc.adapter.DefaultJDBCAdapter#doDropTables() is not 
strictly adhering to the spec. 

I think it would be better to do a check if auto-commit is on before calling 
connection.commit(). 


I will attach a github pull request with test and potential fix - for someone 
to review.




--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to