15 RFR(XS): 8165276: Spec states that invoke the premain method in an agent class if it's public but implementation differs

serguei.spitsyn at oracle.com serguei.spitsyn at oracle.com
Wed Jun 24 19:26:22 UTC 2020


On 6/24/20 05:25, David Holmes wrote:
> On 24/06/2020 8:14 pm, Alan Bateman wrote:
>> On 24/06/2020 10:57, David Holmes wrote:
>>>
>>> But you are ignoring my next statement. If we remove the 
>>> setAccessible(true) then the premain method will not be accessible 
>>> as Serguei reported.
>>>
>>> Exception in thread "main" java.lang.IllegalAccessException: class 
>>> sun.instrument.InstrumentationImpl
>>>   (in module java.instrument) cannot access a member of class 
>>> SimpleAgent with modifiers "public static"
>>>
>>> I feel we are talking past each other on this issue with regards to 
>>> the IllegalAcessError that comes from the module system.
>> This is nothing to do with the module system. If you drop the 
>> setAccessible(true) from JDK 6 or JDK 8 then you'll also get 
>> IllegalAccessException when the member is not accessible.
>
> Ah! The test class SimpleAgent is what is not public. That seems a bug 
> in the test.

There are many such tests.
We can break some of the existing agents by rejecting non-public agent 
classes.
I'm inclined to continue using the setAccessible and just add an extra 
check for non-public premain/agentmain methods.

Thanks,
Serguei

> Sorry for the confusion.
>
> David
> -----
>
>> I think the main thing that needs to be agreed here is whether to fix 
>> the bug or change the spec. My view is that fixing the bug should be 
>> low risk because (a) I've never seen an agent with a non-public 
>> premain method, and (b) Agents typically have to update or release 
>> frequently because of updates to the class file version. So yes, it 
>> would be a behavioral compatibility issue taht requires CSR approval 
>> and requires follow-up release notes to document the change.
>>
>> -Alan



More information about the serviceability-dev mailing list