Skip to main content

jPOS 3.0.1 has been released

· 3 min read
Alejandro Revilla
jPOS project founder

We are pleased to announce the release of jPOS 3.0.1, a stabilization update to the 3.x line that focuses on robustness, observability, and production hardening.

While 3.0.0 was a major leap forward—introducing Virtual Threads, Micrometer instrumentation, Java Flight Recorder integration, and full JPMS support—3.0.1 consolidates that foundation. This release incorporates a large number of bug fixes, performance refinements, dependency updates, and operational improvements. Most importantly, it is already running in production at several large sites, validating the architectural decisions made in 3.0.0 under real-world load.

Highlights

Production Hardening

Several improvements target operational stability:

  • Improved ChannelAdaptor reconnect logic and early detection of dead peers.
  • Added soft-stop support in ChannelAdaptor.
  • ISOServer now gracefully catches BindException.
  • MUXPool startup is more lenient with missing muxes and sanitizes configuration.
  • Fixes in XMLPackager synchronization reduce contention and improve performance.
  • Fix for FSDMsg packing on separator fields.
  • Improved handling of context dumping to avoid unnecessary exceptions.

In addition, the new ConfigValidator helps catch configuration issues early, reducing deployment-time surprises.

Virtual Threads Refinements

Virtual Threads were one of the flagship features of jPOS 3. This release refines their adoption:

  • Added a virtual-thread property to ISOServer (default false), ChannelAdaptor (default false), and TransactionManager (default true).
  • DirPoll now supports Virtual Threads.

These additions give operators more explicit control when tuning thread behavior in mixed or incremental migration scenarios.

Observability and Metrics

Observability continues to improve:

  • Instrumented QMUX metrics.
  • Added MTI tag support to counter metrics for transaction-type visibility.
  • Channel metrics refactored for better cardinality control.
  • Introduced a Metrics utility class for easier Micrometer access.
  • Added /jpos/q2/status endpoint when metrics are enabled.
  • Enabled PrometheusMeterRegistry.throwExceptionOnRegistrationFailure to surface misconfiguration early.

These changes improve clarity and safety in high-volume environments where metric cardinality and instrumentation correctness matter.

Q2 Enhancements

Q2 receives several important improvements:

  • New constructor accepting a main classloader.
  • Added Q2.node() (now static).
  • Q2 template enhancements.
  • New QFactory method to instantiate from Element.
  • Honor enabled attribute on additional QServer child elements.

Together, these changes make Q2 more flexible in embedded, modular, and containerized deployments.

Security and Dependency Updates

As part of ongoing maintenance and supply-chain hygiene:

  • Temporarily removed SSHd support due to multiple CVEs.
  • Upgraded key libraries including:
    • BouncyCastle 1.83.
    • Micrometer 1.16.1.
    • Jackson 2.20.1.
    • JUnit 6.0.1.
    • SnakeYAML 2.5.
    • OWASP Dependency Check and CycloneDX plugins.
  • Gradle wrapper updated to 9.2.1.

We also export org.jpos.iso.channel.* via JPMS, further improving modular compatibility.

Miscellaneous Improvements

  • Added SnapshotLogListener.
  • Added LSPace.
  • Added restricted context support for non-String keys.
  • Environment improvements:
    • Static Environment.resolve(String).
    • Multiline resolution support.
    • Safer equals match expression.
    • Refactor to avoid potential regexp stack overflow.
  • Support for the new Zimbabwe Gold currency (ZWG).
  • Debug property for ISO error tracing.

Why Upgrade to jPOS 3.0.1?

If you are already on 3.0.0, this is a strongly recommended upgrade. It strengthens the runtime characteristics of the 3.x architecture, improves observability, tightens security posture, and incorporates extensive real-world feedback from early adopters.

If you are coming from jPOS 2.x, 3.0.1 represents a mature entry point into the modernized 3.x line—bringing Virtual Threads, Micrometer-based instrumentation, JPMS support, and structured logging into a stable, production-validated release.

References: