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