001
014
015 package com.liferay.portal.kernel.backgroundtask;
016
017 import com.liferay.portal.model.BackgroundTask;
018
019
022 public class ClassLoaderAwareBackgroundTaskExecutor
023 extends DelegatingBackgroundTaskExecutor {
024
025 public ClassLoaderAwareBackgroundTaskExecutor(
026 BackgroundTaskExecutor backgroundTaskExecutor,
027 ClassLoader classLoader) {
028
029 super(backgroundTaskExecutor);
030
031 _classLoader = classLoader;
032 }
033
034 @Override
035 public BackgroundTaskResult execute(BackgroundTask backgroundTask)
036 throws Exception {
037
038 Thread currentThread = Thread.currentThread();
039
040 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
041
042 if (_classLoader != contextClassLoader) {
043 currentThread.setContextClassLoader(_classLoader);
044 }
045
046 try {
047 BackgroundTaskExecutor backgroundTaskExecutor =
048 getBackgroundTaskExecutor();
049
050 return backgroundTaskExecutor.execute(backgroundTask);
051 }
052 finally {
053 if (_classLoader != contextClassLoader) {
054 currentThread.setContextClassLoader(contextClassLoader);
055 }
056 }
057 }
058
059 private ClassLoader _classLoader;
060
061 }