## org.mozilla.javascript.commonjs.module.provider
Class SoftCachingModuleScriptProvider

    java.lang.Object
      org.mozilla.javascript.commonjs.module.provider.CachingModuleScriptProviderBase
          org.mozilla.javascript.commonjs.module.provider.SoftCachingModuleScriptProvider

All Implemented Interfaces:
  java.io.Serializable, ModuleScriptProvider

    public class SoftCachingModuleScriptProvider

extends CachingModuleScriptProviderBase

A module script provider that uses a module source provider to load modules and caches the loaded modules. It softly references the loaded modules' Rhino `Script` objects, thus a module once loaded can become eligible for garbage collection if it is otherwise unused under memory pressure. Instances of this class are thread safe.

Version:
  $Id: SoftCachingModuleScriptProvider.java,v 1.3 2011/04/07 20:26:12 hannes%helma.at Exp $
Author:
  Attila Szegedi
See Also:
  Serialized Form

Nested Class Summary

Nested classes/interfaces inherited from class org.mozilla.javascript.commonjs.module.provider.CachingModuleScriptProviderBase
`CachingModuleScriptProviderBase.CachedModuleScript`

Constructor Summary
`SoftCachingModuleScriptProvider(ModuleSourceProvider moduleSourceProvider)` Creates a new module provider with the specified module source provider.

Method Summary
`protected CachingModuleScriptProviderBase.CachedModuleScript` `getLoadedModule(java.lang.String moduleId)` Retrieves an already loaded moduleScript stored using `CachingModuleScriptProviderBase.putLoadedModule(String, ModuleScript, Object)`.
`ModuleScript` `getModuleScript(Context cx, java.lang.String moduleId, java.net.URI uri, Scriptable paths)` Returns a module script.
`protected void` `putLoadedModule(java.lang.String moduleId, ModuleScript moduleScript, java.lang.Object validator)` Store a loaded module script for later retrieval using `CachingModuleScriptProviderBase.getLoadedModule(String)`.

Methods inherited from class org.mozilla.javascript.commonjs.module.provider.CachingModuleScriptProviderBase
`getConcurrencyLevel`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### SoftCachingModuleScriptProvider

    public SoftCachingModuleScriptProvider(ModuleSourceProvider moduleSourceProvider)

  Creates a new module provider with the specified module source provider.

  Parameters:
    `moduleSourceProvider` - provider for modules' source code

Method Detail

### getModuleScript

    public ModuleScript getModuleScript(Context cx,
                                        java.lang.String moduleId,
                                        java.net.URI uri,
                                        Scriptable paths)
                                 throws java.lang.Exception

  Description copied from interface: `ModuleScriptProvider`
  Returns a module script. It should attempt to load the module script if it is not already available to it, or return an already loaded module script instance if it is available to it.

  Specified by:
    `getModuleScript` in interface `ModuleScriptProvider`
  Overrides:
    `getModuleScript` in class `CachingModuleScriptProviderBase`
  Parameters:
    `cx` - current context. Can be used to compile module scripts.
    `moduleId` - the ID of the module. An implementation must only accept an absolute ID, starting with a term.
    `uri` - the URI of the module. If this is not null, resolution of `moduleId` is bypassed and the script is directly loaded from `moduleUri`
    `paths` - the value of the require() function's "paths" attribute. If the require() function is sandboxed, it will be null, otherwise it will be a JavaScript Array object. It is up to the provider implementation whether and how it wants to honor the contents of the array.
  Returns:
    a module script representing the compiled code of the module. Null should be returned if the script could not found.
  Throws:
    `java.lang.Exception` - if there was an unrecoverable problem obtaining the script
    `java.lang.IllegalArgumentException` - if the module ID is syntactically not a valid absolute module identifier.

### getLoadedModule

    protected CachingModuleScriptProviderBase.CachedModuleScript getLoadedModule(java.lang.String moduleId)

  Description copied from class: `CachingModuleScriptProviderBase`
  Retrieves an already loaded moduleScript stored using `CachingModuleScriptProviderBase.putLoadedModule(String, ModuleScript, Object)`.

  Specified by:
    `getLoadedModule` in class `CachingModuleScriptProviderBase`
  Parameters:
    `moduleId` - the ID of the module
  Returns:
    a cached module script, or null if the module is not loaded.

### putLoadedModule

    protected void putLoadedModule(java.lang.String moduleId,
                                   ModuleScript moduleScript,
                                   java.lang.Object validator)

  Description copied from class: `CachingModuleScriptProviderBase`
  Store a loaded module script for later retrieval using `CachingModuleScriptProviderBase.getLoadedModule(String)`.

  Specified by:
    `putLoadedModule` in class `CachingModuleScriptProviderBase`
  Parameters:
    `moduleId` - the ID of the module
    `moduleScript` - the module script
    `validator` - the validator for the module's source text entity