Class KeyHolder
java.lang.Object
io.opentelemetry.javaagent.bootstrap.undertow.KeyHolder
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.
-
Field Summary
Fields -
Method Summary
-
Field Details
-
contextKeys
-