# Class RemoteExecutionControl

java.lang.Object
jdk.jshell.execution.DirectExecutionControl
jdk.jshell.execution.RemoteExecutionControl

All Implemented Interfaces:
  `AutoCloseable, ExecutionControl`

public class RemoteExecutionControl extends DirectExecutionControl implements ExecutionControl
The remote agent runs in the execution process (separate from the main JShell process). This agent loads code over a socket from the main JShell process, executes the code, and other misc, Specialization of `DirectExecutionControl` which adds stop support controlled by an external process. Designed to work with `JdiDefaultExecutionControl`.

Since:
  9

## Nested Class Summary

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

## Constructor Summary

Constructors
Constructor
Description
`RemoteExecutionControl()`
Create an instance using the default class loading.
`RemoteExecutionControl(LoaderDelegate loaderDelegate)`
Creates an instance, delegating loader operations to the specified delegate.

## Method Summary

Modifier and Type
Method
Description
`protected void`
`clientCodeEnter()`
Marks entry into user code.
`static void`
`main(String[] args)`
Launch the agent, connecting to the JShell-core over the socket specified in the command-line argument.
`void`
`redefine(ExecutionControl.ClassBytecodes[] cbcs)`
Redefine processing on the remote end is only to register the redefined classes
`void`
`stop()`
Interrupts a running invoke.
`String`
`varValue(String className, String varName)`
Returns the value of a variable.

### Methods declared in class DirectExecutionControl

`addToClasspath, classesRedefined, clientCodeLeave, close, extensionCommand, findClass, invoke, invoke, load, stop, throwConvertedInvocationException, throwConvertedOtherException, valueString`

### Methods declared in class Object

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

### Methods declared in interface ExecutionControl

`addToClasspath, close, extensionCommand, invoke, load`

## Constructor Details

### RemoteExecutionControl

public RemoteExecutionControl(LoaderDelegate loaderDelegate)
Creates an instance, delegating loader operations to the specified delegate.

Parameters:
  `loaderDelegate` - the delegate to handle loading classes

### RemoteExecutionControl

public RemoteExecutionControl()
Create an instance using the default class loading.

## Method Details

### main

public static void main(String[] args) throws Exception
Launch the agent, connecting to the JShell-core over the socket specified in the command-line argument.

Parameters:
  `args` - standard command-line arguments, expectation is the socket number is the only argument
Throws:
  `Exception` - any unexpected exception

### redefine

public void redefine(ExecutionControl.ClassBytecodes[] cbcs) throws ExecutionControl.ClassInstallException, ExecutionControl.NotImplementedException, ExecutionControl.EngineTerminationException
Redefine processing on the remote end is only to register the redefined classes

Specified by:
  `redefine` in interface `ExecutionControl`
Parameters:
  `cbcs` - the class name and bytecodes to redefine
Throws:
  `ExecutionControl.ClassInstallException` - exception occurred redefining the classes, some or all were not redefined
  `ExecutionControl.NotImplementedException` - if not implemented
  `ExecutionControl.EngineTerminationException` - the execution engine has terminated

### stop

public void stop() throws ExecutionControl.EngineTerminationException, ExecutionControl.InternalException
Description copied from class: `DirectExecutionControl`
Interrupts a running invoke.

Not supported.

Specified by:
  `stop` in interface `ExecutionControl`
Overrides:
  `stop` in class `DirectExecutionControl`
Throws:
  `ExecutionControl.EngineTerminationException` - the execution engine has terminated
  `ExecutionControl.InternalException` - an internal problem occurred

### varValue

public String varValue(String className, String varName) throws ExecutionControl.RunException, ExecutionControl.EngineTerminationException, ExecutionControl.InternalException
Description copied from interface: `ExecutionControl`
Returns the value of a variable.

Specified by:
  `varValue` in interface `ExecutionControl`
Overrides:
  `varValue` in class `DirectExecutionControl`
Parameters:
  `className` - the name of the wrapper class of the variable
  `varName` - the name of the variable
Returns:
  the value of the variable
Throws:
  `ExecutionControl.UserException` - formatting the value raised a user exception
  `ExecutionControl.ResolutionException` - formatting the value attempted to directly or indirectly invoke an unresolved snippet
  `ExecutionControl.StoppedException` - if the formatting the value was canceled by `ExecutionControl.stop()`
  `ExecutionControl.EngineTerminationException` - the execution engine has terminated
  `ExecutionControl.InternalException` - an internal problem occurred
  `ExecutionControl.RunException`

### clientCodeEnter

protected void clientCodeEnter()
Description copied from class: `DirectExecutionControl`
Marks entry into user code.

Overrides:
  `clientCodeEnter` in class `DirectExecutionControl`