Release Notes

Release 2025.06 (9.3) - first offered 20 June 2025
  Core
Fixed Remove deprecated constants from unit BTBrokerConsts.
Fixed Remove obsolete type casts in TBTStompClient.StompDataAvailable, BTStompEncoder.Escape, and TBTStompClient.TraceFrameHeaders.
Fixed Remove obsolete overload directive for TBTStompClient.TraceFrameHeaders.
Fixed Fixed hints and warnings.
New The ICompletionListener interface of the modern API and its implementation is deprecated, as it does not add substantial value.
New Reduce visibility of methods and properties to protected which implement an interface.
New Log Indy product name and version in unit BTCommAdapterBaseIndy.
New Renamed setter and getter methods for JMSRedelivered and JMSDeliveryMode to follow naming conventions.
  Examples and documentation
Fixed Doxygen: warning: More #endif's than #if's found.
Fixed Doxygen: warning: Found ';' while parsing initializer list! (doxygen could be confused by a macro call without semicolon).
Fixed Doxygen: use \cond to exclude documentation for some internal implementation classes.
Fixed Doxygen: improve class diagrams by explicitly have interfaces to inherit from IInterface.
Fixed Doxygen: reduce duplicated documentation comments by using INHERIT_DOCS and \copydoc.
Fixed Fixed and updated links in Getting Started PDF.
New Update Doxygen to version 1.14.0.
New Add more HTML documentation.
New Add diagram of new programming model to PDF and API docs.
New Update source/optional/readme.txt.
New Update copyright text.
  Tests
Fixed Remove obsolete code for old decoder implementation.
Fixed Remove obsolete type casts.
Fixed Remove Indy version check from BTCommAdapterBaseIndy unit.
New Add unit test for Indy version: IdGlobal.gsIdProductVersion must be equal to 10.6.3.
New Tested with Lazarus IDE 4.0.
New Tested with the Indy 10.7 branch
  Habari STOMP Client for ActiveMQ
Fixed Move deprecated contant TRANSFORMER_ID_ADVISORY_JSON from BTBrokerConsts unit to broker-specific demo code in activemq-advisory/AdvisoryMessagesReceiver unit.
New Tested with ActiveMQ 6.1.6
  Habari STOMP Client for Artemis
New Tested with Artemis 2.40.0
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 4.1.0
Release 2024.12 (9.2.1) - first offered 31 December 2024
  Core
Fixed Fixed heartbeat detection in unit TBTAbstractCommAdapter.ReadFirstHeaderLineSkippingHeartbeats. Only tested with Internet Direct (Indy).
Release 2024.12 (9.2) - first offered 07 December 2024
  Core
Fixed Fixed hints and warnings
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 6.1.4
  Habari STOMP Client for Artemis
New Tested with Artemis 2.38.0
  Habari STOMP Client for RabbitMQ
Fixed Add a note in TBTMQTransportRabbitMQ.UnsubscribeID which explains why UNSUBSCRIBE is not sent for temporary queues. Reproduced in 4.0.2.
New Tested with RabbitMQ 4.0.4 and 4.1.0-beta.1
Release 2024.08 (9.1) - first offered 03 August 2024
  Core
Fixed Add abstract keyword to classes TBTAbstractCommAdapter and TBTAbstractTransport.
Fixed Move fields from the protected to the private section.
Fixed Add missing STOMP protocol version case labels.
Fixed Use method RecvTerminated in unit BTCommAdapterBaseSynapse and move it to private section.
Fixed Add condition checks to use DEFAULT_TIMEOUT only for (deprecated) message listener.
  Examples and documentation
New Add link to new Synapse GitHub repository to documentation.
  Habari STOMP Client for ActiveMQ
Fixed Deprecate several ActiveMQ Classic constants releated to advisory message and object message transformation.
  Habari STOMP Client for Artemis
Fixed Use BrokerFeatures.SupportsTransactedAck flag to disable test case for transactional ACK.
New Tested with Artemis 2.35.0
  Habari STOMP Client for OpenMQ
Fixed Use BrokerFeatures.SupportsTransactedAck flag to disable test case for transactional ACK.
Fixed Use BrokerFeatures.SupportsHeartbeats flag to disable test cases for heart-beating.
Fixed Fixed failing test TestMgmtInterfaces which was not updated to expect STOMP 1.2
New Tested with OpenMQ 6.5.0
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.13.4 and 4.0.0-beta.3
Release 2024.06 (9.0) - first offered 05 June 2024
  Core
Fixed Fix initialization of field FNackHeaders in class TBTMessage
New Changed TBTMQProducer.InternalSend method from function to procedure
New Lower method visibility in TTCPClient and other classes
New Remove obsolete field FURI in TBTConnectionParams
New Remove obsolete exception variable E:
New Remove obsolete properties in several BTCommAdapterBase* units
New Migrate sub-procedures to first level procedures in BTStompEncoder and other units
New Use strict private for TBTStompClient and other classes
New Tested with Indy 10.6.3.3
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 6.1.2
  Habari STOMP Client for Artemis
New Tested with Artemis 2.33.0
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.13.3
Release 2024.04 (8.7) - first offered 20 April 2024
  Core
New Refactor TBTStompClient class
New Refactor BTFailoverURLParser class
New Remove old STOMP decoder code from TBTStompDecoder class
New Remove needless virtual keywords
New Reduce visibility of classes, fields and methods
New Suppress false positive Pascal Expert warnings
Fixed Add missing GUID to interfaces
Fixed Tested with Indy 10.6.3
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 6.1.0
  Habari STOMP Client for Artemis
New Tested with Artemis 2.33.0
  Habari STOMP Client for RabbitMQ
New Add broker-specific demo for filtered streams
New Tested with RabbitMQ 3.13.0
Release 2024.02 (8.6) - first offered 04 February 2024
  Core
