Class JspRuntimeContext
java.lang.Object
org.apache.jasper.compiler.JspRuntimeContext
- All Implemented Interfaces:
Runnable
Class for tracking JSP compile time file dependencies when the
invalid input: '&'060;%@include file="..."%invalid input: '&'062; directive is used.
A background thread periodically checks the files a JSP page
is dependent upon. If a dpendent file changes the JSP page
which included it is recompiled.
Only used if a web application context is a directory.
- Version:
- $Revision: 1.13 $
-
Field Summary
FieldsModifier and TypeFieldDescriptionMaps class names to in-memory bytecodesprivate Stringprivate CodeSourceprivate javax.servlet.ServletContextThis web applications ServletContextprivate AtomicIntegerprivate Map<String, JspServletWrapper> Maps JSP pages to their JspServletWrapper'sprivate static Loggerprivate Optionsprivate Map<String, Map<String, JavaFileObject>> Maps classes in packages compiled by the JSP compiler.private PermissionCollectionprivate ThreadThe background thread.private booleanThe background thread completion semaphore.private StringName to register for the background thread. -
Constructor Summary
ConstructorsConstructorDescriptionJspRuntimeContext(javax.servlet.ServletContext context, Options options) Create a JspRuntimeContext for a web application context. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddWrapper(String jspUri, JspServletWrapper jsw) Add a new JspServletWrapper.voidadjustBytecodeTime(String name, long reference) private voidMethod used by background thread to check the JSP dependencies registered with this class for JSP's.voiddestroy()Process a "destory" event for this web application context.byte[]getBytecode(String name) Retrieve the bytecode associated with the classlonggetBytecodeBirthTime(String name) Retrieve the time the bytecode for a class was createdGet the class-name to bytecode mapThe classpath that is passed off to the Java compiler.Get the SecurityManager Policy CodeSource for this web applicaiton context.intReturns the number of JSPs for which JspServletWrappers exist, i.e., the number of JSPs that have been loaded into the webapp.intGets the current value of the JSP reload counter.Map<String, Map<String, JavaFileObject>> The packageMap keeps track of the bytecode files in a package generated by a java compiler.Get the parent class loader.Get the SecurityManager PermissionCollection for this web application context.getWrapper(String jspUri) Get an already existing JspServletWrapper.voidIncrements the JSP reload counter.private voidMethod used to initialize classpath for compiles.private voidMethod used to initialize SecurityManager data.voidremoveWrapper(String jspUri) Remove a JspServletWrapper.voidrun()The background thread that checks for changes to files included by a JSP and flags that a recompile is required.voidsaveBytecode(String className, String classFileName) Save the bytecode for a class to disk.voidsetBytecode(String name, byte[] bytecode) Save the bytecode for the class in a map.voidsetJspReloadCount(int count) Resets the JSP reload counter.protected voidSleep for the duration specified by thecheckIntervalproperty.protected voidStart the background thread that will periodically check for changes to compile time included files in a JSP.protected voidStop the background thread that is periodically checking for changes to compile time included files in a JSP.
-
Field Details
-
log
-
jspReloadCount
-
context
private javax.servlet.ServletContext contextThis web applications ServletContext -
options
-
permissionCollection
-
codeSource
-
classpath
-
jsps
Maps JSP pages to their JspServletWrapper's -
bytecodes
-
bytecodeBirthTimes
-
packageMap
Maps classes in packages compiled by the JSP compiler. Used only by Jsr199Compiler. -
thread
The background thread. -
threadDone
private boolean threadDoneThe background thread completion semaphore. -
threadName
Name to register for the background thread.
-
-
Constructor Details
-
JspRuntimeContext
Create a JspRuntimeContext for a web application context. Loads in any previously generated dependencies from file.- Parameters:
context- ServletContext for web application
-
-
Method Details
-
addWrapper
Add a new JspServletWrapper.- Parameters:
jspUri- JSP URIjsw- Servlet wrapper for JSP
-
getWrapper
Get an already existing JspServletWrapper.- Parameters:
jspUri- JSP URI- Returns:
- JspServletWrapper for JSP
-
removeWrapper
Remove a JspServletWrapper.- Parameters:
jspUri- JSP URI of JspServletWrapper to remove
-
getJspCount
public int getJspCount()Returns the number of JSPs for which JspServletWrappers exist, i.e., the number of JSPs that have been loaded into the webapp.- Returns:
- The number of JSPs that have been loaded into the webapp
-
getCodeSource
Get the SecurityManager Policy CodeSource for this web applicaiton context.- Returns:
- CodeSource for JSP
-
getParentClassLoader
-
getPermissionCollection
Get the SecurityManager PermissionCollection for this web application context.- Returns:
- PermissionCollection permissions
-
destroy
public void destroy()Process a "destory" event for this web application context. -
incrementJspReloadCount
public void incrementJspReloadCount()Increments the JSP reload counter. -
setJspReloadCount
public void setJspReloadCount(int count) Resets the JSP reload counter.- Parameters:
count- Value to which to reset the JSP reload counter
-
getJspReloadCount
public int getJspReloadCount()Gets the current value of the JSP reload counter.- Returns:
- The current value of the JSP reload counter
-
setBytecode
Save the bytecode for the class in a map. The current time is noted.- Parameters:
name- The name of the classbytecode- The bytecode in byte array
-
adjustBytecodeTime
-
getBytecodes
-
getBytecode
Retrieve the bytecode associated with the class -
getBytecodeBirthTime
Retrieve the time the bytecode for a class was created -
getPackageMap
The packageMap keeps track of the bytecode files in a package generated by a java compiler. This is in turn loaded by the java compiler during compilation. This is gets around the fact that JSR199 API does not provide a way for the compiler use current classloader. -
saveBytecode
-
checkCompile
private void checkCompile()Method used by background thread to check the JSP dependencies registered with this class for JSP's. -
getClassPath
The classpath that is passed off to the Java compiler. -
initClassPath
private void initClassPath()Method used to initialize classpath for compiles. -
initSecurity
private void initSecurity()Method used to initialize SecurityManager data. -
threadStart
protected void threadStart()Start the background thread that will periodically check for changes to compile time included files in a JSP.- Throws:
IllegalStateException- if we should not be starting a background thread now
-
threadStop
protected void threadStop()Stop the background thread that is periodically checking for changes to compile time included files in a JSP. -
threadSleep
protected void threadSleep()Sleep for the duration specified by thecheckIntervalproperty. -
run
-