costin      2003/01/10 22:53:43

  Added:       util/java/org/apache/tomcat/util/threads
                        ThreadWithAttributes.java
  Log:
  Moved ThreadWithAttribute out of ThreadPool.
  
  All attribute operations are guarded by ThreadPool - if an application
  has a reference to ThreadPool, it can get/set attributes.
  
  The cost is one cast and a method access.
  
  Revision  Changes    Path
  1.1                  
jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/threads/ThreadWithAttributes.java
  
  Index: ThreadWithAttributes.java
  ===================================================================
  package org.apache.tomcat.util.threads;
  
  import java.util.Hashtable;
  
  /** Special thread that allows storing of attributes and notes.
   *  A guard is used to prevent untrusted code from accessing the
   *  attributes.
   *
   *  This avoids hash lookups and provide something very similar
   * with ThreadLocal ( but compatible with JDK1.1 and faster on
   * JDK < 1.4 ).
   *
   * The main use is to store 'state' for monitoring ( like "processing
   * request 'GET /' ").
   */
  public class ThreadWithAttributes extends Thread {
      private Object control;
      public static int MAX_NOTES=16;
      private Object notes[]=new Object[MAX_NOTES];
      private Hashtable attributes=new Hashtable();
      private String currentStage;
      private Object param;
  
      public ThreadWithAttributes(Object control, Runnable r) {
          super(r);
          this.control=control;
      }
  
      /** Notes - for attributes that need fast access ( array )
       * The application is responsible for id management
       */
      public final void setNote( Object control, int id, Object value ) {
          if( this.control != control ) return;
          notes[id]=value;
      }
  
      /** Information about the curent performed operation
       */
      public final String getCurrentStage(Object control) {
          if( this.control != control ) return null;
          return currentStage;
      }
  
      /** Information about the current request ( or the main object
       * we are processing )
       */
      public final Object getParam(Object control) {
          if( this.control != control ) return null;
          return param;
      }
  
      public final void setCurrentStage(Object control, String currentStage) {
          if( this.control != control ) return;
          this.currentStage = currentStage;
      }
  
      public final void setParam( Object control, Object param ) {
          if( this.control != control ) return;
          this.param=param;
      }
  
      public final Object getNote(Object control, int id ) {
          if( this.control != control ) return null;
          return notes[id];
      }
  
      /** Generic attributes. You'll need a hashtable lookup -
       * you can use notes for array access.
       */
      public final Hashtable getAttributes(Object control) {
          return attributes;
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to