RFR: 8275259: Add support for Java level DCmd [v2]

Thomas Stuefe stuefe at openjdk.java.net
Mon Oct 25 07:21:02 UTC 2021


On Fri, 15 Oct 2021 10:58:29 GMT, Denghui Dong <ddong at openjdk.org> wrote:

>> I proposed to extend DCmd to allow Java developers to customize their own diagnostic commands last week.
>> 
>> At present, I have implemented a preliminary version.
>> 
>> In the current implementation, I provided some simple APIs in the Java layer (under sun.management.cmd) for defining and registering commands.
>> 
>> - Executable interface
>>   Java diagnostic commands need to implement this interface, the interface only contains a simple method:
>> 
>>     /**
>>      * @param output the output when this executable is running
>>      */
>>     void execute(PrintWriter output);
>> 
>> 
>> - Add two annotations (@Command and @Parameter) to describe the command meta info
>> 
>> - Use Factory API to register command, the following forms are supported
>> 
>> @Command(name = "My.Echo", description = "Echo description")
>> class Echo implements Executable {
>> 
>>     @Parameter(name = "text", ordinal=0, isMandatory = true)
>>     String text;
>> 
>>     @Parameter(name = "repeat", isMandatory = true, defaultValue = "1")
>>     int repeat;
>> 
>>     @Override
>>     public void execute(PrintWriter out) {
>>         for (int i = 0 ; i < repeat; i++) {
>>             out.println(text);
>>         }
>>     }
>> }
>> 
>> Factory.register(Echo.class);
>> 
>> 
>> 
>> Factory.register("My.Date", output -> {
>>     output.println(new Date());
>> });
>> 
>> 
>> - When the command is running, the VM will call `Executor.executeCommand` to execute the command. In the implementation of Executor, I introduced a simple timeout mechanism to prevent the command channel from being blocked.
>> 
>> At the VM layer, I extended the existing DCmd framework(implemented JavaDCmd and JavaDCmdFactoryImpl) to be compatible with existing functions (jmx, help, etc.).
>> 
>> In terms of security, considering that the SecurityManager will be deprecated, there are not too many considerations for the time being.
>> 
>> Any input is appreciated.
>> 
>> Thanks,
>> Denghui
>
> Denghui Dong has updated the pull request incrementally with one additional commit since the last revision:
> 
>   print argument key if not found

Hi Denghui,

as I wrote before, I am neutral on this. But I agree with @egahlin that this seems to be more on JEP level. A PR is not the right first step for this, and I am afraid you won't build much consensus here. Maybe discuss this first on the serviceability ML? Or on hotspot-dev?

Kind Regards, Thomas

-------------

PR: https://git.openjdk.java.net/jdk/pull/5938


More information about the serviceability-dev mailing list