Alfresco:在ftp中重写文件时增加文档版本

Alfresco:在ftp中重写文件时增加文档版本,ftp,alfresco,Ftp,Alfresco,我想在ftp中重写文件时增加次要文档版本。当我跟踪代码时,ContentDiskDriver2.truncateFile()用于覆盖文件。在这个函数中,我使用versionService来增加版本。以下代码是用truncateFile()编写的 试一试{ 您能否帮助我解决交易必须处于活动状态且需要同步的问题 我找到了这个链接。。 你被“小字母”和“大字母”户外服务抓住了 “little letter”服务是原始服务,通常仅在其他Alfresco低级服务中使用。“Big letter”服务是包装好

我想在ftp中重写文件时增加次要文档版本。当我跟踪代码时,
ContentDiskDriver2.truncateFile()
用于覆盖文件。在这个函数中,我使用
versionService
来增加版本。以下代码是用truncateFile()编写的 试一试{

您能否帮助我解决交易必须处于活动状态且需要同步的问题

我找到了这个链接。。

你被“小字母”和“大字母”户外服务抓住了

“little letter”服务是原始服务,通常仅在其他Alfresco低级服务中使用。“Big letter”服务是包装好的面向用户的服务,包括事务、审计、安全等

对于您的情况,您需要使用大写字母形式,因此请更改行

VersionService versionService = (VersionService) applicationContext.getBean("versionService");
到正确的一个:

VersionService versionService = (VersionService) applicationContext.getBean("VersionService");
您将获得一份VersionService的副本,其中包含事务、安全性等,这是我认为您的情况所需要的。(注意,获取bean时使用的是一个大的第一个字母,而不是一个小字母)

您已经被“小字母”与“大字母”的Alfresco服务抓住了

“little letter”服务是原始服务,通常仅在其他Alfresco低级服务中使用。“Big letter”服务是包装好的面向用户的服务,包括事务、审计、安全等

对于您的情况,您需要使用大写字母形式,因此请更改行

VersionService versionService = (VersionService) applicationContext.getBean("versionService");
到正确的一个:

VersionService versionService = (VersionService) applicationContext.getBean("VersionService");

您将获得带有事务、安全性等的VersionService副本,这是我认为您在您的情况下需要的。(请注意,获取bean时使用的是大首字母而不是小字母)

这是我找到的替代解决方案。显式使用事务

    VersionService versionService = (VersionService) applicationContext.getBean("VersionService");
    TransactionService transactionService = (TransactionService) applicationContext.getBean("transactionService");

    UserTransaction tx = null;
    try {
        tx = transactionService.getUserTransaction();
        tx.begin();
        versionService.createVersion(nodeRef, versionProperties);
        tx.commit();
    } 
    catch (Exception e) 
    {
        if(tx != null)
        {
            try
            {
                tx.rollback();
            } catch (IllegalStateException e1) 
            {
                e1.printStackTrace();
            } catch (SecurityException e2) 
            {
                e2.printStackTrace();
            } catch (SystemException e3) 
            {
                e3.printStackTrace();
            }
        }
    }

这是我找到的另一种解决方案。显式使用事务

    VersionService versionService = (VersionService) applicationContext.getBean("VersionService");
    TransactionService transactionService = (TransactionService) applicationContext.getBean("transactionService");

    UserTransaction tx = null;
    try {
        tx = transactionService.getUserTransaction();
        tx.begin();
        versionService.createVersion(nodeRef, versionProperties);
        tx.commit();
    } 
    catch (Exception e) 
    {
        if(tx != null)
        {
            try
            {
                tx.rollback();
            } catch (IllegalStateException e1) 
            {
                e1.printStackTrace();
            } catch (SecurityException e2) 
            {
                e2.printStackTrace();
            } catch (SystemException e3) 
            {
                e3.printStackTrace();
            }
        }
    }

谢谢你的解释…现在我可以根据你的解释来解决…我找到了另一个解决方案。你能帮我检查一下吗?谢谢你的解释…现在我可以根据你的解释来解决…我找到了另一个解决方案。你能帮我检查一下吗?我建议不要这样做。如果你真的这样做的话如果您不想直接使用little letter服务(因此担心安全性、审核等),您将需要使用RetryingTransaction。否则,当出现可重试问题(主要是事务冲突)时,您将出现间歇性故障。我建议您不要这样做。如果您确实想直接使用little letter服务(并因此担心安全性、审计等),您将希望使用RetryingTransaction来代替。否则,当出现可重试问题(主要是事务冲突)时,您将出现间歇性故障