Liferay 7中使用了setSerial(boolean serial)方法

时间:2019-02-13 10:24:45

标签: liferay liferay-7

我正在研究从Liferay 6.2到Liferay 7.1的代码迁移项目。在Liferay 6.2中,有一个类 BaseBackgroundTaskExecutor ,其中包含方法 setSerial(boolean serial)。但是,在Liferay 7.1中,该方法不见了,我找不到任何替代方法。

这里的人是否对我的问题或Liferay总体上很熟悉,可以为我提供一些指导?

问候, 迈克尔

1 个答案:

答案 0 :(得分:4)

比较两个分支(6.2.x7.1.x),看起来它已被setIsolationLevel(int)取代。接口的方法isSerial()仍然存在,但是其实现已更改:

@Override
public boolean isSerial() {
    if (_isolationLevel == BackgroundTaskConstants.ISOLATION_LEVEL_NOT_ISOLATED) {
        return false;
    }
    return true;
}

您可以直接致电setIsolationLevel(BackgroundTaskConstants.ISOLATION_LEVEL_NOT_ISOLATED)而不是setSerial(false)。由于ISOLATION_LEVEL_NOT_ISOLATED的值为4,因此,除4以外的任何值都会使isSerial()返回true。 或者,如果您确实愿意,也可以覆盖isSerial()方法,并使其返回truefalse

但是,您应该看看BackgroundTaskLockHelperUtil implementation。特别是方法getLockKey(BackgroundTask)

protected static String getLockKey(BackgroundTask backgroundTask) {
    BackgroundTaskExecutor backgroundTaskExecutor =
        BackgroundTaskExecutorRegistryUtil.getBackgroundTaskExecutor(
            backgroundTask.getTaskExecutorClassName());

    String lockKey = StringPool.BLANK;

    if (backgroundTaskExecutor.getIsolationLevel() ==
            BackgroundTaskConstants.ISOLATION_LEVEL_CLASS) {

        lockKey = backgroundTask.getTaskExecutorClassName();
    }
    else if (backgroundTaskExecutor.getIsolationLevel() ==
                BackgroundTaskConstants.ISOLATION_LEVEL_COMPANY) {
        lockKey =
            backgroundTask.getTaskExecutorClassName() + StringPool.POUND +
                backgroundTask.getCompanyId();
    }
    else if (backgroundTaskExecutor.getIsolationLevel() ==
                BackgroundTaskConstants.ISOLATION_LEVEL_CUSTOM) {
        lockKey = backgroundTaskExecutor.generateLockKey(backgroundTask);
    }
    else if (backgroundTaskExecutor.getIsolationLevel() ==
                BackgroundTaskConstants.ISOLATION_LEVEL_GROUP) {
        lockKey =
            backgroundTask.getTaskExecutorClassName() + StringPool.POUND +
                backgroundTask.getGroupId();
    }
    else if (backgroundTaskExecutor.getIsolationLevel() ==
                BackgroundTaskConstants.ISOLATION_LEVEL_TASK_NAME) {
        lockKey =
            backgroundTask.getTaskExecutorClassName() + StringPool.POUND +
                backgroundTask.getName();
    }
    else {
        lockKey =
            backgroundTask.getTaskExecutorClassName() + StringPool.POUND +
                backgroundTaskExecutor.getIsolationLevel();
    }

    return lockKey;
}

因此,根据您的“隔离级别”,将获取特定的锁,因此,您首先应该考虑是否要让多个BackgroundTaskExecutor实例并行运行(isSerial()应该返回false)或不。如果不是,请考虑最合适的隔离级别并使用它。