- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
Liferay 票证已接受,开发中的解决方案:https://issues.liferay.com/browse/LPS-82954
我的上下文是通过 liferay portlet 并行导入 liferay 布局;用 Spring 构建。当我在 Liferay dxp 中执行它时;添加布局的 api 调用会抛出 StaleObjectStateException。 (https://github.com/liferay/liferay-portal/blob/d969e0e839db9ea64267f7bff0a76be93cd26fa0/portal-impl/src/com/liferay/portal/service/impl/LayoutLocalServiceImpl.java)
当 API 在内部对相应的 LayoutSet 进行更新(更新该组的 PageCount,布局刚刚添加到其中)时,会发生此异常。
这不会发生在单线程执行中!
到目前为止,我获得了以下见解:
LayoutSetLocalService.updatePageCount() 中存在一个错误:未返回更新的 LayoutSet .. 因此(引入 Liferay 7/DXP 时)LayoutSet 的 mvcc 版本不会递增。 ..但这不应该对我的情况产生任何影响(https://github.com/liferay/liferay-portal/blob/7eb86ce5f6a7b2c9a405853a20fe81592e639219/portal-impl/src/com/liferay/portal/service/impl/LayoutSetLocalServiceImpl.java)。
任何人都可以给我提示,是否有机会解决这个问题?
-> 可用测试项目:https://github.com/andrebiegel/liferay-layout-issue.git
private static final Object layoutCreationLock = new Object();
synchronized (layoutCreationLock) {
newLayout = addLayoutApiCall(pageContext, serviceContext, typeSettings, friendlyURLMap);
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public Layout addLayoutApiCall(IPageContext pageContext, ServiceContext serviceContext, String typeSettings,
Map<Locale, String> friendlyURLMap) throws PortalException {
Layout newLayout;
newLayout = LayoutLocalServiceUtil.addLayout( pageContext.getProjectConfiguration().getUserId(), pageContext.getProjectConfiguration()
.getSiteId(), pageContext.isPrivatePage(), pageContext.getParentLayoutId(), pageContext
.getNamesMap(), pageContext.getTitleMap(), pageContext.getDescriptionMap(), pageContext
.getKeywordsMap(), pageContext.getRobotsMap(), pageContext.getPageType(), typeSettings,
pageContext.isHiddenPage(), friendlyURLMap, serviceContext );
return newLayout;
}
最佳答案
不幸的是,Liferay 不会修复这个问题。票已关闭;声明为不是用例。原因是该解决方案在其他用例中产生了负面后果。所以Liferay的交易管理似乎存在问题。顺便说一下,我在同时添加 Expandos 时也看到过这样的异常。
关于java - 并发 API LayoutLocalService.addLayout 在 LayoutSetLocalService 中抛出 StaleObjectStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50528192/
更新 Liferay 票证已接受,开发中的解决方案:https://issues.liferay.com/browse/LPS-82954 情况 我的上下文是通过 liferay portlet 并行
我是一名优秀的程序员,十分优秀!