You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2004/11/23 00:58:21 UTC

cvs commit: jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl Worker.java WorkerMonitor.java

taylor      2004/11/22 15:58:21

  Modified:    portal/src/java/org/apache/jetspeed/aggregator/impl
                        Worker.java WorkerMonitor.java
  Log:
  patch from Randy Watler
  run render threads as privileged actions under the current portal subject
  
  Revision  Changes    Path
  1.4       +50 -6     jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/Worker.java
  
  Index: Worker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/Worker.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Worker.java	8 Mar 2004 00:22:00 -0000	1.3
  +++ Worker.java	22 Nov 2004 23:58:21 -0000	1.4
  @@ -16,6 +16,11 @@
   
   package org.apache.jetspeed.aggregator.impl;
   
  +import java.security.AccessControlContext;
  +import java.security.PrivilegedAction;
  +
  +import javax.security.auth.Subject;
  +
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   
  @@ -42,6 +47,9 @@
       /** Job to process */
       private Runnable job = null;
   
  +    /** Context to process job within */
  +    private AccessControlContext context = null;
  +
       /** Monitor for this Worker */
       private WorkerMonitor monitor = null;
   
  @@ -94,11 +102,21 @@
       }
   
       /**
  +     * Sets the job to execute in security context
  +     */
  +    public void setJob(Runnable job, AccessControlContext context)
  +    {
  +        this.job = job;
  +        this.context = context;
  +    }
  +
  +    /**
        * Sets the job to execute
        */
       public void setJob(Runnable job)
       {
           this.job = job;
  +        this.context = null;
       }
   
       /**
  @@ -136,14 +154,40 @@
               // process it
               if (this.job != null)
               {
  -                try
  +                log.debug("Processing job for window :" + ((RenderingJob)job).getWindow().getId());
  +                Subject subject = null;
  +                if (this.context != null)
  +                {
  +                    subject = Subject.getSubject(this.context);
  +                }
  +                if (subject != null)
                   {
  -                    log.debug("Processing job for window :" + ((RenderingJob)job).getWindow().getId());
  -                    this.job.run();
  +                    Subject.doAsPrivileged(subject, new PrivilegedAction()
  +                        {
  +                            public Object run()
  +                            {
  +                                try 
  +                                {
  +                                    Worker.this.job.run();
  +                                }
  +                                catch (Throwable t)
  +                                {                        
  +                                    log.error("Thread error", t);
  +                                }
  +                                return null;                    
  +                            }
  +                        }, this.context);
                   }
  -                catch (Throwable t)
  +                else
                   {
  -                    log.error("Thread error", t);
  +                    try
  +                    {
  +                        this.job.run();
  +                    }
  +                    catch (Throwable t)
  +                    {
  +                        log.error("Thread error", t);
  +                    }
                   }
               }
   
  
  
  
  1.4       +10 -4     jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitor.java
  
  Index: WorkerMonitor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitor.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- WorkerMonitor.java	8 Mar 2004 00:22:00 -0000	1.3
  +++ WorkerMonitor.java	22 Nov 2004 23:58:21 -0000	1.4
  @@ -16,6 +16,8 @@
   
   package org.apache.jetspeed.aggregator.impl;
   
  +import java.security.AccessControlContext;
  +import java.security.AccessController;
   import java.util.Stack;
   
   import org.apache.commons.logging.Log;
  @@ -134,9 +136,11 @@
       {
           Worker worker = this.getWorker();
   
  +        AccessControlContext context = AccessController.getContext();
           if (worker==null)
           {
               queue.push(job);
  +            queue.push(context);
           }
           else
           {
  @@ -144,7 +148,7 @@
               {
                   synchronized (worker)
                   {
  -                    worker.setJob(job);
  +                    worker.setJob(job, context);
                       worker.notify();
                   }
               }
  @@ -169,7 +173,9 @@
           {
               if ((worker.getJobCount()<this.maxJobsPerWorker)&&(queue.size()>0))
               {
  -                worker.setJob((RenderingJob)queue.pop());
  +                RenderingJob job = (RenderingJob)queue.pop();
  +                AccessControlContext context = (AccessControlContext)queue.pop();
  +                worker.setJob(job, context);
                   return;
               }
               else
  @@ -184,4 +190,4 @@
               this.workers.push(worker);
           }
       }
  -}
  \ No newline at end of file
  +}
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org