Choice of message bus
This is the rationale behind our choice of ActiveMQ as messaging software
We have chosen ActiveMQ as messaging software for the pilot, for the following reasons
It's easy to set up
It seems to support every feature we have requested till now
Its widely used
It supports SSL encrypted communication
There is wide language support: Java (JMS 1.1), C, C++, C#/.Net (NMS...), JavaScript - Ajax or WebSockets, Perl, PHP, Python and more
There is wide support for messaging protocols: OpenWire, REST, Stomp, WS Notification, XMPP, AMQP.
There is persistence support
Clustering is supported (Active/Fallback)
ActiveMQ is *not* an Enterprise Service Bus, but a messaging provider. Till now we have not met any need for more than basic messaging in terms of queues and topics.
Migration
Following several years of production use, we are now planning a migration from ActiveMQ Classic to ActiveMQ Artemis as part of the ongoing Java platform upgrade.
Why migrate?
The primary driver is Java version compatibility. ActiveMQ Classic supports Java up to and including version 23. The Java SecurityManager API — which Classic relies on internally — was deprecated in Java 17 and removed in Java 25. Classic has not addressed this, which means it represents a hard ceiling on our Java upgrade path.
ActiveMQ Artemis resolved this in version 2.44.0 (November 2025) by introducing a multi-release JAR with separate implementations for Java 17–23 and Java 24+. Artemis therefore supports Java 25, making it compatible with our intended Java migration target.
What Artemis offers compared to Classic
Artemis preserves all the properties that originally motivated our choice of ActiveMQ Classic, and improves on several of them:
Easy to set up — configuration is consolidated in a single
broker.xmlfileQueues and topics — fully supported; Artemis uses an address model where anycast routing corresponds to queues and multicast routing corresponds to topics
Wide protocol support — AMQP (now fully native), OpenWire, STOMP, MQTT, and WebSocket
SSL encrypted communication — supported
Persistence — Artemis uses its own high-performance append-only journal with async disk writes, replacing Classic's KahaDB
Clustering — supported (live/backup pairs, as well as cluster topologies)
JMS compatibility — the standard
javax.jms/jakarta.jmsAPI is unchanged; client code requires minimal modification
What changes
The internal broker architecture is different. Artemis is built on Netty NIO, meaning it uses non-blocking I/O rather than one thread per client connection. This improves scalability significantly but is transparent to application code.
The broker configuration format changes from activemq.xml to broker.xml. Destination definitions, security settings, and address policies must be translated.
Artemis requires Java 17 as a minimum (Java 11 support was dropped when Artemis moved from an embedded Jetty 10 to Jetty 12, which requires Java 17).
Conclusion
Artemis is not a replacement product — it is the natural continuation of ActiveMQ, now developed under its own Apache project. It retains all the messaging capabilities that have served us well since ActiveMQ was chosen, while removing the Java version ceiling that would otherwise block our platform upgrade.