Releases

Aspectow 4.2 Release Notes

Aspectow v4.2.0 is a major feature and performance milestone that introduces full integration with Aspectran 9.8.0 and its embedded Netty (aspectran-with-netty) server engine, real-time metric time-series visualizations in the AppMon dashboard (inline sparklines and interactive popover charts), a lightweight lock-free Redis connection pool architecture, and a lightweight MaxMind GeoIP2-based IPCountryResolver.

By adopting the servlet-less Netty runtime as the default server engine across demo modules, this release maximizes microservice operational throughput and efficiency. In addition, intuitive historical trend analysis for monitoring metrics, high-performance Lettuce shared connection pooling without commons-pool2, precision session lifecycle tracking, and responsive UI/UX improvements collectively elevate the reliability and operational experience of platform management.

🚀 New Features

  • Embedded Netty (aspectran-with-netty) Server Engine Support & Default Adoption
    • Introduced aspectran-with-netty as the primary web server engine across appmon-demo and console-demo modules, transitioning default dependency structures to Netty.
    • Implemented NettyServerPortProvider to retrieve dynamically bound active ports from NettyServer and share them seamlessly across Console and AppMon services.
    • Added NettyThreadPoolMetricsReader to accurately measure thread metrics in Java 21 Virtual Threads environments by using peak concurrent requests (getPeakRequests()) as total capacity.
    • Standardized WebSocket server container (WebSocketServerContainer) configuration and session management structures across Netty and Undertow.
    • Unified access logging configurations from logback-undertow to standardized logback-accesslog.
  • Real-time Metric Visualizations in AppMon Dashboard (Inline Sparklines & Detail Popover Charts)
    • Enhanced the AppMon dashboard Metrics Bar by adding inline sparklines for each metric item (CPU, Heap, Sessions, Thread Pool, Connection Pool, etc.) to visualize recent time-series trends at a glance.
    • Added interactive detail popover charts triggered by clicking individual metric items, displaying detailed time-series graphs along with minimum, maximum, and average statistics.
    • Added unit (unit, e.g., %, MB, conn, req) support to MetricInfo and MetricData, implementing dynamic value formatting and rendering logic in the dashboard viewer.
  • Lightweight Lock-Free Redis Connection Pool Architecture
    • Completely eliminated the heavyweight, lock-contended commons-pool2 dependency.
    • Refactored Redis connection pooling to a Lettuce-based lock-free striped shared connection architecture (RedisConnectionPool), eliminating connection acquisition overhead and thread blocking in high-concurrency environments.
    • Streamlined Redis connection pool configuration around a single poolSize property and cleaned up legacy backward-compatibility properties and methods.
    • Improved Redis message relay parsing to prevent blocking Netty event loop threads and optimized batch publishing performance.
  • Lightweight MaxMind GeoIP2/GeoLite2-Based IPCountryResolver
    • Implemented MaxMindIPCountryResolver utilizing the lightweight and fast maxmind-db (v4.1.0) reader to query MaxMind GeoIP2 and GeoLite2 binary database (.mmdb) files directly.
    • Enhanced configuration flexibility by supporting database loading from both filesystem paths and classpath resources (classpath:...).
  • CPU Usage Metrics Reader (CpuUsageMetricsReader)
    • Added CpuUsageMetricsReader to capture real-time CPU usage for the JVM process and overall system, with optimized collection intervals.

🚀 Improvements

  • Ordered Context Deployment Lifecycle for Undertow and Netty
    • Configured the Console context with the lowest deployment priority using the order property in TowServletContext and NettyContext, ensuring dependent contexts are fully initialized before the console is activated.
    • Applied prototype scope to NettyContext and server context configuration beans to improve instance isolation during context restarts and dynamic redeployments.
  • Refined Session Lifecycle Tracking and Eviction Timers (SessionEventReader)
    • Integrated with Aspectran 9.8.0’s getRemainingInactiveInterval and getMaxInactiveInterval to calculate remaining inactive intervals accurately for inactive and temporary resident (isTempResident) sessions, ensuring precise eviction timer updates.
    • Streamlined synchronization in SessionEventReader and refactored the lifecycle listener to bind directly with SessionManager.
    • Ensured UserTrackingListener is safely replaced and re-registered upon service restart.
    • Standardized session cookie names to use underscores (_) instead of dashes (-) (e.g., ASPECTOW_SESSION_ID).
  • Modernized Proxy Address Forwarding and Cookie Issuance APIs
    • Standardized proxyAddressForwarding settings in WebConfig and removed legacy proxyProtocolAware options.
    • Refactored AppMonCookieIssuer and console session cookie issuance logic using Aspectran 9.8.0’s new Cookie.builder() and WebUtils cookie helper APIs.
  • Refined Dashboard Metrics Bar Layout and Responsive UI Styling
    • Restructured the dashboard top metrics bar layout and improved border contrast and readability in both dark and light modes.
    • Adjusted responsive minimum widths (min-width) and tab CSS styling for CPU and Heap metric boxes to prevent layout misalignment across various display resolutions.
  • Enhanced WebSocket Client Error Handling and Token Lifecycle
    • Optimized error handling and automatic reconnection logic in WebSocketClient, reducing log verbosity for invalid tokens from ERROR to DEBUG.
    • Improved WebSocket authentication token acquisition and connection lifecycle management in the Console environment.
  • Improved Static Asset Bundling Build Pipeline
    • Updated Maven build configuration (.mvn/bundle-assets.js) to pass explicit version arguments during Node.js asset bundling.
    • Updated local asset import links in Thymeleaf templates with the latest cache-busting query parameter (v=20260909).

🐛 Bug Fixes

  • Prevented Duplicate Node Rendering on Cluster Rejoin
    • Resolved concurrency race conditions during asynchronous node reconstruction when a node rejoins a cluster, preventing duplicate node cards from appearing on the dashboard.
    • Added notification delay handling in the dashboard when a new node joins to allow sufficient initialization time.
  • Fixed UI Synchronization on PENDING Build Cancellation
    • Fixed an issue where cancelling a PENDING build execution did not immediately update the UI state despite being successfully cancelled on the backend.
  • Guarded Against Negative Inactive Intervals in Session Timers
    • Added defensive guards in SessionEventReader and dashboard viewers to ensure eviction timers are only set when inactiveInterval is greater than zero.
  • Corrected Zero Activity Count Handling for Non-Temporary Resident Sessions
    • Corrected event handling to ensure session events are preserved even when the activity count for non-temporary resident sessions is zero.

🛠️ Dependency Upgrades

  • Frameworks & Core Components
    • Aspectran: 9.6.5 → 9.8.0
    • Aspectran with Netty (aspectran-with-netty): 9.8.0 (Newly introduced)
  • Databases & IP Resolution Libraries
    • MaxMind DB Reader (maxmind-db): 3.1.1 → 4.2.0 (Newly introduced)
    • H2 Database: 2.4.240 → 2.5.252
  • Build & Plugins
    • Maven Compiler Plugin: 3.15.0 → 3.16.0
    • Maven Surefire Plugin: 3.5.6 → 3.6.0
    • Maven Bundle Plugin: 6.1.0 → 6.1.2

NEWS
Release

Archive