org.apache.shiro.concurrent
Class SubjectAwareExecutor

java.lang.Object
  extended by org.apache.shiro.concurrent.SubjectAwareExecutor
All Implemented Interfaces:
Executor
Direct Known Subclasses:
SubjectAwareExecutorService

public class SubjectAwareExecutor
extends Object
implements Executor

Executor implementation that will automatically first associate any argument Runnable instances with the currently available Subject and then dispatch the Subject-enabled runnable to an underlying delegate Executor instance.

This is a simplification for applications that want to execute code as the currently executing Subject on another thread, but don't want or need to call the Subject.associateWith(Runnable) method and dispatch to a Thread manually. This simplifies code and reduces Shiro dependencies across application source code.

Consider this code that could be repeated in many places across an application:

 Runnable applicationWork = //instantiate or acquire Runnable from somewhere
 Subject subject = SecurityUtils.getSubject();
 Runnable work = subject.associateWith(applicationWork);
 anExecutor.execute(work);
 
Instead, if the Executor instance used in application code is an instance of this class (which delegates to the target Executor that you want), all places in code like the above reduce to this:
 Runnable applicationWork = //instantiate or acquire Runnable from somewhere
 anExecutor.execute(work);
 
Notice there is no use of the Shiro API in the 2nd code block, encouraging the principle of loose coupling across your codebase.

Since:
1.0
See Also:
SubjectAwareExecutorService

Constructor Summary
SubjectAwareExecutor()
           
SubjectAwareExecutor(Executor targetExecutor)
           
 
Method Summary
protected  Runnable associateWithSubject(Runnable r)
          Utility method for subclasses to associate the argument Runnable with the currently executing subject and then return the associated Runnable.
 void execute(Runnable command)
          Executes the specified runnable by first associating it with the currently executing Subject and then dispatches the associated Runnable to the underlying target Executor instance.
protected  Subject getSubject()
          Returns the currently Subject instance that should be associated with Runnable or Callable instances before being dispatched to the target Executor instance.
 Executor getTargetExecutor()
          Returns the target Executor instance that will actually execute the subject-associated Runnable instances.
 void setTargetExecutor(Executor targetExecutor)
          Sets target Executor instance that will actually execute the subject-associated Runnable instances.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SubjectAwareExecutor

public SubjectAwareExecutor()

SubjectAwareExecutor

public SubjectAwareExecutor(Executor targetExecutor)
Method Detail

getTargetExecutor

public Executor getTargetExecutor()
Returns the target Executor instance that will actually execute the subject-associated Runnable instances.

Returns:
target Executor instance that will actually execute the subject-associated Runnable instances.

setTargetExecutor

public void setTargetExecutor(Executor targetExecutor)
Sets target Executor instance that will actually execute the subject-associated Runnable instances.

Parameters:
targetExecutor - the target Executor instance that will actually execute the subject-associated Runnable instances.

getSubject

protected Subject getSubject()
Returns the currently Subject instance that should be associated with Runnable or Callable instances before being dispatched to the target Executor instance. This implementation merely defaults to returning SecurityUtils.getSubject().

Returns:
the currently Subject instance that should be associated with Runnable or Callable instances before being dispatched to the target Executor instance.

associateWithSubject

protected Runnable associateWithSubject(Runnable r)
Utility method for subclasses to associate the argument Runnable with the currently executing subject and then return the associated Runnable. The default implementation merely defaults to
 Subject subject = getSubject();
 return subject.associateWith(r);
 

Parameters:
r - the argument runnable to be associated with the current subject
Returns:
the associated runnable instance reflecting the current subject

execute

public void execute(Runnable command)
Executes the specified runnable by first associating it with the currently executing Subject and then dispatches the associated Runnable to the underlying target Executor instance.

Specified by:
execute in interface Executor
Parameters:
command - the runnable to associate with the currently executing subject and then to execute via the target Executor instance.


Copyright © 2004-2012 The Apache Software Foundation. All Rights Reserved.