# Package jdk.jshell.spi

package jdk.jshell.spi
Defines the Service Provider Interface for pluggable JShell execution engines. The JShell core tracks and compiles Snippets then sends them (represented in a wrapper class) to the execution engine for loading, and in the case of executable Snippets, execution. The JShell implementation includes a default execution engine (currently a remote process which is JDI controlled). By implementing the `ExecutionControl` interface and its generating class, an implementation of the `ExecutionControlProvider` interface, and installing it with `JShell.Builder.executionEngine(String)` other execution engines can be used. Where the passed String is an `ExecutionControl` spec.

The `ExecutionControl` spec is the `ExecutionControlProvider` name optionally followed by a parameter specification. The syntax of the spec is:

    spec   := name : params
           | name
    name   := identifier
    params := param , params
           | param
           |
    param  := identifier ( value )

Where 'name' is the `ExecutionControlProvider` name. Where 'param' is a Map key from `ExecutionControlProvider.defaultParameters()` and the parenthesized value; See, for example, `JdiExecutionControlProvider`. Where 'identifier' is a sequence of Java identifier part characters from the Basic Multilingual Plane.

For example:

- local
- jdi:hostname(localhost)
- failover:1(jdi),2(jdi:launch(true),timeout(3000)),3(local)

Since:
  9
See Also:
  - for execution implementation support

Related Packages
Package
Description
jdk.jshell
Provides interfaces for creating tools, such as a Read-Eval-Print Loop (REPL), which interactively evaluate "snippets" of Java programming language code.
jdk.jshell.execution
Provides implementation support for building JShell execution engines.
jdk.jshell.tool
Provides a mechanism to launch an instance of a Java shell tool.
Class
Description
ExecutionControl
This interface specifies the functionality that must provided to implement a pluggable JShell execution engine.
ExecutionControl.ClassBytecodes
Bundles class name with class bytecodes.
ExecutionControl.ClassInstallException
A class install (load or redefine) encountered a problem.
ExecutionControl.EngineTerminationException
Unbidden execution engine termination has occurred.
ExecutionControl.ExecutionControlException
The abstract base of all `ExecutionControl` exceptions.
ExecutionControl.InternalException
An internal problem has occurred.
ExecutionControl.NotImplementedException
The command is not implemented.
ExecutionControl.ResolutionException
An exception indicating that a `DeclarationSnippet` with unresolved references has been encountered.
ExecutionControl.RunException
The abstract base of of exceptions specific to running user code.
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()`.
ExecutionControl.UserException
A 'normal' user exception occurred.
ExecutionControlProvider
The provider used by JShell to generate the execution engine needed to evaluate Snippets.
ExecutionEnv
Functionality made available to a pluggable JShell execution engine.
SPIResolutionException
The construction and throw of this exception is embedded in code generated by the JShell core implementation in such a way that, upon executing a `RECOVERABLE_DEFINED` user method, this exception is thrown.