Release Notes

Release 2018.08 - 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 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 Client for OpenMQ
New Removed warning 'FPC 3.0.0 contains a bug which causes wrong message expiration values'
Release 2018.04 - first offered 20 April 2018
  Habari Client for ActiveMQ
New Tested with Apache ActiveMQ 5.15.3
  Habari Client for Artemis
New Tested with Apache ActiveMQ Artemis 2.4.0 and 1.5.6
  Habari Client for OpenMQ
New Tested with Payara 5
New Tested with Open MQ 5.1.1 (August 2017)
New Payara 5 integration example blog article
  Habari Client for RabbitMQ
New Tested with RabbitMQ 3.7.4
  Habari 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 - 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 - 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 - 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 - 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) (see blog article)
Release 2017.02 - 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. (blog article)
Release 2016.10 - 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. (blog article)
Release 2016.04 - 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. (blog article)
Release 2015.12 - 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. (blog article)
Release 2015.10 - 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 (blog article)
Release 2015.06 - 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 - 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 - 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)