TaskDecorator callback supported by common TaskExecutor implementations
Issue: SPR-13930
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
* Copyright 2002-2016 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -30,6 +30,7 @@ import javax.resource.spi.work.WorkRejectedException;
|
||||
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.core.task.AsyncListenableTaskExecutor;
|
||||
import org.springframework.core.task.TaskDecorator;
|
||||
import org.springframework.core.task.TaskRejectedException;
|
||||
import org.springframework.core.task.TaskTimeoutException;
|
||||
import org.springframework.jca.context.BootstrapContextAware;
|
||||
@@ -84,6 +85,8 @@ public class WorkManagerTaskExecutor extends JndiLocatorSupport
|
||||
|
||||
private WorkListener workListener;
|
||||
|
||||
private TaskDecorator taskDecorator;
|
||||
|
||||
|
||||
/**
|
||||
* Create a new WorkManagerTaskExecutor, expecting bean-style configuration.
|
||||
@@ -164,6 +167,20 @@ public class WorkManagerTaskExecutor extends JndiLocatorSupport
|
||||
this.workListener = workListener;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify a custom {@link TaskDecorator} to be applied to any {@link Runnable}
|
||||
* about to be executed.
|
||||
* <p>Note that such a decorator is not necessarily being applied to the
|
||||
* user-supplied {@code Runnable}/{@code Callable} but rather to the actual
|
||||
* execution callback (which may be a wrapper around the user-supplied task).
|
||||
* <p>The primary use case is to set some execution context around the task's
|
||||
* invocation, or to provide some monitoring/statistics for task execution.
|
||||
* @since 4.3
|
||||
*/
|
||||
public void setTaskDecorator(TaskDecorator taskDecorator) {
|
||||
this.taskDecorator = taskDecorator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws NamingException {
|
||||
if (this.workManager == null) {
|
||||
@@ -199,7 +216,7 @@ public class WorkManagerTaskExecutor extends JndiLocatorSupport
|
||||
@Override
|
||||
public void execute(Runnable task, long startTimeout) {
|
||||
Assert.state(this.workManager != null, "No WorkManager specified");
|
||||
Work work = new DelegatingWork(task);
|
||||
Work work = new DelegatingWork(this.taskDecorator != null ? this.taskDecorator.decorate(task) : task);
|
||||
try {
|
||||
if (this.blockUntilCompleted) {
|
||||
if (startTimeout != TIMEOUT_INDEFINITE || this.workListener != null) {
|
||||
|
||||
Reference in New Issue
Block a user