On 05/10/2018 13:17, Rafael Winterhalter wrote:
:

However, for Java agents, there is still no good way to define auxiliary classes. There is an open ticket on https://bugs.openjdk.java.net/browse/JDK-8201784 and I have described my concerns with the suggested API in the linked discussion as being insufficient for many use cases. I still hope that a defineClass method can be added to the Instrumentation interface; I would not know of any other good use case that currently makes use of the internal Unsafe version but agents.

As of today, Unsafe::defineClass is however still a crucial element for many Java agents that are widely used in the enterprise space, e.g. for APM tools, security monitoring or metrics extraction. Not offering an alternative would lock out these tools and stop a large fraction of Java users from updating their production environments until a new workaround is found. I hope that you consider an API for Java agents to define classes as a blocker issue to be solved prior to removing Unsafe::defineClass alltogether.

There was a lengthy thread about this topic on serviceability-dev earlier this year. As I'm sure you will remember, Mandy did propose additions to the Instrumentation API to support defining of auxiliary classes in the same runtime package as the instrumented class. The nice thing about that proposal is that extended the Instrumentation API in a way that is aligned with original purpose of this API. As I think we explained several times, the Instrumentation API is to support tools doing benign instrumentation. The Instrumentation API was never intended to support some of the scenarios that you brought up in the discussion. Yes, we understand that you are trying to support some "interesting" use-case, esp. around mocking, but many of these scenario that are way outside the scope of this API. We do need to get back to that discussion but it's important to set expectations at the same time.

-Alan

Reply via email to