On 13/11/2015 17:48, Rafael Winterhalter wrote:
Hi Alan,
thanks for your quick answer. I am less worried about the generated code then I am about the generation process.

For example, a ClassFileTransformer might want to instrument all classes that implement a certain interface. For this, the transformer needs to parse the provided class file, extract the interfaces and locate their class files and so forth in order to resolve the type hierarchy. For this, it is now possible to query the ClassLoader which is an argument provided to the transformer. I do not know how I would access the module at this point or get hold of the class file.
I assume you know this but if you have the Instrumentation object then you can invoke getAllLoadedClasses and filter this to the set of classes that implement the interface. Then call retransformClasses with this set (as an array) and your ClassFileTransformer should be invoked with the Class<?> + class bytes for each of these classes. This puts the onus on the VM to reconstitute the class bytes, no need for you to attempt to locate the .class file (which may not exist of course). It also allows multiple agents to work together.


Also, I would expect that a Java agent that worked in Java 8 would also work in Java 9. If I had to use Java 9 APIs in order to patch my application, I would be required to offer two versions of my library, one for Java 9+ and one for Java 8-. That would be unfortunate.

Existing java agents that are instrumenting code on the class path should continue to work as before. These agents are oblivious to modules but in many cases will be able to instrument code in named modules too. The VM is providing some "readability for free" to keep existing instrumentation agents working. Beyond these cases then I expect agents will need to become module aware because they are instrumenting code in ways that interacts with modules and access checks. The current builds don't have these APIs yet. As to making use of newer APIs then it might add a bit of complexity to these agents or maybe to their how they are built.

-Alan

Reply via email to