【问题标题】:Concurrent API LayoutLocalService.addLayout throws StaleObjectStateException in LayoutSetLocalService并发 API LayoutLocalService.addLayout 在 LayoutSetLocalService 中抛出 StaleObjectStateException
【发布时间】:2018-05-25 11:29:45
【问题描述】:

更新

Liferay 票已接受,开发中的解决方案:https://issues.liferay.com/browse/LPS-82954

情况

我的上下文是通过liferay portlet 并行导入liferay 布局;用弹簧建造。当我在 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,刚刚添加了布局)。

这不会发生在单线程执行中!

动作

  1. 首先我同步了那个调用..没有任何更好的结果
  2. 与此同时,我读到一些关于,仅同步线程将无济于事,因为事务本身可能不在同步执行块内。因此我还添加了事务注释。 .. 没有更好的结果

到目前为止,我获得了以下见解:

代码摘录

-> 可用的测试项目: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票

标签: java liferay liferay-7 liferay-dxp staleobjectstate


【解决方案1】:

很遗憾,Liferay 无法解决此问题。票已关闭;声明为不是用例。原因是该解决方案在其他用例中产生了负面影响。所以 Liferay 似乎在他们的事务管理中存在问题。顺便说一句,我在同时添加 Expandos 时也看到了这样的异常。

【讨论】:

    猜你喜欢
    • 2019-04-04
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2018-10-04
    • 2013-08-13
    • 1970-01-01
    相关资源
    最近更新 更多