Fixed Fix Pascal Expert warnings
Fixed Fix doxygen warnings
  Examples and documentation
Fixed Remove empty folders in libraries folder
New Update doxygen to 1.10.0
New Add more HTML documentation
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.18.3 and 6.0.1
  Habari STOMP Client for Artemis
New Tested with Artemis 2.31.2
  Habari STOMP Client for RabbitMQ
New Add broker-specific demo documentation
New Tested with RabbitMQ 3.12.12 and 3.13.0-rc.4
Release 2023.12 (8.5) - first offered 09 December 2023
  Core
New Test with Indy 10.6.2 rev 4565
New Test with mORMot 2.1
  Examples and documentation
New Add more HTML documentation
Fixed Fix doxygen warnings
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.18.3 and 6.0.0
  Habari STOMP Client for Artemis
New Tested with Artemis 2.31.2
  Habari STOMP Client for RabbitMQ
New Add broker-specific demo documentation
New Tested with RabbitMQ 3.12.10 and 3.13.0-rc.2
Release 2023.10 (8.4) - first offered 28 October 2023
  Core
New Test with Indy 10.6.2 rev 4553
New Update doxygen to 1.9.8
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.18.3
  Habari STOMP Client for Artemis
New Tested with Artemis 2.31.0
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.12.7 and 3.13.0-rc.1
Release 2023.08 (8.3) - first offered 26 August 2023
  Core
New When logging is enabled, log which STOMP receipts are enabled
New Use resourcestrings in unit BTStompClient
New Remove Writeln(Result) in TestHelper.BrokerVersion
New Fix compiler warning in TBTAbstractCommAdapter.ReadStompHeader
New Fix potential endless loop in TBTAbstractCommAdapter.ReadFirstHeaderLineSkippingHeartbeats
New Omit third parameter of Copy method in newer versions of Object Pascal
New Removed wrong comment for TBTCommAdapterBaseIndy.TCPCLient (property is used in TBTCommAdapterIndySSL.Create)
New Update doxygen to 1.9.7
New Add method IStompFrame#GetContentLength
New Test with Indy 10.6.2 rev 4539
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.18.2
  Habari STOMP Client for Artemis
New Delete todo comment in deprecated method (Artemis)
New Tested with Artemis 2.30.0
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.11.20, 3.12.2, 3.13.0-beta.3
Release 2023.06 (8.2) - first offered 03 June 2023
  Core
New Add new decoder for STOMP header lines (unit BTStompDecoder)
New Add new interface IStompDecoder (unit BTStompInterfaces)
New Add test for invalid characters in STOMP headers
New Test with Indy 10.6.2 rev 4469
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.18.0
  Habari STOMP Client for Artemis
New Tested with Artemis 2.28.0
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.12.0
Release 2023.04 (8.1) - first offered 01 April 2023
  Core
New Remove unused units
New Remove outdated todo notes
New Extract resourcestrings
New Add internal methods AssertIsTrailingNull and AssertIsTrailingLf
New Use CreateFmt instead of Create(Format(...))
New Add doc comments for IHeartbeat interface
New Commented out unused interface declarations in unit BTSessionIntf
New Reduce timeout for loop in ReadFirstHeaderLineSkippingHeartbeats
New Store heart-beat time when the first header line was received
New Add internal methods AssertServerSendsHeartBeats and AssertTransportConnected;
New Fix GetTickCount in unit BTPlatform
New Add method CheckValidTimeOut
New Update mORMot2 to 2.0.stable
New BTPlatform.GetTickCount returns GetTickCount64 (FPC only)
New BTAdapterRegistry uses Windows only when MSWINDOWS is defined, and FPC is not defined
New Add length check in ReadMessageBodyWithLength
New Update code signing certificates
New Suppress hints and warnings for third party units (FPC)
New Test with Indy 10.6.2 rev 4441
  Tests
New Add test TestHeadersAreNotTrimmed
New Add test TestConnectFailsWithMQException
New Suppress warnings and hints for Indy, Synapse, and mORMot (Delphi only)
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.18.0
  Habari STOMP Client for Artemis
New Tested with Artemis 2.28.0
  Habari STOMP Client for OpenMQ
Fixed Fixed ReadMessageBodyWithLength
New Tested with OpenMQ 6.4.0
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.11.12
Release 2023.02 (8.0) - first offered 11 February 2023
  Core
New Rename unit BTJMSInterfaces to BTMQInterfaces
New Move exceptions to new unit BTGlobal
New Remove unused exceptions
New Use EMQException instead of SysUtils.Exception / EConnectionFailedException
New ReceiveHeartbeat raises an exception if there is something else than a heart-beat waiting on the socket
New Add support for Synopse mORMot 1
New Add support for Synopse mORMot 2
New Use ssl_openssl3 instead of ssl_openssl in the complimentary Synapse communication adapter for TLS/SSL
New Remove deprecated unit BTStompReadThreadSynapse
New Test with Indy 10.6.2 rev 4421
  Tests
New Run tests for all available communication adapters (except for TLS/SSL)
New Removed switch HABARI_TEST_SYNAPSE
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.17.3
  Habari STOMP Client for Artemis
New Tested with Artemis 2.28.0
  Habari STOMP Client for OpenMQ
New Tested with OpenMQ 6.3.0 and 6.4.0-SNAPSHOT
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.10.17 and 3.11.8
Release 2022.12 (7.3) - first offered 03 December 2022
  Core
New Update Ararat Synapse to revision r266
New Update JsonDataObjects (support for Delphi 11.0 Alexandria)
New Add experimental communication adapter for Synopse mORMot SynCrtSock
New Add test for a 4 byte Unicode code point
New Tested with Indy 10.6.2 (revision 4159)
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.16.5 and 5.17.2
  Habari STOMP Client for Artemis
New Tested with Artemis 2.26.0 and 2.27.0
  Habari STOMP Client for OpenMQ
