# 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`
  Modifier and Type
  Interface
  Description
  `static final class`
  `ExecutionControl.ClassBytecodes`
  Bundles class name with class bytecodes.
  `static class`
  `ExecutionControl.ClassInstallException`
  A class install (load or redefine) encountered a problem.
  `static class`
  `ExecutionControl.EngineTerminationException`
  Unbidden execution engine termination has occurred.
  `static class`
  `ExecutionControl.ExecutionControlException`
  The abstract base of all `ExecutionControl` exceptions.
  `static class`
  `ExecutionControl.InternalException`
  An internal problem has occurred.
  `static class`
  `ExecutionControl.NotImplementedException`
  The command is not implemented.
  `static class`
  `ExecutionControl.ResolutionException`
  An exception indicating that a `DeclarationSnippet` with unresolved references has been encountered.
  `static class`
  `ExecutionControl.RunException`
  The abstract base of of exceptions specific to running user code.
  `static class`
  `ExecutionControl.StoppedException`
  An exception indicating that an `ExecutionControl.invoke(java.lang.String, java.lang.String)` (or theoretically a `ExecutionControl.varValue(java.lang.String, java.lang.String)`) has been interrupted by a `ExecutionControl.stop()`.
  `static class`
  `ExecutionControl.UserException`
  A 'normal' user exception occurred.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `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`
  Modifier and Type
  Method
  Description
  `void`
  `redefine(ExecutionControl.ClassBytecodes[] cbcs)`
  Redefine the specified classes.
  `protected ReferenceType`
  `referenceType(VirtualMachine vm, String name)`
  Returns the JDI `ReferenceType` corresponding to the specified class name.

  ### Methods declared in class StreamingExecutionControl

  `addToClasspath, close, extensionCommand, load, varValue`
  Modifier and Type
  Method
  Description
  `void`
  `addToClasspath(String path)`
  Adds the path to the execution class path.
  `void`
  `close()`
  Closes the execution engine.
  `Object`
  `extensionCommand(String command, Object arg)`
  Run a non-standard command (or a standard command from a newer version).
  `void`
  `load(ExecutionControl.ClassBytecodes[] cbcs)`
  Attempts to load new classes.
  `String`
  `varValue(String classname, String varname)`
  Returns the value of a variable.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `String`
  `toString()`
  Returns a string representation of the object.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

- ## 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

  - ### 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