New in the 0.4.0-SNAPSHOT development line — everything listed here landed after the 0.3.0 release and is not part of it. Every entry links to the section that documents it, and those sections carry the NEW badge. Each brick of the suite keeps its own page of this kind; the ecosystem index gathers them. When the next release train ships, this page is frozen with it and restarts empty on the dev line.
MicroProfile Telemetry 2.2 and OpenTelemetry 1.66
-
MicroProfile Telemetry 2.2 — Humboldt implements Telemetry 2.2 and passes the official TCK 2.2-RC3, 85/85 across tracing, metrics and logs (humboldt#17). The 2.2 final TCK is not on Maven Central yet. TCK — current status.
-
OpenTelemetry 1.66.0 — the repackaged API and context move from 1.39 to 1.66.0,
opentelemetry-instrumentation-annotationsfrom 2.7.0 to 2.31.1, and the semantic conventions of the TCK harness from 1.27.0-alpha to 1.44.0. OpenTelemetry SDK, autoconfigure SPI or exporter jars you add next tohumboldt-otel-interopbelong to the 1.66 line. Compatibility, Upgrading from 0.3.0. -
code.function.nameon@WithSpanspans — every span the interceptor opens carries<binary class name>.<method>, which Telemetry 2.2 makes mandatory. Instrument a method with@WithSpan. -
@WithSpan(inheritContext = false)— the span starts a new trace withContext.root()as its parent, and the method runs in that root context: the caller’s context and baggage are not visible inside it. The default,inheritContext = true, is unchanged. Instrument a method with@WithSpan.
Logs and exceptions
-
Exceptions and event names on log records —
LogRecordBuilder.setException(Throwable)andsetEventName(String)used to be dropped silently (the API’s no-op defaults). The exception now givesexception.type,exception.messageandexception.stacktrace; the event name goes to the OTLPeventNamefield and theloggingexporter’s output. The JUL bridge passes a JUL record’s exception too. What a log record carries. -
Structured log bodies —
setBody(Value)keeps a map or an array as a structured OTLPAnyValue, where it used to be flattened into a JSON string.LogRecordDatagains thebodyValueandeventNamecomponents; the earlier constructors are kept. What a log record carries. -
An empty log body is kept —
setBody("")exports"body":{"stringValue":""}, as the OpenTelemetry SDK does, where it used to export no body. What a log record carries, Upgrading from 0.3.0. -
exception.typeis the canonical class name on spans too —Span.recordExceptionwritescom.acme.Outer.Nested, notcom.acme.Outer$Nested, like the new log-sidesetExceptionand the OpenTelemetry SDK; additional attributes passed torecordExceptionnow override the derived ones. A backend query on the binary name of a nested exception class needs updating. Exception attributes.
OTLP/JSON exporter
-
Double points and synchronous gauges — double counters, double up-down counters and double gauges used to be exported with an empty
dataPointsarray, and a synchronous gauge with no data at all; both are now encoded. OTLP/JSON encoding. -
Non-finite doubles —
NaNand infinities are written as the JSON strings"NaN","Infinity","-Infinity"instead of making the payload invalid. OTLP/JSON encoding. -
Complex attributes — a
Valueattribute (setAttribute(String, Value)) is encoded as a fullAnyValue, where it used to be exported as{}. OTLP/JSON encoding. -
A metric batch that cannot be encoded fails — a data point that does not match its metric used to vanish from the export. The batch now fails: nothing is sent, the exporter returns a failed result and logs the first such batch at
WARNING. OTLP/JSON encoding.
Java modules
-
OpenTelemetry SDK and exporter jars on the module path — the OTLP exporters failed on the module path with an
IllegalAccessErroror aServiceConfigurationError. The repackagedio.opentelemetry.apiandio.opentelemetry.contextnow export the internal packages the 1.66 stable jars use, qualified to exactly those modules;humboldt-otel-interopextends these exports to the layer of each OpenTelemetry provider it discovers, and the defaultComponentLoaderdeclares theusesof a service before loading it, so an exporter finds its sender and its compressor. One limit remains: whenhumboldt-otel-interopsits in a child layer of the two API modules, the exports cannot be extended; keep it in the same layer, as the Vidocq runtime does, or add--add-exportsby hand. Incubating (-alpha) artifacts still need--add-exports. Java modules — OpenTelemetry jars on the module path. -
humboldt-restreads Cyrano’s Rest Client API module — the descriptor now requiresio.vidocq.cyrano.mp.rest.client.api(statically) instead of the automatic modulemicroprofile.rest.client.api, which Vidocq never ships, so the Rest Client listener works on a strict module path and in a jlink image (humboldt#18). Java modules, Upgrading from 0.3.0.
Other CDI containers
-
humboldt-cdiandhumboldt-restare explicit bean archives — both now ship aMETA-INF/beans.xml(annotated) (humboldt#23). In 0.3.0 they were implicit archives, which Weld SE does not scan by default: there,@WithSpandid nothing, the telemetry producers were missing and the server filters were not registered, with no error. Bean archives. -
Proven on Weld and Open Liberty — two new test modules run the Humboldt jars, unchanged, without Vauban:
humboldt-it-weldon Weld SE 6.0 (class path),humboldt-it-openlibertyas a WAR on Open Liberty 26.0.0.10 (MicroProfile 7, CDI 4.0) with Liberty’s ownmpTelemetryoff. Neither is published (humboldt#23). Outside Vidocq, the application installs the SDK itself. Other CDI containers. -
vauban-apiis now a runtime dependency ofhumboldt-cdi— it wasprovided, so outside Vauban the telemetry producers, which carry a constructor takingio.vidocq.vauban.api.ProxyLink, could not be loaded, and the first injectedTracerorSpanfailed the deployment (BUG-20261010-01). The module descriptor nowrequires io.vidocq.vauban.api. Other CDI containers. -
The Jakarta APIs are
provided—humboldt-cdino longer shipsjakarta.enterprise.cdi-apiandjakarta.annotation-api,humboldt-restno longer shipsjakarta.ws.rs-apiandjakarta.annotation-api: the container brings them, so a WAR carries no second copy (vidocq-workspace#17). This is a behaviour change for an application that compiled against those APIs through Humboldt alone: it now declares them itself. The Vidocq runtime is not affected; its Telemetry extension brings Jakarta REST. Other CDI containers. -
Exceptions keep their status, and are recorded on every runtime —
HumboldtSpanFinalizerturned every exception escaping a resource into a 500, aNotFoundExceptionincluded, and failed outright on RESTEasy (Open Liberty, WildFly), where it could not get the request context. It now leaves a `WebApplicationException’s response alone, records other exceptions on the current SERVER span, and lets the response filter end the span (BUG-20261010-02). Other CDI containers.