001
014
015 package com.liferay.portal.kernel.backgroundtask;
016
017 import aQute.bnd.annotation.ProviderType;
018
019 import com.liferay.portal.kernel.lock.Lock;
020 import com.liferay.portal.kernel.lock.LockManagerUtil;
021 import com.liferay.portal.kernel.util.StringPool;
022
023
026 @ProviderType
027 public class BackgroundTaskLockHelperUtil {
028
029 public static boolean isLockedBackgroundTask(
030 BackgroundTask backgroundTask) {
031
032 return LockManagerUtil.isLocked(
033 BackgroundTaskExecutor.class.getName(), getLockKey(backgroundTask));
034 }
035
036 public static Lock lockBackgroundTask(BackgroundTask backgroundTask) {
037 String owner =
038 backgroundTask.getName() + StringPool.POUND +
039 backgroundTask.getBackgroundTaskId();
040
041 return LockManagerUtil.lock(
042 BackgroundTaskExecutor.class.getName(), getLockKey(backgroundTask),
043 owner);
044 }
045
046 public static void unlockBackgroundTask(BackgroundTask backgroundTask) {
047 String owner =
048 backgroundTask.getName() + StringPool.POUND +
049 backgroundTask.getBackgroundTaskId();
050
051 LockManagerUtil.unlock(
052 BackgroundTaskExecutor.class.getName(), getLockKey(backgroundTask),
053 owner);
054 }
055
056 protected static String getLockKey(BackgroundTask backgroundTask) {
057 BackgroundTaskExecutor backgroundTaskExecutor =
058 BackgroundTaskExecutorRegistryUtil.getBackgroundTaskExecutor(
059 backgroundTask.getTaskExecutorClassName());
060
061 String lockKey = StringPool.BLANK;
062
063 if (backgroundTaskExecutor.getIsolationLevel() ==
064 BackgroundTaskConstants.ISOLATION_LEVEL_CLASS) {
065
066 lockKey = backgroundTask.getTaskExecutorClassName();
067 }
068 else if (backgroundTaskExecutor.getIsolationLevel() ==
069 BackgroundTaskConstants.ISOLATION_LEVEL_COMPANY) {
070
071 lockKey =
072 backgroundTask.getTaskExecutorClassName() +
073 StringPool.POUND + backgroundTask.getCompanyId();
074 }
075 else if (backgroundTaskExecutor.getIsolationLevel() ==
076 BackgroundTaskConstants.ISOLATION_LEVEL_GROUP) {
077
078 lockKey =
079 backgroundTask.getTaskExecutorClassName() +
080 StringPool.POUND + backgroundTask.getGroupId();
081 }
082 else if (backgroundTaskExecutor.getIsolationLevel() ==
083 BackgroundTaskConstants.ISOLATION_LEVEL_TASK_NAME) {
084
085 lockKey =
086 backgroundTask.getTaskExecutorClassName() +
087 StringPool.POUND + backgroundTask.getName();
088 }
089 else {
090 lockKey =
091 backgroundTask.getTaskExecutorClassName() +
092 StringPool.POUND +
093 backgroundTaskExecutor.getIsolationLevel();
094 }
095
096 return lockKey;
097 }
098
099 }