# Interface: com.pnfsoftware.jeb.core.IEnginesPlugin

Interface for standard JEB engines plugin. Engines plugins run within an engines context \(JEB back\-end\). They can register for events and act on those events. They are meant to perform background tasks to enhance an analysis context. Engines plugins, unlike unit plugins, should not be designed to identify and process input artifacts. 

 Engines plugins may be written as: 
 
- compiled plugins: they are Jar archives dropped in the JEB plugins folder 
- script plugins: they are written in Java or Python and dropped in the scripts sub\-directory of the JEB plugins folder. Script plugins are reloaded by JEB when a change is detected. However, the `load()` method is not called again when a script plugin changed and was reloaded. \(`load` methods are called when JEB is starting up and loading plugins Therefore, while developing script plugins, you may have to consider calling `load` from within `execute`.\) 

 

 Life\-cycle: engines plugins are instantiated once. 

 Engines plugins are retrievable via [IEnginesContext#getEnginesPlugins()](IEnginesContext#getEnginesPlugins()). 

 In the GUI client, engines plugins may be executed via the *File* menu, command *Plugins*, *Execute an Engines Plugin*.

## Method: execute
- parameter: `engctx`, type: `com.pnfsoftware.jeb.core.IEnginesContext`

Description: Same as [execute\(context, null\)](#execute(IEnginesContext, Map)).
parameter: engctx: the context in which this plugin executes \(never null\)

## Method: execute
- parameter: `engctx`, type: `com.pnfsoftware.jeb.core.IEnginesContext`
- parameter: `executionOptions`, type: `java.util.Map<java.lang.String,java.lang.String>`

Description: Execute the plugin code within a given engines context. Plugin writers should consider this as the execution entry\-point. 

 This method is optional and serves to execute on\-demand calls, usually triggered by a client via the software front\-end. Plugins may decide to start their workload in [#load(IEnginesContext)](#load(IEnginesContext)).
parameter: engctx: the context in which this plugin executes \(never null\)
parameter: executionOptions: optional execution options provided by the caller; the list of            options that could be provided is specified by            [#getExecutionOptionDefinitions(IEnginesContext)](#getExecutionOptionDefinitions(IEnginesContext))

## Method: getExecutionOptionDefinitions
- parameter: `engctx`, type: `com.pnfsoftware.jeb.core.IEnginesContext`
- return type: `java.util.List<? extends com.pnfsoftware.jeb.core.IOptionDefinition>`

Description: Retrieve a list of option definitions.
parameter: engctx: the context in which this plugin executes \(never null\)
return: optional list of option definitions

## Method: getExecutionOptionDefinitions
- return type: `java.util.List<? extends com.pnfsoftware.jeb.core.IOptionDefinition>`

Description: Retrieve a list of option definitions. Starting from JEB 4.31, this method must not be implemented. Instead, implementors must implement [#getExecutionOptionDefinitions(IEnginesContext)](#getExecutionOptionDefinitions(IEnginesContext)).
return: optional list of option definitions

## Method: load
- parameter: `engctx`, type: `com.pnfsoftware.jeb.core.IEnginesContext`

Description: This method is called by the owner [context](IEnginesContext) exactly once, just after the plugin instantiation.
parameter: engctx: the context in which this plugin executes \(never null\)

