Query ActiveMQ Broker Statistics with Delphi

Broker Configuration

To configure ActiveMQ to use the statistics plugin add the following to the ActiveMQ XML configuration:


The statistics plugin looks for messages sent to particular destinations.

Query running broker statistics

To query the running statistics of the message broker, the client sends an empty message to a Destination named ActiveMQ.Statistics.Broker, and sets the replyto field with the Destination you want to receive the result on. The statistics plugin will send a  MapMessage filled with the statistics for the running ActiveMQ broker.

Source code

program DestStatistics;

  Requires ActiveMQ 5.3 or higher
  To configure ActiveMQ to use the statistics plugin, add the following to the ActiveMQ XML configuration:

  DestStatistics [destination]
  If no destination is specified, the program returns the broker statistics


  You can also use wildcards too, and receive a separate message for every destination matched.


  BTCommAdapterIndy, BTMessageTransformerXMLMapOmni,
  BTJMSInterfaces, BTJMSConnection, BTSessionIntf, BTSerialIntf,
  BTStompTypes, BTTypes,

  Connection: IConnection;
  Session: ISession;
  Producer: IMessageProducer;
  Consumer: IMessageConsumer;
  Destination, ReplyQueue: IQueue;
  JMSMessage: ITextMessage;
  Reply: IMapMessage;
  MapNames: PMStrings;
  I: Integer;
  Key: string;

  Connection := TBTJMSConnection.MakeConnection;
      // Create and assign the message transformer
      SetTransformer(Connection, TBTMessageTransformerXMLMapOmni.Create(nil));

      Session := Connection.CreateSession(False, amAutoAcknowledge);

      // listen on reply queue
      ReplyQueue := Session.CreateQueue('Habari' + '?' +
      Consumer := Session.CreateConsumer(ReplyQueue);

      // create the pseudo destination
      if ParamCount = 0 then
        Destination := Session.CreateQueue('ActiveMQ.Statistics.Broker');
        Destination := Session.CreateQueue('ActiveMQ.Statistics.Destination.' + ParamStr(1));

      // display destination name
      WriteLn('Request statistics for ' + Destination.QueueName + ' ...');

      // create the message and set reply queue name
      JMSMessage := Session.CreateTextMessage;
      JMSMessage.JMSReplyTo := ReplyQueue;
      Producer := Session.CreateProducer(Destination);

      // read the result message
      Reply := Consumer.Receive(1000) as IMapMessage;

      // list the map key/values
      while Assigned(Reply) do
        MapNames := Reply.GetMapNames;
        for I := 0 to Length(MapNames) - 1 do
          Key := MapNames[I];
          WriteLn(Key + '=' + Reply.GetString(Key));
        Reply := Consumer.Receive(1000) as IMapMessage;

      WriteLn('No more message on queue ' + ReplyQueue.QueueName);


      on E: Exception do

  WriteLn('Press any key');


Query Statistics for Apache ActiveMQ with Delphi

NetBeans IDE 8.0 released

The new release of the NetBeans IDE is out. The Release notes list many new features including Java 8 support, Java SE Embedded support, PrimeFaces code generators, TomEE support, updated JavaServer Faces Versions and PrimeFaces 4.0 library, Profiler enhancements, Support for Subversion 1.8 working copies, various enhancements to Git and Mercurial support.

NetBeans 8: JavaDoc tooltips

NetBeans IDE 8.0 Information

NetBeans IDE 8.0 provides out-of-the-box code analyzers and editors for working with the latest Java 8 technologies–Java SE 8, Java SE Embedded 8, and Java ME Embedded 8. The IDE also has a range of new enhancements that further improve its support for Maven and Java EE with PrimeFaces; new tools for HTML5, in particular for AngularJS; and improvements to PHP and C/C++ support.

NetBeans IDE 8.0 is available in English, Brazilian Portuguese, Japanese, Russian, and Simplified Chinese.

ScroogeXHTML for the Java™ platform 4.2 – fast RTF to HTML/XHTML converter

Habarisoft released its RTF to HTML/XHTML converter library, ScroogeXHTML for the Java™ platform, version 4.2.

Release Notes:

  • The conversion method convert(String rtf) no longer uses HTML encoding (&#nnnnn;) for non-ASCII characters
  • New method convert(String rtfileName, String htmlFileName, String charsetName)
  • Method convert(String rtfileName, String htmlFileName) uses UTF-8 charset
  • New Method convert(String rtf, File outFile, String charsetName)
  • Method convert(String rtf, File outFile) uses UTF-8 charset
  • Fixed unchecked calls in classes FontTable and RTFKeywords
  • Fixed double blanks before lang attribute
  • Code clean-up (based on NetBeans IDE hints)
  • Dependency to sl4j updated to 1.7.5
  • Installer updated to IzPack 5.0.0 rc1
  • HTML5 added to unit tests

On-line demo

The page https://secure.habariwebcomponents.de/sxd/ allows to upload a RTF file and convert it to different output formats (including HTML5, HTML 4.01 and XHTML).

API documentation

The online API documentation is available at http://www.habarisoft.com/scroogexhtml_j/4.2/docs/api/index.html.

Two server deployment licenses included

For the deployment on client/server production systems, the Single Developer license already includes two full server deployment licenses. License types are explained on http://www.habarisoft.com/scroogexhtml_license.html

Delphi version

The RTF to HTML / XHTML library is also available for Delphi at http://www.habarisoft.com/scroogexhtml_delphi.html

Habari Client Libraries for Delphi and Free Pascal – new releases

4. December 2013 – New versions of all Habari message broker client libraries are available. The new release of Habari Client libraries is mainly a maintenance release. The new library versions are:

  • Habari Client for ActiveMQ 3.6 (tested with ActiveMQ version 5.9.0)
  • Habari Client for Apollo 1.6 (tested with Apollo version 1.6)
  • Habari Client for HornetQ 2.2 (tested with HornetQ version 2.3.1)
  • Habari Client for OpenMQ 2.6 (tested with OpenMQ version 5.0.1)
  • Habari Client for RabbitMQ 1.8 (tested with RabbitMQ version 3.2.1)

This release fixes several bugs and warnings. For a full list of changes please check the “Getting Started” documentation. More information, demo downloads, example code and the complete API reference are available on-line.

With Habari Client libraries, Delphi and Free Pascal developers can take advantage of message broker technology, which is distributed, loosely coupled, reliable and asynchronous, to build integrated systems, connecting clients using the peer-to-peer or the publish-and-subscribe communication model.

Habari Client Libraries

Habari Client Libraries for Delphi and Free Pascal – new releases

New versions of all Habari message broker client libraries is available. The new release of Habari Client libraries introduces new features, including improved Free Pascal support:

  • New: Remote Procedure Call (RPC) demo program
  • New: Heart-beating tests using built-in STOMP server
  • New: Connection parameter “subscribe.receipt” to request and verify broker confirmations for subscriptions
  • New: Connection pool example implementation with demo project
  • New: Tested with Free Pascal 2.6.2
  • New: Tested with Indy 10.6
  • New: Support for mixed compiler modes with Free Pascal
  • Improved: ESynapseError exceptions will be re-raised from Receive operations

With Habari Client libraries, Delphi and Free Pascal developers can take advantage of message broker technology, which is distributed, loosely coupled, reliable and asynchronous, to build integrated systems, connecting clients using the peer-to-peer or the publish-and-subscribe communication model.

Habari Client libraries provide access to enterprise quality messaging solutions. Supported message brokers include Apache ActiveMQ, Apollo, HornetQ, Open MQ, and RabbitMQ.

Habari Client Libraries

Discover ActiveMQ brokers with Delphi XE4 and Indy 10.6

This article shows how Delphi can use IP multicast to discover running Apache ActiveMQ message brokers in the local network. The code has been tested with Internet Direct (Indy) 10.6, which is the version included in Delphi XE4, and Apache ActiveMQ 5.8, which is the current release of the open source message broker.

With the code below, a Delphi application can list all ActiveMQ brokers, see their status, and get their IP address. This allows for dynamic configuration of client applications (built for example with Habari Client for ActiveMQ), where systems do not need to know the location of message brokers. It also allows automatic handling of broker failures or maintenance windows without intervention.

Example output

The output shows that a broker was found, running on the computer ‘my-PC’. The URL part indicates that the broker provides a connector for the OpenWire protocol on port 61616.

Waiting for broker discovery messages ...
Brokers found:

Continue reading

Java EE 7 reference implementation GlassFish 4 released

GlassFish 4 – the first Java EE 7 application server – has been released. It is open source and available for download here – in two versions (Full Java EE platform and the Java EE Web Profile with reduced resource footprint) for Windows, Solaris, Linux and OS X.

New features include standardized API support for the WebSocket (JSR 356) and JSON (JSR 353) specifications, HTML5 support in the JavaServer Faces version 2.2, JMS 2.0, a Batch processing API (JSR 352), Concurrency support, and more. See also: GlassFish 4 Brings Java EE 7

Delphi and Free Pascal applications can be integrated in GlassFish (Full Java EE platform) web applications and web services using the Habari Client libraries from Habarisoft, which provide direct communication with the Open Message Queue (Open MQ) message broker, which is the default JMS provider in GlassFish 3 and 4.

Habari Client for OpenMQ

RPC with Delphi server and Java client using RabbitMQ (part 2 of 2)

This article shows the code for a Delphi server which receives a RPC call message from the inbound RabbitMQ request queue, and sends the response message back to the Java client. It is the mirror code for the previous article.

Continue reading

RPC with Delphi client and Java server using RabbitMQ (part 1 of 2)

The RabbitMQ online tutorial Remote procedure call (RPC) – using the Java client demonstrates how RPC can be implemented between a Java client and a Java server process, communicating over the RabbitMQ open source message broker.

But access to the RPC server process is not limited to Java applications – Delphi and Free Pascal applications using the Habari Client for RabbitMQ library can invoke the server process method too.

This article shows the code for a Delphi client which sends a RPC call message to the inbound RabbitMQ request queue, and receives the response message over a temporary queue, which exists only for the duration of the connection.

Continue reading