# 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