]
Pete Muir updated WELD-592:
---------------------------
Fix Version/s: 1.1.0.Beta2
Support use of decorator of Callable<T>
---------------------------------------
Key: WELD-592
URL:
https://jira.jboss.org/browse/WELD-592
Project: Weld
Issue Type: Feature Request
Components: Java SE Support
Reporter: Elias Ross
Assignee: Peter Royle
Fix For: 1.1.0.Beta2
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: