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

PooledConnectionFactory should track Session checkouts and close associated resources

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 5.7.0
    • Fix Version/s: 5.8.0
    • Component/s: None
    • Labels:
      None

      Description

      When the user's code closes a Connection checked out from the pool, I would expect activemq-pool to close Sessions, MessageConsumers and MessageProducers that were created from it.

      Unfortunately, activemq-pool only cleans up Sessions on Connection.close() when no one else is referencing the Connection (referenceCount == 0).

      This makes Sessions, Consumers and Producers outlive the code that actually uses them, thus leading to increased resource consumption and messages being trapped in prefetch buffers that are no longer monitored.

      Instead, we should keep track of the Sessions that were created from each specific Connection checkout, and close them when the borrowed Connection is closed.

      Otherwise we bump into situations like SPR-10092 when using Spring's DefaultMessageListenerContainer. In some cases DMLC "forgets" to explicitly close MessageConsumers and Sessions, even though Connections are always closed, but the pool doesn't take care of cleaning up associated sessions.

        Attachments

          Activity

            People

            • Assignee:
              tabish Timothy A. Bish
              Reporter:
              raulvk Raúl Kripalani
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: