1

ftp でファイルをオーバーライドするときにドキュメントのマイナー バージョンを増やしたい。コードをたどると、ContentDiskDriver2.truncateFile()ファイルのオーバーライドに機能します。この関数内で、versionServiceバージョンを上げるために使用します。以下のコードは truncateFile() try {

    NodeRef nodeRef = getNodeForPath(tree, DriverContent.FILE_OPEN_PARAMS.getPath());
    System.out.println("Node Ref: " + nodeRef);

    // Increase minor version to file.
    Map<String, Serializable> versionProperties = new HashMap<String, Serializable>(2, 1.0f);
    versionProperties.put(Version.PROP_DESCRIPTION, "");
    versionProperties.put(VersionModel.PROP_VERSION_TYPE, VersionType.MINOR);

    VersionService versionService = (VersionService) applicationContext.getBean("versionService");
    versionService.createVersion(nodeRef, versionProperties);
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

しかし、残念ながら、このエラーが発生しました。

2013-01-02 14:12:31,609  ERROR [org.alfresco.fileserver] [Sess_FTP3_192.168.1.166] Error from JLAN
 org.alfresco.error.AlfrescoRuntimeException: 00020073 Transaction must be active and synchronization is required: Thread[Sess_FTP3_192.168.1.166,5,FTPSessions]
    at org.alfresco.repo.transaction.AlfrescoTransactionSupport.registerSynchronizations(AlfrescoTransactionSupport.java:467)
    at org.alfresco.repo.transaction.AlfrescoTransactionSupport.getSynchronization(AlfrescoTransactionSupport.java:451)
    at org.alfresco.repo.transaction.AlfrescoTransactionSupport.getResource(AlfrescoTransactionSupport.java:244)
    at org.alfresco.repo.transaction.TransactionalResourceHelper.incrementCount(TransactionalResourceHelper.java:71)
    at org.alfresco.repo.policy.BehaviourFilterImpl.disableBehaviour(BehaviourFilterImpl.java:158)
    at org.alfresco.repo.version.Version2ServiceImpl.createVersion(Version2ServiceImpl.java:212)
    at org.alfresco.repo.version.Version2ServiceImpl.createVersion(Version2ServiceImpl.java:140)
    at org.alfresco.filesys.repo.ContentDiskDriver2.increaseVersion(ContentDiskDriver2.java:2937)
    at org.alfresco.filesys.repo.ContentDiskDriver2.truncateFile(ContentDiskDriver2.java:1652)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
    at $Proxy97.truncateFile(Unknown Source)
    at org.alfresco.filesys.repo.NonTransactionalRuleContentDiskDriver.truncateFile(NonTransactionalRuleContentDiskDriver.java:480)
    at org.alfresco.filesys.repo.LegacyFileStateDriver.truncateFile(LegacyFileStateDriver.java:471)
    at org.alfresco.filesys.repo.BufferedContentDiskDriver.truncateFile(BufferedContentDiskDriver.java:532)
    at org.alfresco.jlan.ftp.FTPSrvSession.procStoreFile(FTPSrvSession.java:2262)
    at org.alfresco.jlan.ftp.FTPSrvSession.run(FTPSrvSession.java:4924)
    at java.lang.Thread.run(Thread.java:662)

トランザクションをアクティブにする必要があり、同期が必要な問題を解決する方法を教えてください

このリンクを見つけました. Alfresco レポジトリ ドキュメントのバージョン履歴は、CIFS/FTP 経由で入手できますか?

4

2 に答える 2

4

あなたは「小さな手紙」と「大きな手紙」のAlfrescoサービスに巻き込まれました

「リトル レター」サービスは生のサービスであり、通常は他の Alfresco 低レベル サービス内でのみ使用されます。「ビッグレター」サービスは、トランザクション、監査、セキュリティなどを含むラップされたユーザー向けサービスです。

あなたの場合、ビッグレターフォームを使用する必要があるため、行を変更します

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

正しいものに:

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

そして、トランザクション、セキュリティなどを含む VersionService のコピーを取得します。これは、状況に必要なものだと思います。(bean は小さな文字ではなく大きな最初の文字でフェッチされることに注意してください)

于 2013-01-02T08:16:06.720 に答える
0

これは私が見つけた代替ソリューションです。トランザクションの明示的な使用。

    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();
            }
        }
    }
于 2013-01-03T04:47:17.047 に答える