Asynchronous 使用Apache Chemistry异步更新Alfresco中的文档内容

Asynchronous 使用Apache Chemistry异步更新Alfresco中的文档内容,asynchronous,alfresco,cmis,opencmis,Asynchronous,Alfresco,Cmis,Opencmis,我使用OpenCMIS 1.1.0在Alfresco内容存储库上执行CRUD操作。使用提供的示例,我能够在文件夹和文档上执行所有CRUD操作 现在我想异步执行这些操作(特别是创建和更新)。使用此工具,我可以异步创建文档。但是,OpenCMIS AsyncSession类不提供updateContentStream方法 是否有某种方法可以使用OpenCMIS API异步更新文档内容 所有需要更改令牌的操作在AsyncSession中都不可用,因为如果在同一对象上安排两个操作,则结果是不可预测的。

我使用OpenCMIS 1.1.0在Alfresco内容存储库上执行CRUD操作。使用提供的示例,我能够在文件夹和文档上执行所有CRUD操作

现在我想异步执行这些操作(特别是创建和更新)。使用此工具,我可以异步创建文档。但是,OpenCMIS AsyncSession类不提供updateContentStream方法


是否有某种方法可以使用OpenCMIS API异步更新文档内容

所有需要更改令牌的操作在
AsyncSession
中都不可用,因为如果在同一对象上安排两个操作,则结果是不可预测的。 但您可以添加自己的Callable。将您的
AsyncSession
对象强制转换为
AbstractExecutorServiceAsyncSession
,并使用您自己的可调用对象调用
submit
。在这里你可以做任何你想做的事

这样一个可调用类可以如下所示:

public class SetContentStreamCallable extends SessionCallable<ObjectId> {
    private Document doc;
    private ContentStream contentStream;
    private boolean overwrite;

    public SetContentStreamCallable(Session session, Document doc, ContentStream contentStream, boolean overwrite) {
        super(session);
        this.doc = doc;
        this.contentStream = contentStream;
        this.overwrite = overwrite;
    }

    @Override
    public ObjectId call() throws Exception {
        return doc.setContentStream(contentStream, overwrite, false);
    }
}
公共类SetContentStreamCallable扩展了SessionCallable{
私人文件文件;
私有内容流;
私有布尔覆盖;
public SetContentStreamCallable(会话会话、文档文档、ContentStream ContentStream、布尔覆盖){
超级(会议);
this.doc=doc;
this.contentStream=contentStream;
this.overwrite=覆盖;
}
@凌驾
public ObjectId调用()引发异常{
返回单据setContentStream(contentStream,覆盖,false);
}
}

但是请记住,不要在同一个文档上运行两个任务

所有需要更改令牌的操作在
AsyncSession
中都不可用,因为如果在同一对象上安排两个操作,则结果是不可预测的。 但您可以添加自己的Callable。将您的
AsyncSession
对象强制转换为
AbstractExecutorServiceAsyncSession
,并使用您自己的可调用对象调用
submit
。在这里你可以做任何你想做的事

这样一个可调用类可以如下所示:

public class SetContentStreamCallable extends SessionCallable<ObjectId> {
    private Document doc;
    private ContentStream contentStream;
    private boolean overwrite;

    public SetContentStreamCallable(Session session, Document doc, ContentStream contentStream, boolean overwrite) {
        super(session);
        this.doc = doc;
        this.contentStream = contentStream;
        this.overwrite = overwrite;
    }

    @Override
    public ObjectId call() throws Exception {
        return doc.setContentStream(contentStream, overwrite, false);
    }
}
公共类SetContentStreamCallable扩展了SessionCallable{
私人文件文件;
私有内容流;
私有布尔覆盖;
public SetContentStreamCallable(会话会话、文档文档、ContentStream ContentStream、布尔覆盖){
超级(会议);
this.doc=doc;
this.contentStream=contentStream;
this.overwrite=覆盖;
}
@凌驾
public ObjectId调用()引发异常{
返回单据setContentStream(contentStream,覆盖,false);
}
}
但是请记住,不要在同一个文档上运行两个任务