liferay - Liferay 7 中的方法 setSerial(boolean serial)
问题描述
我正在从事从 Liferay 6.2 到 Liferay 7.1 的代码迁移项目。在 Liferay 6.2 中有一个类BaseBackgroundTaskExecutor包含一个方法setSerial(boolean serial)。但是在 Liferay 7.1 中,该方法消失了,我找不到任何替代方法。
这里有没有人熟悉我的问题或 Liferay 并可以为我提供一些指导?
问候,迈克尔
解决方案
比较两个分支(6.2.x和7.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
's 的值是4
,任何值,但4
会isSerial()
返回true
。或者,如果你真的想要,你也可以覆盖该isSerial()
方法并让它返回true
或false
.
但是,您应该看一下BackgroundTaskLockHelperUtil
实现。特别是它的方法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
)。如果不是,请考虑哪种隔离级别最适合并使用它。
推荐阅读
- odoo - 考勤模块 Odoo 中的地理位置
- python - 您如何按 Boto 中的 CreationDate 字符串对 AMI 进行排序?
- google-workspace - 关于计费的 Google API
- r - 如何防止 R 中的 gamm4 在我的 GAMM 中删除列/系数?
- react-redux - 如何在下面的代码中添加字体图标?
- optimization - scipys linprog 求解器没有可用的复杂性信息?
- hyperlink - 使用 mapbox 在弹出窗口中添加链接
- css - 是否可以让 flex div 坐在有空间的地方?
- database - HBase 在大 o-notation 中通过 rowkey 获取行的性能
- c# - 修复 .NET Core App 3.1 开源依赖项漏洞