java.lang.Object
io.opentelemetry.javaagent.bootstrap.undertow.KeyHolder

public final class KeyHolder extends Object
Undertow's io.undertow.server.HttpServerExchange uses io.undertow.util.AttachmentKey as a key for storing arbitrary data. It uses IdentityHashMap and thus all keys are compared for equality by object reference. This means that we cannot hold an instance of io.undertow.util.AttachmentKey in a static field of the corresponding Tracer, as we usually do. Tracers are loaded into user's classloaders and thus it is totally possible to have several instances of tracers. Each of those instances will have a separate value in a static field and io.undertow.server.HttpServerExchange will treat them as different keys then.

That is why this class exists and resides in a separate package. This package is treated in a special way and is always loaded by bootstrap class loader. This makes sure that this class is available to all tracers from every class loader.

But at the same time, being loaded by bootstrap class loader, this class itself cannot initiate the loading of io.undertow.util.AttachmentKey class. Class has to be loaded by any class loader that has it, e.g. by the class loader of a Tracer that uses this key holder. After that, all Tracers, loaded by all class loaders, will be able to use exactly the same sole instance of the key.