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

java.lang.Object
  extended by org.mozilla.javascript.commonjs.module.provider.CachingModuleScriptProviderBase
All Implemented Interfaces:
java.io.Serializable, ModuleScriptProvider
Direct Known Subclasses:
SoftCachingModuleScriptProvider, StrongCachingModuleScriptProvider

public abstract class CachingModuleScriptProviderBase
extends java.lang.Object
implements ModuleScriptProvider, java.io.Serializable

Abstract base class that implements caching of loaded module scripts. It uses a ModuleSourceProvider to obtain the source text of the scripts. It supports a cache revalidation mechanism based on validator objects returned from the ModuleSourceProvider. Instances of this class and its subclasses are thread safe (and written to perform decently under concurrent access).

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

Nested Class Summary
static class CachingModuleScriptProviderBase.CachedModuleScript
          Instances of this class represent a loaded and cached module script.
 
Constructor Summary
protected CachingModuleScriptProviderBase(ModuleSourceProvider moduleSourceProvider)
          Creates a new module script provider with the specified source.
 
Method Summary
protected static int getConcurrencyLevel()
          Returns the internal concurrency level utilized by caches in this JVM.
protected abstract  CachingModuleScriptProviderBase.CachedModuleScript getLoadedModule(java.lang.String moduleId)
          Retrieves an already loaded moduleScript stored using putLoadedModule(String, ModuleScript, Object).
 ModuleScript getModuleScript(Context cx, java.lang.String moduleId, java.net.URI moduleUri, java.net.URI baseUri, Scriptable paths)
          Returns a module script.
protected abstract  void putLoadedModule(java.lang.String moduleId, ModuleScript moduleScript, java.lang.Object validator)
          Store a loaded module script for later retrieval using getLoadedModule(String).
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CachingModuleScriptProviderBase

protected CachingModuleScriptProviderBase(ModuleSourceProvider moduleSourceProvider)
Creates a new module script provider with the specified source.

Parameters:
moduleSourceProvider - provider for modules' source code
Method Detail

getModuleScript

public ModuleScript getModuleScript(Context cx,
                                    java.lang.String moduleId,
                                    java.net.URI moduleUri,
                                    java.net.URI baseUri,
                                    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
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.
moduleUri - the URI of the module. If this is not null, resolution of moduleId is bypassed and the script is directly loaded from moduleUri
baseUri - 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.

putLoadedModule

protected abstract void putLoadedModule(java.lang.String moduleId,
                                        ModuleScript moduleScript,
                                        java.lang.Object validator)
Store a loaded module script for later retrieval using getLoadedModule(String).

Parameters:
moduleId - the ID of the module
moduleScript - the module script
validator - the validator for the module's source text entity

getLoadedModule

protected abstract CachingModuleScriptProviderBase.CachedModuleScript getLoadedModule(java.lang.String moduleId)
Retrieves an already loaded moduleScript stored using putLoadedModule(String, ModuleScript, Object).

Parameters:
moduleId - the ID of the module
Returns:
a cached module script, or null if the module is not loaded.

getConcurrencyLevel

protected static int getConcurrencyLevel()
Returns the internal concurrency level utilized by caches in this JVM.

Returns:
the internal concurrency level utilized by caches in this JVM.