Интерфейс ExecutionControl
- Все суперинтерфейсы:
AutoCloseable
- Все известные реализующие классы:
-
DirectExecutionControl,JdiDefaultExecutionControl,JdiExecutionControl,LocalExecutionControl,RemoteExecutionControl,StreamingExecutionControl
public interface ExecutionControl extends AutoCloseable
Целевой аудиторией для этого интерфейса поставщика услуг являются инженеры, желающие реализовать собственную версию движка выполнения в поддержку API JShell.
Сниппет компилируется в код, заключенный в 'оберточный класс'. Движок выполнения используется ядром JShell для загрузки и, для исполняемых сниппетов, выполнения сниппета.
Методы, определенные в этом интерфейсе, должны вызываться только ядром JShell.
- С:
- 9
Краткое описание вложенных классов
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static final class |
ExecutionControl.ClassBytecodes |
Объединяет имя класса с байт-кодом класса. |
static class |
ExecutionControl.ClassInstallException |
Произошла проблема при установке (загрузке или переопределении) класса. |
static class |
ExecutionControl.EngineTerminationException |
Произошло преждевременное завершение работы движка выполнения. |
static class |
ExecutionControl.ExecutionControlException |
Абстрактный базовый класс всех исключений ExecutionControl. |
static class |
ExecutionControl.InternalException |
Произошла внутренняя проблема. |
static class |
ExecutionControl.NotImplementedException |
Команда не реализована. |
static class |
ExecutionControl.ResolutionException |
Исключение, указывающее на то, что DeclarationSnippet с неразрешенными ссылками было обнаружено. |
static class |
ExecutionControl.RunException |
Абстрактный базовый класс исключений, специфичных для запуска кода пользователя. |
static class |
ExecutionControl.StoppedException |
Исключение, указывающее на то, что invoke(java.lang.String, java.lang.String) (или теоретически varValue(java.lang.String, java.lang.String)) было прервано stop(). |
static class |
ExecutionControl.UserException |
Произошло обычное исключение пользователя. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
addToClasspath |
Добавляет путь в путь класса выполнения. |
void |
close() |
Завершает работу этого движка выполнения. |
Object |
extensionCommand |
Выполняет нестандартную команду (или стандартную команду из более новой версии). |
static ExecutionControl |
generate |
Ищет провайдера, затем создает и возвращает экземпляр ExecutionControl. |
static ExecutionControl |
generate |
Ищет провайдера, затем создает и возвращает экземпляр ExecutionControl. |
String |
invoke |
Вызывает исполняемый сниппет, вызывая метод в указанном оберточном классе. |
void |
load |
Попытка загрузить новые классы. |
void |
redefine |
Попытка переопределить ранее загруженные классы. |
void |
stop() |
Прерывает текущий вызов. |
String |
varValue |
Возвращает значение переменной. |
Подробности методов
load
void load(ExecutionControl.ClassBytecodes[] cbcs) throws ExecutionControl.ClassInstallException, ExecutionControl.NotImplementedException, ExecutionControl.EngineTerminationException
- Параметры:
-
cbcs- имя класса и байткоды для загрузки - Исключение:
-
ExecutionControl.ClassInstallException- исключение, возникшее при загрузке классов, некоторые или все не были загружены -
ExecutionControl.NotImplementedException- если не реализовано -
ExecutionControl.EngineTerminationException- движок выполнения завершил работу
redefine
void redefine(ExecutionControl.ClassBytecodes[] cbcs) throws ExecutionControl.ClassInstallException, ExecutionControl.NotImplementedException, ExecutionControl.EngineTerminationException
- Параметры:
-
cbcs- имя класса и байткоды для переопределения - Исключение:
-
ExecutionControl.ClassInstallException- исключение, возникшее при переопределении классов, некоторые или все не были переопределены -
ExecutionControl.NotImplementedException- если не реализовано -
ExecutionControl.EngineTerminationException- движок выполнения завершил работу
invoke
String invoke(String className, String methodName) throws ExecutionControl.RunException, ExecutionControl.EngineTerminationException, ExecutionControl.InternalException
- Параметры:
-
className- класс, метод которого должен быть вызван -
methodName- имя вызываемого метода - Возвращает:
- результат выполнения или null, если результат отсутствует
- Исключение:
-
ExecutionControl.UserException- вызов вызвал исключение пользователя -
ExecutionControl.ResolutionException- вызов пытался напрямую или косвенно вызвать неразрешённый фрагмент кода -
ExecutionControl.StoppedException- если вызов был отменён методомstop() -
ExecutionControl.EngineTerminationException- движок выполнения завершил работу -
ExecutionControl.InternalException- произошла внутренняя проблема ExecutionControl.RunException
varValue
String varValue(String className, String varName) throws ExecutionControl.RunException, ExecutionControl.EngineTerminationException, ExecutionControl.InternalException
- Параметры:
-
className- имя класса-обёртки переменной -
varName- имя переменной - Возвращает:
- значение переменной
- Исключение:
-
ExecutionControl.UserException- форматирование значения вызвало исключение пользователя -
ExecutionControl.ResolutionException- форматирование значения пыталось напрямую или косвенно вызвать неразрешённый фрагмент кода -
ExecutionControl.StoppedException- если форматирование значения было отменено вызовомstop() -
ExecutionControl.EngineTerminationException- движок выполнения завершил работу -
ExecutionControl.InternalException- произошла внутренняя проблема ExecutionControl.RunException
addToClasspath
void addToClasspath(String path) throws ExecutionControl.EngineTerminationException, ExecutionControl.InternalException
- Параметры:
-
path- путь для добавления - Исключение:
-
ExecutionControl.EngineTerminationException- движок выполнения завершил работу -
ExecutionControl.InternalException- произошла внутренняя проблема
stop
void stop() throws ExecutionControl.EngineTerminationException, ExecutionControl.InternalException
- Исключение:
-
ExecutionControl.EngineTerminationException- движок выполнения завершил работу -
ExecutionControl.InternalException- произошла внутренняя проблема
extensionCommand
Object extensionCommand(String command, Object arg) throws ExecutionControl.RunException, ExecutionControl.EngineTerminationException, ExecutionControl.InternalException
- Параметры:
-
command- нестандартная команда -
arg- аргумент команды - Возвращает:
- значение возврата команды
- Исключение:
-
ExecutionControl.UserException- команда вызвала исключение пользователя -
ExecutionControl.ResolutionException- команда пыталась напрямую или косвенно вызвать неразрешённый фрагмент кода -
ExecutionControl.StoppedException- если команда была отменена вызовомstop() -
ExecutionControl.EngineTerminationException- движок выполнения завершил работу -
ExecutionControl.NotImplementedException- если не реализовано -
ExecutionControl.InternalException- произошла внутренняя проблема ExecutionControl.RunException
close
void close()
После вызова close не следует обращаться к методам этого интерфейса.
- Определено в:
-
closeв интерфейсеAutoCloseable
generate
static ExecutionControl generate(ExecutionEnv env, String name, Map<String,String> parameters) throws Throwable
ExecutionControl.- Параметры:
-
env- среда выполнения (предоставлена JShell) -
name- имя провайдера -
parameters- карта параметров. - Возвращает:
- движок выполнения
- Исключение:
-
Throwable- исключение, возникшее при попытке найти или создать движок выполнения. -
IllegalArgumentException- если ни один ExecutionControlProvider не имеет указанногоnameиparameters.
generate
static ExecutionControl generate(ExecutionEnv env, String spec) throws Throwable
ExecutionControl.- Параметры:
-
env- среда выполнения (предоставлена JShell) -
spec- спецификацияExecutionControl, которая описана в документации этого пакета. - Возвращает:
- движок выполнения
- Исключение:
-
Throwable- исключение, возникшее при попытке найти или создать движок выполнения. -
IllegalArgumentException- если ни один ExecutionControlProvider не имеет указанногоnameиparameters. -
IllegalArgumentException- еслиspecимеет неправильный формат
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/jdk.jshell/jdk/jshell/spi/ExecutionControl.html