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

java.lang.Object
  extended by org.mozilla.javascript.commonjs.module.provider.CachingModuleScriptProviderBase
      extended by 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, java.net.URI base, 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,
                                    java.net.URI base,
                                    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
base - the module path base URI from which moduleUri was derived.
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