New Tested with OpenMQ 6.3.0 and 6.4.0-SNAPSHOT
  Habari STOMP Client for RabbitMQ
New Add an example project for user generated queue names for topic and exchange destinations (x-queue-name)
New Tested with RabbitMQ 3.10.11 and 3.11.3
Release 2022.08 (7.2) - first offered 06 August 2022
  Core
New Insert new header values before old header values instead ignoring them (STOMP 1.2 specification: Repeated Header Entries)
New Failover protocol support can be enabled with the new conditional symbol HABARI_ENABLE_FAILOVER_PROTOCOL
New Use Generics (Delphi and Free Pascal)
New Tested with Indy 10.6.2 revision 4081
  Examples and documentation
Fixed Fix missing TBTSession API documentation
Fixed Improved exception handling in Habari Chat demo application
  Habari STOMP Client for ActiveMQ
Fixed Fixed unit test TestForward
New Include a TomEE+ (Jakarta EE 9.1) example in demo-broker
New Tested with ActiveMQ 5.16.5 and 5.17.1
  Habari STOMP Client for Artemis
Fixed Fixed unit test TestForward
New Tested with Artemis 2.23.1
  Habari STOMP Client for OpenMQ
Fixed Fixed warning about obsolete header subscription-id for ACK frame
Fixed Fixed unit test TestForward
New Use STOMP 1.2 by default (unit BTBrokerConsts)
New Include a Payara 5 (Jakarta EE 9.1) example in demo-broker
New Tested with OpenMQ 6.3.0
Open With STOMP 1.2, unit tests for temp queues and message ack fail because of an issue in the OpenMQ STOMP bridge STOMP 1.2 value encoding is not implemented
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.9.22 and 3.10.7
Release 2022.06 (7.1) - first offered 04 June 2022
  Core
New Moved units BTThread, BTStompReadThreadIndy, BTStompReadThreadSynapse to optional folder
New Tested with Indy 10.6.2 revision 4075
  Examples
Fixed Failover protocol support improvements
New Connection configuration dialog form improvements
New New connection test demo application
New Document TLS switch passthrough
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.16.5 and 5.17.1
  Habari STOMP Client for Artemis
New FQQN demo (send to queue given its fully qualified name)
New Tested with Artemis 2.22.0
  Habari STOMP Client for OpenMQ
New Tested with GlassFish 6.2.3
  Habari STOMP Client for RabbitMQ
Fixed Incorrect conversion of missing expiration header
New Tested with RabbitMQ 3.9.18, 3.10.0, 3.10.1 and 3.10.2
Release 2022.02 (7.0) - first offered 02 February 2022
  Core
New Handle non-standard server replies to CONNECT by disconnecting and raising a EConnectionFailed exception
New Moved exception class definitions from BTJMSTypes to BTTypes
New Removed code for old map/object message transformation API
New Removed unit BTJMSTypes
New Renamed EJMSException to EMQException
New Removed needless synchronization in TBTSession.Send method
New Tested with Indy 10.6.2 revision 4066
New Tested with Lazarus 2.2.0
New Tested with Free Pascal 3.2.2
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.15.15 and 5.16.3
  Habari STOMP Client for Artemis
New Tested with Artemis 2.20.0
  Habari STOMP Client for OpenMQ
New Tested with GlassFish 6.2.3
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.9.12
Release 2021.12 (6.12) - first offered 06 December 2021
  Core
New Class TBTMQContext implements interface IConnectionInfo
New Class TBTMQContext implements interface IHeartbeat
New Added HABARI_USE_INTERCEPT_STDOUT switch to enable logging of STOMP frames to the console (Windows only)
New Increased minimum required FPC version to 3.2.0
New Commented out deprecated transformation API code
  Examples and documentation
New Updated 'HabariChat' example application (added heart-beating)
New Updated 'Performance Test' example application
New Added connection troubleshooting section to Getting Started PDF
New Added loadbalancing demo
New Removed NativeXml from libraries
New Removed management API from library
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.15.15 and 5.16.3
  Habari STOMP Client for Artemis
New Tested with Artemis 2.19.0
New Tested XPATH selector support (new in 2.18.0)
  Habari STOMP Client for RabbitMQ
Fixed Error in broker log when unsubscribing durable subscriber
Fixed Error UNSUBSCRIBE 'id' may not start with /temp-queue/
New Added example project for RabbitMQ streams RabbitMQ Streams Overview
New Added example project for non-durable queues
New Tested with RabbitMQ 3.8.26 and 3.9.11
Release 2021.08 (6.11) - first offered 14 August 2021
Fixed FPC 3.0.4 compilation error in TSimpleObjectMessageTransformer.ProducerTransform
Fixed Failing string conversion test with FPC 3.2.0
New If the STOMP ERROR frame contains a 'receipt-id' header, its value will be included in the EBTStompServerErrorMessage exception message
New The client closes the TCP connection after receiving a STOMP ERROR frame
New Code cleanup / maintenance in the included 'Performance Test' demo project
New Improved and simplified test for client ACK
New The complimentary connection builder class now provides the method BuildContext: IMQContext which returns a IMQContext instance - IMQContext is part of the new API which was introduced in release 6.0
New Added a deprecation warning for FPC versions before 3.2.0. This is the last release with support for FPC 3.0.4 - future versions will require FPC 3.2.0 or newer
New Tested with Lazarus 2.2.0RC1 / FPC 3.2.2
New Tested with Indy 10.6.2 revision 3914
New Updated Innosetup installer to 6.2.0
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.8.19 and 3.9.0
Release 2021.06 (6.10) - first offered 26 June 2021
New Added a check that the map message transformation ID and the object message transformation ID are not equal
New Removed unit tests for old (deprecated) message transformation API
New Added unit test for new message transformation API, using MQContext API (which has been introduced in version 6.0)
New Added a compiler warning which appears when the old (deprecated) message transformation API is enabled
New Implement interface IMessageTransformerSupport in class TBTMQContext when the old (deprecated) message transformation API is enabled
New Moved message transformation IDs for the transformation API to the broker-specific unit BTBrokerConst
New Removed experimental TCP keep-alive feature, instead the STOMP heart-beating may be used
New Improved handling of incoming heart-beat (EOL bytes)
New Removed a check for incoming heart-beats when no heart-beats are expected, this caused higher timeout times for Receive(Integer) method calls
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.16.2
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.8.17
Release 2021.04 (6.9) - first offered 21 April 2021
New The new API interface IMQContext contains the function CreateMapMessage(): IMapMessage
New The new API interface IMQContext contains the function CreateObjectMessage(): IObjectMessage
New The new API interface IMQContext contains the function CreateObjectMessage(AObject: TObject): IObjectMessage
New BTMessageTransformer moved to optional source directory
New Updated to doxygen 1.9.1
New Tested with Indy 10.6.2 rev 3798, Delphi 2009, Lazarus 2.0.10 / Free Pascal 3.2.0
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.16.1
New Use new map message transformation API in Advisory Message demo
New Use new map message transformation API in Broker Statistics demo
Fixed Added documentation and improved output messages in demo applications
  Habari STOMP Client for Artemis
