Uploaded image for project: 'JBoss A-MQ'
  1. JBoss A-MQ
  2. ENTMQ-762

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

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor
    • Resolution: Done
    • Affects Version/s: JBoss A-MQ 6.1
    • Fix Version/s: JBoss A-MQ 6.2
    • Component/s: message-store
    • Labels:
      None

      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().

        Gliffy Diagrams

          Attachments

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                pfox Pat Fox
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: