2016-08-17 6 views
0

私の考えは、それを排除し、その後のテストでファイルを作成することですが、私のコードはAlfrescoで。テスト用の一時ファイルを作成するにはどうすればよいですか?

私のコードを失敗:

@RunWith(RemoteTestRunner.class) 
@Remote(runnerClass=SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:alfresco/application-context.xml") 
public class FooTest { 
    private static final String ADMIN_USER_NAME = "admin"; 

    @Autowired 
    @Qualifier("NodeService") 
    protected NodeService nodeService; 

    @Autowired 
    private FileFolderService fileFolderService; 

    @Autowired 
    protected Repository repositoryHelper; 

    @Test 
    public void testCreateTempFile() { 
    AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER_NAME); 

    NodeRef root = repositoryHelper.getSharedHome(); 

    // create the node 
    // this line throw an exception 
    FileInfo fileInfo = fileFolderService.create(root, 
     "foo.txt", ContentModel.PROP_CONTENT); 
    ... 
    } 
} 

それは、次のエラーが表示されます。

org.alfresco.error.AlfrescoRuntimeException: 07170002 Transaction must be active and synchronization is required: Thread[main,5,main] at org.alfresco.util.transaction.TransactionSupportUtil.registerSynchronizations(TransactionSupportUtil.java:188)

どのように取引作業?どのように私はそれを活性化できますか?

答えて

0

私は解決策が見つかりました:JUnitので

RetryingTransactionHelper transactionHelper = transactionService.getRetryingTransactionHelper(); 
final String filename = "TestSite" + System.currentTimeMillis(); 

NodeRef noderef = transactionHelper.doInTransaction(new RetryingTransactionCallback<NodeRef>() { 
    public NodeRef execute() throws Throwable { 
     final NodeRef parent = repositoryHelper.getCompanyHome(); 
     FileInfo fileInfo = fileFolderService.create(parent, filename, ContentModel.PROP_CONTENT); 
     NodeRef node = fileInfo.getNodeRef(); 

     ContentWriter writer = contentService.getWriter(node, ContentModel.PROP_CONTENT, true); 
     writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); 
     writer.setEncoding("UTF-8"); 
     writer.putContent(content); 
     return node; 
    } 
}); 

は、ファイルを作成するためにトランザクションを使用する必要があります。

+0

でも、@Transactionalアノテーションを使用することができます(少ないコード行数)。これが私のやり方です。 – Akah

+0

それは同じですか?私は明日お試しになります、同じ場合は、私はあなたに答えを与えるでしょう – Troncador

+0

私に答えを与える必要はありません。しかし、はい、私はテストケースでSpringのトランザクションアノテーションを使用しています。私はそれをチェックするために削除し、あなたと同じスタックトレースを持っていた。 – Akah

1

@Transactional注釈を試しましたか?

@Test 
@Transactional 
public void testCreateTempFile() { 
.... 

これで問題が解決するはずです。

3

テンポラリファイルを使用するために屋外で1つのユーティリティクラスに

を提供org.alfresco.util.TempFileProvider

それはあなたが一時的なファイルやディレクトリを作成することができ、すべてのAPIを持っています。

一時ファイルを大量に使用している場合は、このutilityを使用することも考えられます。これにより、定期的に一時ファイルを消去することができます。

関連する問題