New Tested with Artemis 2.17.0
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.8.14 on Erlang 23.2
Release 2021.02 (6.8) - first offered 20 February 2021
New Tested with Indy 10.6.2 rev 3662, Delphi 2009, Lazarus 2.0.10 / Free Pascal 3.2.0
New New support API for map messages and object messages
New Installer applications are now digitally signed
New Console output for unit test logging now includes test class name and test method name
New Add tests cases for IMessageTransformer, BTConnection.SetMapMessageTransformer and BTConnection.SetObjectMessageTransformer
New Moved management API from Superobject to JsonDataObjects
New Removed support for OmniXML
New Removed support for Superobject
Fixed Fixed FPC warnings about uninitialized values
Fixed Renamed IMessageTransfomerIdSupport to IMessageTransformerIdSupport
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.16.0
New Added a test for queue browser API. This test replaces the external demo program for queue browsing.
  Habari STOMP Client for Artemis
New Tested with Artemis 2.16.0
New Added support for queue browser API
Fixed Fixed failing unit tests
  Habari STOMP Client for OpenMQ
New Tested with Eclipse GlassFish 6.0.0
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.8.9 and 3.8.11
Release 2020.12 (6.7) - first offered 12 December 2020
New Tested with Indy 10.6.2 rev 3660, Delphi 2009, Lazarus 2.0.10 / Free Pascal 3.2.0
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.16.0
  Habari STOMP Client for Artemis
New Tested with Artemis 2.16.0
Open Several unit tests fail with ActiveMQ Artemis
  Habari STOMP Client for OpenMQ
New Tested with Eclipse Open Message Queue (OpenMQ) 5.1.3
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.8.9
Release 2020.06 (6.7) - first offered 20 June 2020
New Tested with Indy 10.6.2 rev 3645, Delphi 2009, Lazarus 2.0.4 / Free Pascal 3.0.4
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.15.13
New Support advisory message transformation header 'jms-advisory-json'
New Added a basic example for advisory message receive
  Habari STOMP Client for ActiveMQ Artemis
New Tested with Artemis 2.11.0, 2.12.0 and 2.13.0
New Changed STOMP destination prefixes to /queue and /topic (for details please see the 'Getting Started' PDF)
Open Several unit tests fail with ActiveMQ Artemis
  Habari STOMP Client for OpenMQ
