Uploaded image for project: 'ActiveMQ Classic'
  1. ActiveMQ Classic
  2. AMQ-5318

JDBC store; commit called on connection that uses autocommit during "deleteAllMessages" .

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 5.10.0
    • 5.11.0
    • Broker
    • None
    • Patch Available

    Description

      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.

      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
      
      

      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.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              pgfox Pat Fox
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: