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-nettyas the primary web server engine acrossappmon-demoandconsole-demomodules, transitioning default dependency structures to Netty. - Implemented
NettyServerPortProviderto retrieve dynamically bound active ports fromNettyServerand share them seamlessly across Console and AppMon services. - Added
NettyThreadPoolMetricsReaderto 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-undertowto standardizedlogback-accesslog.
- Introduced
- 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 toMetricInfoandMetricData, 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-pool2dependency. - 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
poolSizeproperty 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.
- Completely eliminated the heavyweight, lock-contended
- Lightweight MaxMind GeoIP2/GeoLite2-Based
IPCountryResolver- Implemented
MaxMindIPCountryResolverutilizing the lightweight and fastmaxmind-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:...).
- Implemented
- CPU Usage Metrics Reader (
CpuUsageMetricsReader)- Added
CpuUsageMetricsReaderto capture real-time CPU usage for the JVM process and overall system, with optimized collection intervals.
- Added
🚀 Improvements
- Ordered Context Deployment Lifecycle for Undertow and Netty
- Configured the Console context with the lowest deployment priority using the
orderproperty inTowServletContextandNettyContext, ensuring dependent contexts are fully initialized before the console is activated. - Applied
prototypescope toNettyContextand server context configuration beans to improve instance isolation during context restarts and dynamic redeployments.
- Configured the Console context with the lowest deployment priority using the
- Refined Session Lifecycle Tracking and Eviction Timers (
SessionEventReader)- Integrated with Aspectran 9.8.0’s
getRemainingInactiveIntervalandgetMaxInactiveIntervalto calculate remaining inactive intervals accurately for inactive and temporary resident (isTempResident) sessions, ensuring precise eviction timer updates. - Streamlined synchronization in
SessionEventReaderand refactored the lifecycle listener to bind directly withSessionManager. - Ensured
UserTrackingListeneris safely replaced and re-registered upon service restart. - Standardized session cookie names to use underscores (
_) instead of dashes (-) (e.g.,ASPECTOW_SESSION_ID).
- Integrated with Aspectran 9.8.0’s
- Modernized Proxy Address Forwarding and Cookie Issuance APIs
- Standardized
proxyAddressForwardingsettings inWebConfigand removed legacyproxyProtocolAwareoptions. - Refactored
AppMonCookieIssuerand console session cookie issuance logic using Aspectran 9.8.0’s newCookie.builder()andWebUtilscookie helper APIs.
- Standardized
- 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.
- Optimized error handling and automatic reconnection logic in
- 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).
- Updated Maven build configuration (
🐛 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
PENDINGbuild execution did not immediately update the UI state despite being successfully cancelled on the backend.
- Fixed an issue where cancelling a
- Guarded Against Negative Inactive Intervals in Session Timers
- Added defensive guards in
SessionEventReaderand dashboard viewers to ensure eviction timers are only set wheninactiveIntervalis greater than zero.
- Added defensive guards in
- 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
- MaxMind DB Reader (
- 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
Juho Jeong NEWS
Release