Hi Alan,

On Fri, Mar 14, 2025 at 12:23 PM Alan Bateman <alan.bate...@oracle.com> wrote:
> In this case, the initial module is a named module that doesn't transitively 
> require java.instrument so that module is not in the boot layer. If they 
> server was started with -javaagent then the java.instrument would be in the 
> boot layer.  In JEP 261 the recommendation for container apps, like this one, 
> is to run with --add-module ALL-DEFAULT and it will ensure that any module in 
> the run-time that exports an API will be in the boot layer.

Thanks, trying ALL-DEFAULT, in conjunction with ALL-MODULE-PATH.

> A comment in passing is that it's surprising that there are modules in ee$N 
> layers requiring java.instrument. The classes in this modules aren't normally 
> used by libraries and applications, instead they work as the side channel for 
> agents.

With some archeology, I found:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=347110 :)

TLDR: Spring had (has?) a mechanism to instrument loaded class, I
assume for dependency injection.
The Spring agent requires custom class loaders to have an
`addTransformer(ClassFileTransformer)` method, hence the dependency of
Jetty's WebAppClassLoader to java.instrument.

Thanks!
-- 
Simone Bordet
---
Finally, no matter how good the architecture and design are,
to deliver bug-free software with optimal performance and reliability,
the implementation technique must be flawless.   Victoria Livschitz

Reply via email to