# Class JdiDefaultExecutionControl

java.lang.Object
jdk.jshell.execution.StreamingExecutionControl
jdk.jshell.execution.JdiExecutionControl
jdk.jshell.execution.JdiDefaultExecutionControl

All Implemented Interfaces:
  `AutoCloseable, ExecutionControl`

public class JdiDefaultExecutionControl extends JdiExecutionControl
The implementation of `ExecutionControl` that the JShell-core uses by default. Launches a remote process -- the "remote agent". Interfaces to the remote agent over a socket and via JDI. Designed to work with `RemoteExecutionControl`.

Since:
  9

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static interface`
`JdiDefaultExecutionControl.JdiStarter`
Start an external process where the user's snippets can be run.

### Nested classes/interfaces declared in interface ExecutionControl

`ExecutionControl.ClassBytecodes, ExecutionControl.ClassInstallException, ExecutionControl.EngineTerminationException, ExecutionControl.ExecutionControlException, ExecutionControl.InternalException, ExecutionControl.NotImplementedException, ExecutionControl.ResolutionException, ExecutionControl.RunException, ExecutionControl.StoppedException, ExecutionControl.UserException`

## Method Summary

Modifier and Type
Method
Description
`void`
`close()`
Closes the execution engine.
`String`
`invoke(String classname, String methodname)`
Invokes an executable Snippet by calling a method on the specified wrapper class.
`void`
`stop()`
Interrupts a running remote invoke by manipulating remote variables and sending a stop via JDI.
`protected VirtualMachine`
`vm()`
Returns the JDI `VirtualMachine` instance.

### Methods declared in class JdiExecutionControl

`redefine, referenceType`

### Methods declared in class StreamingExecutionControl

`addToClasspath, close, extensionCommand, load, varValue`

### Methods declared in class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods declared in interface ExecutionControl

`addToClasspath, extensionCommand, load, varValue`

## Method Details

### invoke

public String invoke(String classname, String methodname) throws ExecutionControl.RunException, ExecutionControl.EngineTerminationException, ExecutionControl.InternalException
Description copied from interface: `ExecutionControl`
Invokes an executable Snippet by calling a method on the specified wrapper class. The method must have no arguments and return String.

Specified by:
  `invoke` in interface `ExecutionControl`
Overrides:
  `invoke` in class `StreamingExecutionControl`
Parameters:
  `classname` - the class whose method should be invoked
  `methodname` - the name of method to invoke
Returns:
  the result of the execution or null if no result
Throws:
  `ExecutionControl.UserException` - the invoke raised a user exception
  `ExecutionControl.ResolutionException` - the invoke attempted to directly or indirectly invoke an unresolved snippet
  `ExecutionControl.StoppedException` - if the `invoke()` was canceled by `ExecutionControl.stop()`
  `ExecutionControl.EngineTerminationException` - the execution engine has terminated
  `ExecutionControl.InternalException` - an internal problem occurred
  `ExecutionControl.RunException`

### stop

public void stop() throws ExecutionControl.EngineTerminationException, ExecutionControl.InternalException
Interrupts a running remote invoke by manipulating remote variables and sending a stop via JDI.

Throws:
  `ExecutionControl.EngineTerminationException` - the execution engine has terminated
  `ExecutionControl.InternalException` - an internal problem occurred

### close

public void close()
Description copied from class: `StreamingExecutionControl`
Closes the execution engine. Send an exit command to the remote agent.

Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in interface `ExecutionControl`
Overrides:
  `close` in class `StreamingExecutionControl`

### vm

protected VirtualMachine vm() throws ExecutionControl.EngineTerminationException
Description copied from class: `JdiExecutionControl`
Returns the JDI `VirtualMachine` instance.

Specified by:
  `vm` in class `JdiExecutionControl`
Returns:
  the virtual machine
Throws:
  `ExecutionControl.EngineTerminationException` - if the VM is dead/disconnected