bennidi/mbassador
50.5
Adequate · 22 September 2026
4k
lines of production code
Java
primary language
6
measurements over time
What this system is
MBassador is a high-performance, thread-safe publish/subscribe message bus for Java that supports synchronous and asynchronous message delivery. It features automatic listener discovery, message filtering, and configurable handler invocation via reflection or MethodHandles. The system provides a flexible architecture for managing subscriptions and handling errors, with comprehensive test coverage validating its core messaging capabilities.
Features
Added concurrent set implementations and reflection utilities
Introduced AbstractConcurrentSet as a thread-safe, lock-optimized set implementation supporting non-blocking reads. Added StrongConcurrentSet (using strong references) and WeakConcurrentSet (using weak references with automatic garbage collection cleanup during iteration). Included supporting interfaces (IPredicate, ISetEntry) and ReflectionUtils for method and annotation discovery, including support for meta-annotations.
src/main/java/net/engio/mbassy/common · high confidence
Added example code for message bus configuration and listener handling
Added four new Java example files (BusConstruction, ErrorHandling, ListenerDefinition, SubscriptionAndPublication) demonstrating how to configure the MBassador message bus, handle errors, define listeners with various invocation modes (synchronous/asynchronous), apply filters, and manage subscriptions and publications.
examples · high confidence
Added message filtering, handler synchronization, and interface annotation inheritance
Users can now apply pre-delivery filters to message handlers using the new @Filter annotation and the IMessageFilter interface, which includes standard implementations like RejectSubtypes and SubtypesOnly in the Filters class. The @Handler annotation now supports a 'rejectSubtypes' option to control message type matching, and a 'synchronized' annotation ensures thread-safe handler invocation. Additionally, @Handler annotations placed on interface methods are now inherited by implementing classes, allowing for reusable handler configurations across class hierarchies.
src/main/java/net/engio/mbassy/listener · high confidence
Introduction of a new subscription management architecture
The subscription handling in the message bus has been refactored into a new set of classes including SubscriptionManager, SubscriptionFactory, and SubscriptionContext. This introduces a more structured way to manage message listeners, allowing for better synchronization and lookup of subscriptions. The change enables customization of the subscription creation process through the new SubscriptionFactory and provides a way to plug in custom subscription managers.
src/main/java/net/engio/mbassy/subscription · high confidence
Modernize discovery and dispatch using JDK 24+ Class-File API and MethodHandles
MBassador introduces two modernization features: zero-configuration listener discovery via package auto-scanning using the JDK Class-File API, and high-performance handler invocation using java.lang.invoke.MethodHandle instead of traditional reflection. The auto-scan feature allows the bus to automatically find and subscribe listener classes annotated with @Listener and @Handler, with an opt-out mechanism via @Listener(autoScan = false). The default handler invocation now uses MethodHandle for reduced overhead, while preserving existing error-handling semantics. These changes are backward compatible with existing code.
(repo-wide) · high confidence
Behavioural changes
Refactored message bus architecture with new configuration and runtime model
The message bus implementation has been refactored to use a feature-driven configuration model via the new IBusConfiguration interface, allowing users to explicitly add features like asynchronous dispatch and handler invocation. This change introduces a BusRuntime container for dynamic properties and components, and provides three constructors for bus instances (default, error handler, or full configuration). The refactoring also introduces interfaces for message publication (IMessagePublication) and error handling (IPublicationErrorHandler), enabling better extensibility and separation of concerns in the pub/sub mechanism.
src/main/java/net/engio/mbassy/bus · medium confidence
Refactored message dispatching with new dispatcher and invocation abstractions
The message dispatching system has been refactored to use a new set of interfaces and classes in the dispatch package, enabling more flexible and composable message delivery. A new \IMessageDispatcher\ interface and \DelegatingMessageDispatcher\ base class introduce a decorator pattern for the dispatch chain. Specific dispatchers have been added: \FilteredMessageDispatcher\ for applying message filters, \EnvelopedMessageDispatcher\ for wrapping messages in envelopes, and \AsynchronousHandlerInvocation\ for scheduling handler execution on an \ExecutorService\. Handler invocation is now abstracted via \IHandlerInvocation\, with concrete implementations like \ReflectiveHandlerInvocation\ (using Java Reflection) and \MethodHandleInvocation\ (using \java.lang.invoke.MethodHandle\ for higher performance). Additionally, \SynchronizedHandlerInvocation\ provides synchronization for handlers marked as \@Synchronized\. This change modifies how messages are routed and delivered to listeners, supporting asynchronous, filtered, and synchronized delivery modes.
src/main/java/net/engio/mbassy/dispatch · high confidence
Test coverage
Expanded test coverage for message bus features
Added 63 new or updated test files in src/test to verify message bus behavior, including FIFO ordering, auto-scanning, bus construction, concurrent set operations, conditional handlers, custom annotations, dead messages, filters, interface inheritance, metadata reading, and method dispatch. These tests validate the correctness of the MBassador message bus implementation across various configurations and edge cases.
src/test · high confidence
Dependencies
Updated test dependencies and build configuration
The project's build files (build.gradle and pom.xml) have been updated to use newer versions of test dependencies, specifically JUnit 4.13.2, Mockito 5.20.0, and SLF4J 1.7.36. The Gradle build also includes JVM arguments to open internal Java packages for testing, while the Maven build configures the Nexus staging plugin for releases.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 59 → 50 (-8.2)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 99 → 99 (-0.1)
- Architecture 100 → 96 (-4.3)
- Maturity 47 → 44 (-2.2)
- Readiness 43 → 34 (-8.9)
- Security 100 → 78 (-22.2)
Resolved (7)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (8 lines × 2) (src/main/java/net/engio/mbassy/common/ReflectionUtils.java)
- No exposed public API
- Off-boarding risk: anonymized user #1
- Scanner failed to run — not a clean result
- Test reliability not included
New (44)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no installation or build instructions (README.md)
- Duplicated block (13 lines × 2) (src/main/java/net/engio/mbassy/bus/MBassador.java)
- Duplicated block (8 lines × 2) (src/main/java/net/engio/mbassy/common/ReflectionUtils.java)
- Duplicated block (8 lines × 2) (src/main/java/net/engio/mbassy/common/StrongConcurrentSet.java)
- No SBOM
- No assertions: testAbstractMessageListener (src/test/java/net/engio/mbassy/SubscriptionManagerTest.java)
- No assertions: testAnonymousListener (src/test/java/net/engio/mbassy/MetadataReaderTest.java)
- No assertions: testAsynchronousMessagePublication (src/test/java/net/engio/mbassy/SyncAsyncTest.java)
- No assertions: testClassEnablesDisabledInterfaceHandler (src/test/java/net/engio/mbassy/MetadataReaderTest.java)
- No assertions: testContainsAll (src/test/java/net/engio/mbassy/StrongConcurrentSetTest.java)
- No assertions: testDisabledHandlerFromInterface (src/test/java/net/engio/mbassy/MetadataReaderTest.java)
- No assertions: testEmptyBusConfiguration (src/test/java/net/engio/mbassy/BusConstructionTest.java)
- No assertions: testEnveloped (src/test/java/net/engio/mbassy/MetadataReaderTest.java)
- No assertions: testEnvelopedFromInterface (src/test/java/net/engio/mbassy/MetadataReaderTest.java)
- No assertions: testEnvelopedSubclass (src/test/java/net/engio/mbassy/MetadataReaderTest.java)
- No assertions: testHandlerPriorities (src/test/java/net/engio/mbassy/SyncBusTest.java)
- No assertions: testICountableListener (src/test/java/net/engio/mbassy/SubscriptionManagerTest.java)
- No assertions: testIMessageListener (src/test/java/net/engio/mbassy/SubscriptionManagerTest.java)
- No assertions: testIMultipartMessageListener (src/test/java/net/engio/mbassy/SubscriptionManagerTest.java)
- …and 24 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
bennidi/mbassador was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 22 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit bbe428ffe42ee06a104b3b349a78c8fd309bd420 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-b84573e22831.