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