Services¶
Cross-cutting capabilities that processors inject via @ServiceRegistered. One thread, multi-reader by convention.
-
Named JDBC connection registry backed by HikariCP. Per-entry pool sizing, validation query.
-
In-memory + JSON-persistent caches. Optional LRU
maxSizewith eviction metric. -
JLine-backed telnet admin. Loopback default. Tab-complete + history.
-
Javalin REST admin. BASIC / BEARER auth. Optional SPA hosting.
-
Browser admin + monitoring SPA. Dashboard with throttleable JVM stream, command terminal, log tail, dispatcher topology DAG, per-processor graphml viewer (filter / scaffold / selection cycle), reflective service config, conditional cache + loader panels.
-
Hot-reload processors from YAML or Java source.
-
Hot-reload processors from Spring XML.
How services are injected¶
Services declare their public API as an interface. Your processor injects with @ServiceRegistered:
public class MyHandler extends ObjectEventHandlerNode {
private Cache cache;
private JdbcConnectionLoader jdbc;
@ServiceRegistered
public void useCache(Cache cache, String name) {
this.cache = cache;
}
@ServiceRegistered
public void useJdbc(JdbcConnectionLoader jdbc, String name) {
this.jdbc = jdbc;
}
}
The name argument is the service's registered name in the server config; processors can use it to disambiguate when multiple instances of the same interface are wired (e.g. two JDBC connection registries).