[weld-issues] [JBoss JIRA] Created: (WELDX-74) Support use of decorator of Callable<T>

Elias Ross (JIRA) jira-events at lists.jboss.org
Fri Jan 29 17:21:25 EST 2010


Support use of decorator of Callable<T>
---------------------------------------

                 Key: WELDX-74
                 URL: https://jira.jboss.org/jira/browse/WELDX-74
             Project: Weld Extensions
          Issue Type: Feature Request
          Components: Java SE
            Reporter: Elias Ross


Decorator exists for Runnable. Should allow for Callable<T> to be used as well.

This is actually pretty useful, for example if you want to execute under a temporary new scope in the same thread, e.g.

@Inject Instance<PaymentProcessor> paymentProcessorSource; // which implements Callable<Result>
Result result = paymentProcessorSource.get().call();

Or, in the case of a thread pool, you can use Future<T> etc.

/**
 * Decorator for all beans which implements Callable. It intercepts the call
 * to the call() method to set up the ThreadContext for the new thread so that
 * instances of @ThreadScoped beans can be correctly resolved.
 */
@Decorator
public class CallableDecorator<T> implements Callable<T> {

   @Inject @Delegate Callable<T> callable;

   /**
    * Set up the ThreadContet and delegate.
    */
   public T call()
   {
      // set up context for this thread
      final ThreadContext threadContext = WeldSEBeanRegistrant.THREAD_CONTEXT;
      threadContext.setBeanStore(new HashMapBeanStore());
      threadContext.setActive(true);
      // run the original thread
     try {
        return callable.call();
    } finally {
      threadContext.destroy();
   }

}


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the weld-issues mailing list