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

Denghui Dong ddong at openjdk.java.net
Fri Oct 15 10:58:29 UTC 2021


> 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

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/5938/files
  - new: https://git.openjdk.java.net/jdk/pull/5938/files/770b6aef..1f085c26

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=5938&range=01
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=5938&range=00-01

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.java.net/jdk/pull/5938.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/5938/head:pull/5938

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


More information about the hotspot-runtime-dev mailing list