Enum Class LocalContextScope
- All Implemented Interfaces:
Serializable
,Comparable<LocalContextScope>
,Constable
LocalContext
.
A single ScriptingContainer
can be configured to act as a facade for multiple Ruby
runtimes
(or really multiple Ruby VMs, since each Ruby
instance is a Ruby "VM"), and this enum controls
that behaviour. (this behaviour is bit like that of ThreadLocal
— it changes its behaviour
silently depending on the calling thread, an act of multiplexing.)
When you think of this multiplexing behaviour, there are two sets of states that need separate attention.
One is Ruby
instance, which represents the whole VM, classes, global variables, etc. Then
there's attributes and so-called
variables, which are really a special scope induced by the
scripting container for better JSR-223 interop.
In this documentation, we refer to the former as "the runtime" and the latter as "the variables",
but the variables shouldn't be confused with the global variables in Ruby's semantics, which belongs
to the runtime.
- Author:
- Yoko Harada <[email protected]>, Kohsuke Kawaguchi
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class java.lang.Enum
Enum.EnumDesc<E extends Enum<E>>
-
Enum Constant Summary
Enum ConstantsEnum ConstantDescriptionUse a single runtime but variable maps are thread local.ScriptingContainer
will not do any multiplexing at all.Uses a "global" singleton runtime and variables.Maintain separate runtimes and variable maps for each calling thread. -
Method Summary
Modifier and TypeMethodDescriptionstatic LocalContextScope
Returns the enum constant of this class with the specified name.static LocalContextScope[]
values()
Returns an array containing the constants of this enum class, in the order they are declared.
-
Enum Constant Details
-
SINGLETON
Uses a "global" singleton runtime and variables. All theScriptingContainer
s that are created with this scope will share a single runtime and a single set of variables. Therefore one container canset a value
and another container will see the same value. The global runtime comes fromRuby.getGlobalRuntime()
, which initializes or retrieves a Ruby instance in a static field onRuby
. All singleton context scopes will reuse this instance. When any singleton-based scripting container is torn down (ScriptingContainer.terminate()
), the global runtime will also be torn down and cleared. Subsequent singleton containers will see a new runtime. Note that unlike the other modes, containers created with singleton context scoping will not tear down the associated JRuby runtime upon finalization. -
SINGLETHREAD
ScriptingContainer
will not do any multiplexing at all.ScriptingContainer
will get one runtime and one set of variables, and regardless of the calling thread it'll use this same pair.If you have multiple threads calling single
ScriptingContainer
instance, then you may need to take caution as a variable set by one thread will be visible to another thread.If you aren't using the variables of
ScriptingContainer
, this is normally what you want. -
THREADSAFE
Maintain separate runtimes and variable maps for each calling thread.Known as the "apartment thread model", this mode makes
ScriptingContainer
lazily creates a runtime and a variable map separately for each calling thread. Therefore, despite the fact that multiple threads call on the same object, they are completely isolated from each other. (the flip side of the coin is that no ruby objects can be shared between threads as they belong to different "ruby VM".) -
CONCURRENT
Use a single runtime but variable maps are thread local.In this mode, there'll be a single runtime dedicated for each
ScriptingContainer
, but a separate map of variables are created for each calling thread throughThreadLocal
. In a situation where you have multiple threads calling oneScriptingContainer
, this means ruby code will see multiple threads calling them, and therefore they need to be thread safe. But because variables are thread local, if your program does something like (1) set a few variables, (2) evaluate a script that refers to those variables, then you won't have to worry about values from multiple threads mixing with each other.
-
-
Method Details
-
values
Returns an array containing the constants of this enum class, in the order they are declared.- Returns:
- an array containing the constants of this enum class, in the order they are declared
-
valueOf
Returns the enum constant of this class with the specified name. The string must match exactly an identifier used to declare an enum constant in this class. (Extraneous whitespace characters are not permitted.)- Parameters:
name
- the name of the enum constant to be returned.- Returns:
- the enum constant with the specified name
- Throws:
IllegalArgumentException
- if this enum class has no constant with the specified nameNullPointerException
- if the argument is null
-