jPOS 3.0.1 has been released
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
ChannelAdaptorreconnect logic and early detection of dead peers. - Added soft-stop support in
ChannelAdaptor. ISOServernow gracefully catchesBindException.MUXPoolstartup 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-threadproperty toISOServer(defaultfalse),ChannelAdaptor(defaultfalse), andTransactionManager(defaulttrue). DirPollnow 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
Metricsutility class for easier Micrometer access. - Added
/jpos/q2/statusendpoint when metrics are enabled. - Enabled
PrometheusMeterRegistry.throwExceptionOnRegistrationFailureto 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
QFactorymethod to instantiate fromElement. - Honor
enabledattribute on additionalQServerchild 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.
- Static
- 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:
