Skip to content

Services

Cross-cutting capabilities that processors inject via @ServiceRegistered. One thread, multi-reader by convention.

  • svc-jdbc

    Named JDBC connection registry backed by HikariCP. Per-entry pool sizing, validation query.

    service pooled

  • svc-cache

    In-memory + JSON-persistent caches. Optional LRU maxSize with eviction metric.

    service

  • svc-admin-telnet

    JLine-backed telnet admin. Loopback default. Tab-complete + history.

    service

  • svc-admin-rest

    Javalin REST admin. BASIC / BEARER auth. Optional SPA hosting.

    service

  • svc-admin-web

    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.

    service

  • svc-loader-yaml

    Hot-reload processors from YAML or Java source.

    service

  • svc-loader-spring

    Hot-reload processors from Spring XML.

    service

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).