001
014
015 package com.liferay.portal.kernel.backgroundtask;
016
017 import java.io.Serializable;
018
019 import java.util.Map;
020
021
024 public class ThreadLocalAwareBackgroundTaskExecutor
025 extends DelegatingBackgroundTaskExecutor {
026
027 public ThreadLocalAwareBackgroundTaskExecutor(
028 BackgroundTaskExecutor backgroundTaskExecutor,
029 BackgroundTaskThreadLocalManager backgroundTaskThreadLocalManager) {
030
031 super(backgroundTaskExecutor);
032
033 _backgroundTaskThreadLocalManager = backgroundTaskThreadLocalManager;
034 }
035
036 @Override
037 public BackgroundTaskExecutor clone() {
038 BackgroundTaskExecutor backgroundTaskExecutor =
039 new ThreadLocalAwareBackgroundTaskExecutor(
040 getBackgroundTaskExecutor(), _backgroundTaskThreadLocalManager);
041
042 return backgroundTaskExecutor;
043 }
044
045 @Override
046 public BackgroundTaskResult execute(BackgroundTask backgroundTask)
047 throws Exception {
048
049 Map<String, Serializable> threadLocalValues =
050 _backgroundTaskThreadLocalManager.getThreadLocalValues();
051
052 try {
053 _backgroundTaskThreadLocalManager.deserializeThreadLocals(
054 backgroundTask.getTaskContextMap());
055
056 return super.execute(backgroundTask);
057 }
058 finally {
059 _backgroundTaskThreadLocalManager.setThreadLocalValues(
060 threadLocalValues);
061 }
062 }
063
064 private final BackgroundTaskThreadLocalManager
065 _backgroundTaskThreadLocalManager;
066
067 }