# 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