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

Pat Fox commented on AMQ-5318:
------------------------------

github pull request. https://github.com/apache/activemq/pull/43


> 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