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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]