Apache Geode CHANGELOG

Executing gfsh Commands through the Management API

You can also use management APIs to execute gfsh commands programmatically.

Note: If you start the JMX Manager programmatically and wish to enable command processing, you must also add the absolute path of gfsh-dependencies.jar (located in $GEMFIRE/lib of your Geode installation) to the CLASSPATH of your application. Do not copy this library to your CLASSPATH because this library refers to other dependencies in $GEMFIRE/lib by a relative path. The following code samples demonstrate how to process and execute gfsh commands using the Java API.

First, retrieve a CommandService instance.

Note: The CommandService API is currently only available on JMX Manager nodes.

// Get existing CommandService instance or create new if it doesn't exist
commandService = CommandService.createLocalCommandService(cache);

// OR simply get CommandService instance if it exists, don't create new one
CommandService commandService = CommandService.getUsableLocalCommandService();

Next, process the command and its output:

// Process the user specified command String
Result regionListResult = commandService.processCommand("list regions");

// Iterate through Command Result in String form line by line
while (regionListResult.hasNextLine()) {
   System.out.println(regionListResult.nextLine());
}

Alternatively, instead of processing the command, you can create a CommandStatement Object from the command string which can be re-used.

// Create a command statement that can be reused multiple times
CommandStatement showDeadLocksCmdStmt = commandService.createCommandStatement
    ("show dead-locks --file=deadlock-info.txt");
Result showDeadlocksResult = showDeadLocksCmdStmt.process();

// If there is a file as a part of Command Result, it can be saved 
// to a specified directory
if (showDeadlocksResult.hasIncomingFiles()) {
    showDeadlocksResult.saveIncomingFiles(System.getProperty("user.dir") + 
                  "/commandresults");
}