Class JspRuntimeContext

java.lang.Object
org.apache.jasper.compiler.JspRuntimeContext
All Implemented Interfaces:
Runnable

public final class JspRuntimeContext extends Object implements 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 Details

    • log

      private static Logger log
    • jspReloadCount

      private AtomicInteger jspReloadCount
    • context

      private javax.servlet.ServletContext context
      This web applications ServletContext
    • options

      private Options options
    • permissionCollection

      private PermissionCollection permissionCollection
    • codeSource

      private CodeSource codeSource
    • classpath

      private String classpath
    • jsps

      private Map<String,JspServletWrapper> jsps
      Maps JSP pages to their JspServletWrapper's
    • bytecodes

      private Map<String,byte[]> bytecodes
      Maps class names to in-memory bytecodes
    • bytecodeBirthTimes

      private Map<String,Long> bytecodeBirthTimes
    • packageMap

      private Map<String,Map<String,JavaFileObject>> packageMap
      Maps classes in packages compiled by the JSP compiler. Used only by Jsr199Compiler.
    • thread

      private Thread thread
      The background thread.
    • threadDone

      private boolean threadDone
      The background thread completion semaphore.
    • threadName

      private String threadName
      Name to register for the background thread.
  • Constructor Details

    • JspRuntimeContext

      public JspRuntimeContext(javax.servlet.ServletContext context, Options options)
      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

      public void addWrapper(String jspUri, JspServletWrapper jsw)
      Add a new JspServletWrapper.
      Parameters:
      jspUri - JSP URI
      jsw - Servlet wrapper for JSP
    • getWrapper

      public JspServletWrapper getWrapper(String jspUri)
      Get an already existing JspServletWrapper.
      Parameters:
      jspUri - JSP URI
      Returns:
      JspServletWrapper for JSP
    • removeWrapper

      public void removeWrapper(String jspUri)
      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

      public CodeSource getCodeSource()
      Get the SecurityManager Policy CodeSource for this web applicaiton context.
      Returns:
      CodeSource for JSP
    • getParentClassLoader

      public ClassLoader getParentClassLoader()
      Get the parent class loader.
      Returns:
      ClassLoader parent
    • getPermissionCollection

      public PermissionCollection 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

      public void setBytecode(String name, byte[] bytecode)
      Save the bytecode for the class in a map. The current time is noted.
      Parameters:
      name - The name of the class
      bytecode - The bytecode in byte array
    • adjustBytecodeTime

      public void adjustBytecodeTime(String name, long reference)
    • getBytecodes

      public Map<String,byte[]> getBytecodes()
      Get the class-name to bytecode map
    • getBytecode

      public byte[] getBytecode(String name)
      Retrieve the bytecode associated with the class
    • getBytecodeBirthTime

      public long getBytecodeBirthTime(String name)
      Retrieve the time the bytecode for a class was created
    • getPackageMap

      public Map<String,Map<String,JavaFileObject>> 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

      public void saveBytecode(String className, String classFileName)
      Save the bytecode for a class to disk.
    • checkCompile

      private void checkCompile()
      Method used by background thread to check the JSP dependencies registered with this class for JSP's.
    • getClassPath

      public String 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 the checkInterval property.
    • run

      public void run()
      The background thread that checks for changes to files included by a JSP and flags that a recompile is required.
      Specified by:
      run in interface Runnable