New Tested with Eclipse Open Message Queue (OpenMQ) 5.1.3
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.8.4
Release 2020.04 (6.5) - first offered 04 April 2020
New Tested with Indy 10.6.2 rev 3645, Delphi 2009, Lazarus 2.0.4 / Free Pascal 3.0.4
New Includes a newer version of the NativeXml XML parser library (https://github.com/kattunga/NativeXml) which supports newer versions of Delphi
New Development now uses the GitHub version of the Indy Sockets TCP/IP library (https://github.com/IndySockets/Indy), please note that Indy distributions are no longer available on https://indy.fulgan.com/
Fixed Example code which used the SuperObjects library has been removed
Fixed Renamed compiler conditional define TEST_OPTIONAL_UNITS to HABARI_TEST_OPTIONAL_UNITS
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.15.11 and 5.15.12
  Habari STOMP Client for Artemis
New Tested with Artemis 2.9.0, 2.10.0 and 2.10.1
Open Several unit tests fail with ActiveMQ Artemis 2.11.0
  Habari STOMP Client for OpenMQ
New Tested with Eclipse Open Message Queue (OpenMQ) 5.1.3
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.8.2 and 3.8.3
Release 2019.12 (6.4) - first offered 08 December 2019
New Tested with Indy 10.6.2 rev 5515, Delphi 2009, Lazarus 2.0.4 / Free Pascal 3.0.4
New Support for custom NACK frame headers
Fixed Failover URL may contain heart-beat configuration parameters
  Habari STOMP Client for ActiveMQ
New Tested with ActiveMQ 5.15.10
  Habari STOMP Client for Artemis
New Tested with Artemis 2.10.1
  Habari STOMP Client for OpenMQ
New Tested with Eclipse Open Message Queue (OpenMQ) 5.1.3
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.8.0
Release 2019.08 (6.3) - first offered 23 August 2019
New Tested with Indy 10.6.2 rev 5515, Delphi 2009, Lazarus 2.0.2 / Free Pascal 3.0.4
New Include JsonDataObjects for object serialization example code (map transformation)
New Lower timeout value in HabariChat demo
New Documentation updates (URL parameters are case sensitive)
New Exact match check for URI parameters
Fixed compilation error in unittests if TEST_OPTIONAL_UNITS is defined
Fixed compilation error in unittests if HABARI_DEPRECATED_MESSAGELISTENER is defined
Fixed compilation error in ObjectExchangeTests (missing BrokerFeatures unit)
Fixed IPrimitiveMap.ContainsKey must return True for properties even if value is empty (string)
Fixed AV in HabariChat demo caused by unassigned message
  Habari STOMP Client for ActiveMQ
New Test with ActiveMQ 5.15.9
  Habari STOMP Client for Artemis
New Test with Artemis 2.9.0
  Habari STOMP Client for OpenMQ
New Test with Eclipse Open Message Queue (OpenMQ) 5.1.3
  Habari STOMP Client for RabbitMQ
New Test with RabbitMQ 3.7.17
Release 2019.06 (6.2) - first offered 05 June 2019
  Habari STOMP Client for ActiveMQ
New Test for message group header JMSXGroupID
New Test for exclusive consumers (activemq.exclusive header on SUBSCRIBE)
New Test with JDK 12.0.1 and OpenJDK 11.0.2 LTS
New Test with ActiveMQ 5.15.9
  Habari STOMP Client for Artemis
New Test for message group header JMSXGroupID
New Test noLocal flag
New Documentation of anycastPrefix broker.xml entry for queue auto-creation, required for unit tests
New Test with JDK 12.0.1 and OpenJDK 11.0.2 LTS
New Test with Artemis 2.8.1
Fixed Unit test fixes
  Habari STOMP Client for OpenMQ
New Test with Eclipse Open Message Queue (OpenMQ) 5.1.3
  Habari STOMP Client for RabbitMQ
New Test with Erlang 22.0
New Test with RabbitMQ 3.7.15
New Test with RabbitMQ 3.8.0 beta 4
Release 2019.02 (6.1) - first offered 02 February 2019
New Support for non-Unicode Delphi (tested with Delphi 6, uses VER140 conditional)
New Separated unit tests and integration tests
New Use 64 Bit code if LINUX64 is defined (experimental Linux support, only compatible with Delphi 10.3 Rio)
Fixed Fixed compiler error if HABARI_USE_INTERCEPT is enabled but HABARI_LOGGING is not
Fixed Use platform-specific line separator sLinebreak
Fixed Resolved compiler hints and warnings
Release 2018.10 (6.0) - first offered 06 October 2018
New New simple API, based on MQContext, MQProducer and MQConsumer (old API still may be used)
New Asynchronous message receive is no longer supported, the IMessageListener interface has been removed. This reduces the client library size as no reader thread code is needed anymore.
New Removed old low-level logging code (HABARI_RAW_TRACE), instead, new Indy-based communication log (HABARI_USE_INTERCEPT) can be used
New TBTMessageConsumer performs a check for matching consumer ID and throws an exception if an unexpected id is received
New New connection URL parameter “message.subscription_check=false” allows to subscribe from multiple destinations with a single consumer
New Intercept (HABARI_USE_INTERCEPT) log file name now includes a random value to avoid file in use errors
New Tested with Indy 10.6.2 rev 5475
Release 2018.08 (5.5) - first offered 18 August 2018
New Message interceptor API for low-level custom logging
New Support transformation header for temporary queues
New Support compilation without Indy sources in project search path
New Raise exception if a message already has a receipt id header
New Make receipt ids longer (include time stamp)
New Tested with Indy 10.6.2 rev 5473
New Use {$IFNDEF FPC} instead {$IFDEF UNICODE}
Fixed String conversion warnings in StubServerTests unit
Fixed BTThread conditions for deprecated TThread suspend / resume (D2010 and higher)
Fixed Undefined escape sequences such as \t (octet 92 and 116) MUST be treated as a fatal protocol error
Fixed Avoid exception if serialized XML or JSON object is an empty string
Fixed Hide warnings in NativeXML, NativeXMLObjectStorage units
  Habari STOMP Client for ActiveMQ
New Removed warning 'FPC 3.0.0 contains a bug which causes wrong message expiration values'
Open ActiveMQ does not encode/decode carriage returns in headers to/from \r (as required by the STOMP 1.2 specification) STOMP 1.2 specification: Value encoding
  Habari STOMP Client for OpenMQ
New Removed warning 'FPC 3.0.0 contains a bug which causes wrong message expiration values'
Release 2018.04 (5.4) - first offered 20 April 2018
  Habari STOMP Client for ActiveMQ
New Tested with Apache ActiveMQ 5.15.3
  Habari STOMP Client for Artemis
New Tested with Apache ActiveMQ Artemis 2.4.0 and 1.5.6
  Habari STOMP Client for OpenMQ
New Tested with Payara 5
New Tested with Open MQ 5.1.1 (August 2017)
  Habari STOMP Client for RabbitMQ
New Tested with RabbitMQ 3.7.4
  Habari STOMP Client for all versions
New Tested with Indy 10.6.2 rev 5446
New Enforce Indy 10: if the Indy version is not 10 compilation will fail with an error
New Unit tests: new methods THabariTestCase.StartStopwatch / AssertStopWatch
New Unit tests: new test case ReceiveNoWaitDoesNotBlock
Fixed Unit tests: fixed FPC warnings
Fixed Unit tests: fixed test TestTransactionRollbackForACK for brokers which do not support transacted receive
Fixed Unit tests: TLocalStompServer in StubServerTests closes the connection after sending the ERROR frame (as per STOMP specification)
Release 2018.02 (5.3) - first offered 18 February 2018
New The library now supports connection URL parameters for receipt request configuration – receipt requests can be configured for the SUBSCRIBE, UNSUBSCRIBE, SEND, ACK, NACK, BEGIN, COMMIT, ABORT and DISCONNECT frame, the client raises an exception if it the receipt does not arrive in time. Note: this is work in progress.
New The library detects invalid connection URL parameter names and raises an exception if it contains unknown parameters. The detection can be switched off with a conditional symbol (HABARI_ALLOW_UNKNOWN_URL_PARAMS). Note that parameters are case sensitve.
New The unit test suite includes a stub STOMP server for heart-beat tests, the server is derived from the Indy TCP server implementation TIdCustomTCPServer and runs embedded in the unit test executable
New Method StompProtocolVersion of the IConnectionInfo interface returns the protocol version of the active connection
New Use the ConnectTimeout value also as read time-out for the CONNECTED frame
New Removed unused properties in TBTMessageConsumer
New Tested with Free Pascal 3.0.4 / Lazarus 1.8
New Added test cases for TBTConnectionFactory.ConnectTimeOut (Indy only)
New Documentation updates: (deprecation list, limitations with Free Pascal)
New Tested with Apache ActiveMQ 5.15.1, 5.15.2, 5.15.3 and Indy 10.6.2 rev 5446 (ActiveMQ)
New Tested with Apache ActiveMQ Artemis 2.3.0, 2.4.0 and Indy 10.6.2 rev 5446 (Artemis)
New Tested with Open MQ 5.1.1 (August 2017) and Indy 10.6.2 rev 5446 (OpenMQ)
New Tested with RabbitMQ 3.6.15, 3.7.2, 3.7.3 and Indy 10.6.2 rev 5446 (RabbitMQ)
Fixed Fixed logging output of connect time out in TBTStompClient.Connect
Fixed Fixed unit tests for ActiveMQ Artemis tests
Fixed Fixed HABARI_LOGGING_RAW_TRACE
Fixed Fixed minor bug in ConnectTimeout
Fixed Fixed reply-to parameter handling for OpenMQ
Fixed Fixed empty subscription header in reply-to messages
Release 2017.10 (5.2) - first offered 20 October 2017
New Tested with Apache ActiveMQ 5.15.0, 5.15.1 and Indy 10.6.2 rev 5436 (ActiveMQ)
New Tested with Apache ActiveMQ Artemis 2.1.0, 2.2.0, 2.3.0 and Indy 10.6.2 rev 5436 (Artemis)
New Tested with Open MQ 5.1.1 (August 2017) and Indy 10.6.2 rev 5436 (OpenMQ)
New Tested with RabbitMQ 3.6.11, 3.6.12, 3.7.0-rc.1 and Indy 10.6.2 (RabbitMQ)
New Added DUnit test extensions which use the broker-specific JMX-based management API (ActiveMQ)
New Added DUnit test extensions which use the broker-specific JMX-based management API (Artemis)
New Added DUnit test extensions which use the broker-specific REST-based management API (RabbitMQ)
New FPCUnit tests using Lazarus 1.8 RC4/FPC 3.0.4 RC1
New Added support for STOMP connection URLs with user:password@host syntax to pass user credentials
New Added BTQueueRequestor in example code
New Added logging with error level if connect fails
New Added constants for failover options
New Added constants for Ack modes
New Added 'not recommended' hint where IMessageListener is used (HabariChat)
New Added comment in SSL adapter class to show how TLS 1.2 can be configured exclusively
New Replaced unneccessary PMString type with string type
New Replaced OnAfterTransportConnected event with AfterSocketConnected
New Removed FPC 2 workaround for TFormatSettings which is available in FPC 3
Fixed Fixed test failure in TestMessageForOtherSubInWaitForReceiptFrame (related to HABARI_RAW_TRACE)
Fixed Fixed a compiler warning in TBTSession.Send
Fixed Fixed compiler warning - UnsubscribeDurable is now virtual
Fixed Fixed several compiler warnings in TBTCommAdapter
Open Artemis 2.3.0 error messages
Release 2017.06 (5.1) - first offered 30 June 2017
New Tested with Apache ActiveMQ 5.14.5 and Indy 10.6.2 rev 5426 (ActiveMQ)
New Tested with Apache ActiveMQ Artemis 2.1.0 and Indy 10.6.2 rev 5426 (Artemis)
New Tested with Open MQ 5.1.1 and Indy 10.6.2 rev 5426 (OpenMQ)
New Tested with RabbitMQ 3.6.10 and Indy 10.6.2 5426 (RabbitMQ)
New Updated documentation on asynchronous delivery, IMessageListener will become deprecated
New Performance demo optionally runs multiple times to calculate median result (shift+click start button)
New Chat demo updated to work without Consumer.MessageListener
New ConsumerTool updated to work without Consumer.MessageListener
New Performance demo footer panel shows the version string of currently connected message broker
New Connection configuration demo form shows the version string of currently connected message broker
New Connections use STOMP 1.2 by default (ActiveMQ, Artemis, RabbitMQ)
New DUnit test GUI shows the version string of currently connected message broker
New FPCUnit test GUI shows the version string of currently connected message broker
New Removed unused BTQueueBrowser unit (Artemis, OpenMQ, RabbitMQ)
New Removed unused BTQueueRequestor unit
New Refactored and removed BTResourceStrings unit
New Refactored and removed ActiveMQTypes unit
New Constant declarations (SH_DURABLE_SUBSCRIBER_NAME, SH_NOLOCAL) moved to unit BTBrokerConsts
Fixed Fixed unit test TestMessageForOtherSubInWaitForReceiptFrame
Fixed Fixed unit test TestUnicodeWithLanguageNames error ACK: [BSS4012]: Invalid value id for header (OpenMQ)
Fixed Fixed unit test TestReceiveNoWaitMany error ACK: [BSS4012]: Invalid value id for header (OpenMQ)
Fixed Fixed warning 'Private symbol 'GetServerAndConnectionInfo' declared but never used' (RabbitMQ)
Fixed Fixed missing doxygen documentation for IConnectionInfo and other interfaces
Release 2017.04 (5.0) - first offered 29 April 2017
New Tested with current broker versions ActiveMQ 5.14.5, Artemis 2.0.0 and RabbitMQ 3.6.9
New Tested with Indy 10.6.2 v 5412
New Tested with Free Pascal 3.0.2
New Tested with IPv6
New Added IConnectionInfo interface which gives access to broker version string and STOMP version of the current connection
New Added logging of broker version string and STOMP protocol version number
New Added logging of detected message type of incoming STOMP message (text, binary, object, map)
New Added a check for unsupported character sets in the content-type header of incoming text messages
New Added a warning at compile time for Free Pascal 3.0.0, since a bug in LocalTimeToUniversal function may cause wrong message expiration time (bug has been fixed in Free Pascal 3.0.2)
New Added a DUnit/FPCUnit base test class which provides a parameter-compatible ExpectException method for FPCUnit
New Added a conditional symbol (HABARI_TEST_SYNAPSE) to enables Synapse communication adapter in DUnit/FPCUnit tests, default is Indy
New Changed DUnit/FPCUnit tests use STOMP 1.2 by default
New Reorganzied DUnit/FPCUnit tests, added documentation section on unit tests
Fixed Fixed doxygen warnings
Fixed Removed support for Free Pascal 2.6.* and non-Unicode Delphi
Fixed Removed HABARI_USE_WIDESTRING conditional symbol
Fixed Fixed unit test for NoLocal flag handling (Apache ActiveMQ Artemis)
Fixed Applied workaround for RabbitMQ 3.5.4 or newer (which is now the minimum supported version) (RabbitMQ)
Release 2017.02 (4.5) - first offered 02 February 2017
New Tested with current broker versions ActiveMQ 5.14.3, Artemis 1.5.1 and RabbitMQ 3.6.6
New Added SetBoolean / GetBoolean methods to the MapMessage interface
New Added JMS MapMessage and ObjectMesssage demo (ActiveMQ)
New Added example for auto-delete and priority in Getting Started PDF (RabbitMQ)
New Added an exception when client ack is used on consumer of a temporary queue (RabbitMQ)
New Added BTConnectionConst unit for connection URL parameter constants
New Added logging of inbound STOMP message body whith HABARI_RAW_TRACE_BODY
New Added removal of destination URL parameters in a SEND frame
Fixed Replaced TBTJMSConnection usage with TBTConnection
Fixed Fixed a ompilation error with OmniXML by Kluug.net
Fixed Removed lkJSON from distribution
Fixed Removed direct Log4D dependencies (for logging, the library uses SLF4P exclusively)
Fixed Removed Log4D from distribution
Fixed Removed deprecated TBTJMSConnectionFactory
Fixed Removed objectpool from distribution
Fixed Removed HABARI_USE_SLF4P_LOGGING conditional symbol
Open A Free Pascal 3.0.0 bug in LocalTimeToUniversal causes wrong message expiration timestamp values (bug report)
Open A workaround is still required for the Synapse communication adapter when used with RabbitMQ 3.5.4 and newer. To enable it, define the HABARI_RABBITMQ_354_UP conditional symbol. Note: programs which define this symbol are not compatible with older versions of RabbitMQ.
Release 2016.10 (4.4) - first offered 01 October 2016
New Tested with current broker versions ActiveMQ 5.14.0 and RabbitMQ 3.6.5, and with Internet Direct (Indy) version 10.6.2 5367
New Added exchange destination demo (RabbitMQ)
Fixed Unit tests create a distinct queue per unit test to reduce potential side effects
Fixed Fixed usage of with keyword
Fixed Updated SLF4P logging facade library and added a deprecation warning for direct usage of Log4D (without SLF4P)
Fixed Documentation fixes for scheduler demo project (ActiveMQ)
Fixed Queue browser demo project (ActiveMQ)
Fixed With Artemis 1.4.0, distinction between text and binary messages now works as expected again (Artemis)
Fixed Fixed subscribing to /exchange destinations (RabbitMQ)
Fixed Specifying NoLocal or non-empty message selectors will cause exceptions (RabbitMQ)
Open A Free Pascal 3.0.0 bug in LocalTimeToUniversal causes wrong message expiration timestamp values (bug report)
Open A workaround is still required for the Synapse communication adapter when used with RabbitMQ 3.5.4 and newer. To enable it, define the HABARI_RABBITMQ_354_UP conditional symbol. Note: programs which define this symbol are not compatible with older versions of RabbitMQ.
Release 2016.04 (4.3) - first offered 16 April 2016
New Added support for the SLF4P logging facade which provides bindings to the LazLogger, Log4D, and other logging implementations
New Tested with current broker versions ActiveMQ 5.13.2 and RabbitMQ 3.6.1, and with Internet Direct (Indy) version 10.6.2 5353
Fixed Enforce check of matching clientId and subscription name for STOMP 1.0 (ActiveMQ) (AMQ-3917)
Fixed Fixed unit test TestReceiveMessagesFromOtherSubscription (Artemis)
Fixed The 'Message Priority' demo project sets the 'x-max-priority' header on SEND and SUBSCRIBE frames and uses separate connections for producer and consumer (RabbitMQ)
Fixed Changed default installation folder to common documents
Fixed Documentation fixes
Open A Free Pascal 3.0.0 bug in LocalTimeToUniversal causes wrong message expiration timestamp values (bug report)
Open A workaround is still required for the Synapse communication adapter when used with RabbitMQ 3.5.4 and newer. To enable it, define the HABARI_RABBITMQ_354_UP conditional symbol. Note: programs which define this symbol are not compatible with older versions of RabbitMQ.
Release 2015.12 (4.2) - first offered 16 December 2015
New Example console program project for sending and receiving of a Unicode text message in demo/unicode
New Example console program project for sending a message within a transaction in demo/transactions
New Internet Direct (Indy) communication adapter consumes EOLs between STOMP frames according to the STOMP 1.2 specification
New Support for subscribing to composite destinations with ActiveMQ 5.12.2/5.13.0 (broker-specific feature supported only by Habari Client for ActiveMQ) (AMQ-6030)
New Tested with Internet Direct (Indy) version 10.6.2 5317
New Tested broker specific STOMP header 'x-max-priority' with RabbitMQ 3.5.6
Fixed Free Pascal 3.0.0 warnings about unsafe string casts
Fixed JMSDestination property value is nil in incoming message
Fixed JMSExpiration property value is zero after send completed
Fixed Duplicate declaration of exception type EIllegalStateException
Fixed IMessageConsumer#Dispatch method is not required in interface
Open A Free Pascal 3.0.0 bug in LocalTimeToUniversal causes wrong message expiration timestamp values (bug report)
Open A workaround is still required for the Synapse communication adapter when used with RabbitMQ 3.5.4 and newer. To enable it, define the HABARI_RABBITMQ_354_UP conditional symbol. Note: programs which define this symbol are not compatible with older versions of RabbitMQ.
Release 2015.10 (4.1) - first offered 24 October 2015
New The new conditional symbol HABARI_SSL_SUPPORT enables SSL support code. (Important note: SSL is an optional feature, no support is included in the basic support plan)
New The method TBTStompClient.AddConnectOptions no longer adds a ‘default’ HOST header
New All messages which have a content type starting with ‘text/’ are treated as text messages (RabbitMQ)
New Deprecated functions in TJMSConnectionFactory have been replaced by constants in BTBrokerConsts
Fixed A bug has been fixed which caused the client to not wait for a receipt frame
Fixed Deleting durable subscriptions from the client now works as expected with RabbitMQ
Fixed A workaround is included for a breaking change in version 3.5.4 of RabbitMQ and newer
Release 2015.06 (4.0) - first offered 24 June 2015
New The setter method TBTObjectMessage.SetObject will raise an EIllegalArgumentException if the passed object reference is nil
New TBTAbstractConnectionFactory.CreateMQConnection now throws EConfigurationException instead of Exception when the connection URL specifies an unsupported protocol
New The unit tests include a test which produces a message with 32 MB size. (TBasicTests.TestLargeBytesMessage)
New (RabbitMQ) The library supports both JMS (0…9) and AMQP (0…255) priority ranges
New The library versions for ActiveMQ, Apollo, OpenMQ and RabbitMQ support temporary queues. Temporary destinations are typically used to receive response messages in a request/response messaging exchange. This release includes a unit test which demonstrates the work flow in a RPC style communication, where a temporary queue is used by the client to receive the server replies. Also, a problem with addressing temporary queues of ActiveMQ message brokers surfaced in this test, and a workaround is included in the test. (TStompJMSBindingTests.TestTemporaryQueue)
New The unit tests now include a test which shows XPath message selector usage. (TStompJMSBindingTests.TestXPATHSelector)
Fixed This release fixed a potential memory leak which occured in the error handling of method TBTAbstractConnectionFactory.CreateMQConnection when unsupported protocols are specified in the broker connection URL
Fixed (RabbitMQ) A bug in the creation of message consumers for temporary destination has been fixed. (The bug also caused the RPC demo to fail)
Fixed The unit tests for ActiveMQ dead letter queue usage has been fixed. Tests showed that messages have to be sent with the persistent flag to appear in the ActiveMQ.DLQ destination. (TStomp12TestCase.TestClientNackOneMessage)
Release 2015.02 (3.9) - first offered 21 February 2015
New As a preparation for further code streamlining between library versions, a new API compatible factory class TBTConnectionFactory is included in this version which will replace TBTJMSConnectionFactory in the next major release
New If Log4D logging is enabled, the passcode header value will be not be logged but replaced with *** in the log output
New Several units which are not covered by basic support have been moved to the source/optional directory (BTMessageTransformer*, BTStreamhelper, SSL support units)
New Refactorings reduce unit dependencies and hard type casts in several places
New Removed unused procedure TBTStompClient.Connect(const AURI: IURI)
New The unit tests now include a test which shows XPath message selector usage. (TStompJMSBindingTests.TestXPATHSelector)
Fixed The throughput test application uses the subscribe.receipt=true connection parameter to ensure that the broker is ready before the producer starts sending messages
Release 2014.09 (3.8) - first offered 10 September 2014
New changed the Receive methods to update the heart-beat timestamp when heart-beats arrive, even if no message has been received. With this change, it is no longer required to call the CheckHeartbeat method periodically if no message arrived
New ITextMessage.Text is now of type string instead of WideString
New persistent messages will be sent with a receipt request
New Eliminate duplicate code in map message transformers
New Added a check that the STOMP frame ends with a NUL byte and raise a EBTStompError if a non-NUL byte is found, to indicate a STOMP protocol violation (and a potential loss of data)
New Added a transformer class for map message exchange based on the Superobject JSON library
New Added a transformer class for map message exchange based on the default XML parser library in Delphi (IXMLDocument)
New Added class TBTConnectionBuilder which can be used to construct a connection by chaining configuration methods (experimental/unsupported code)
New Added Free Pascal version of ConsumerTool application
New Added unit tests for durable subscriptions
New Added unit tests and a mock server to verify that the library detects a connection loss
New Added Free Pascal version of throughput test application
Fixed Unhandled Exceptions in WaitForReceiptFrame are re-raised to notify client code about the exception
Fixed Fixed compiler error undeclared identifier ‘ShortDateFormat’ when using Log4D with newer Delphi versions
Fixed Fixed Free Pascal compiler warning about deprecated ShortDateFormat in Log4D
Fixed Fixed Free Pascal compiler error ‘unknown identifier: TClassList’ and run time error SIGSGEV (Linux)
Fixed Fixed CurrentUTC method by using LocalTimeToUniversal (Free Pascal)