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

DatabaseLocker should first cancel locking SQL statement before closing the SQL connection

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 5.4.2
    • 5.6.0
    • Broker
    • None
    • ServiceMix 4.3

    • Patch Available

    Description

      ActiveMQ is configured in a Master/Slave configuration with an Oracle database :
      http://activemq.apache.org/jdbc-master-slave.html
      http://servicemix.apache.org/clustering.html
      When the slave node is stopping, "activemq-broker" stays forever in the "Stopping" state.
      This is because the locking SQL statement cannot be interrupted by just closing the JDBC connection. It is also needed to "cancel" the SQL statement.
      Here is a patch to DefaultDatabaseLocker which makes it compatible with Oracle.
      Thanks.

      "Thread-92" prio=10 tid=0x08c4d800 nid=0x1036 waiting for monitor entry [0x8ab3a000]
         java.lang.Thread.State: BLOCKED (on object monitor)
      	at oracle.jdbc.driver.PhysicalConnection.isClosed(PhysicalConnection.java:1223)
      	- waiting to lock <0xad4367e0> (a oracle.jdbc.driver.T4CConnection)
      	at org.apache.commons.dbcp.DelegatingConnection.isClosed(DelegatingConnection.java:386)
      	at org.apache.commons.dbcp.DelegatingConnection.isClosed(DelegatingConnection.java:386)
      	at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.isClosed(PoolingDataSource.java:201)
      	at org.apache.activemq.store.jdbc.DefaultDatabaseLocker.stop(DefaultDatabaseLocker.java:137)
      	at com.mycompany.PoolCloser.close(PoolCloser.java:77)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:221)
      	at org.apache.aries.blueprint.container.ServiceListener.invokeMethod(ServiceListener.java:98)
      	at org.apache.aries.blueprint.container.ServiceListener.unregister(ServiceListener.java:65)
      

      Attachments

        1. amq_stopping_slave.patch
          2 kB
          metatech
        2. amq_stopping_slave_2.patch
          4 kB
          metatech

        Issue Links

          Activity

            People

              rajdavies Robert Davies
              metatech metatech
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - 1h
                  1h
                  Remaining:
                  Remaining Estimate - 1h
                  1h
                  Logged:
                  Time Spent - Not Specified
                  Not Specified