异步CMIS客户端:与OpenCMIS并行下载或上载多个文件

时间:2017-02-17 07:01:20

标签: multithreading performance asynchronous cmis opencmis

ChangeLog of OpenCMIS 0.14说:

  

客户端已添加对异步操作的支持   库。

作为CMIS客户端,如何使用OpenCMIS 0.14或更高版本并行执行多个并行下载或多个并行下载?

我的目标是通过多线程更快地完成所有操作。我可以手动在多个线程之间共享一个Session对象,但是如果OpenCMIS有内置功能,我宁愿使用它。

1 个答案:

答案 0 :(得分:2)

首先,create a Session像往常一样。

然后,使用此会话创建asynchronous session

int maxParallelRequests = 10;
AsyncSessionFactory asyncFactory = AsyncSessionFactoryImpl.newInstance();
asyncSession = asyncFactory.createAsyncSession(session, maxParallelRequests);

然后使用此asyncSession,就像使用普通会话对象一样。

混合同步和异步

通常你也想要执行一些同步操作。例如,同步创建一个文件夹,然后异步上传该文件夹中的文件。因为如果您不等待创建文件夹,文档上载可能会失败。以下是在这种情况下的处理方法:

// Create the folder synchronously.
Folder folder = session.getRootFolder().createFolder(properties);

// Upload the file asynchronously.
Future<ObjectId> futureDocumentId = asyncSession.createDocument(
  properties,
  new ObjectIdImpl(remoteFolder.getId()),
  contentStream,
  VersioningState.MAJOR
);

注意上面的asyncSession.createDocument构造,这是因为你不能像使用同步会话一样编写folder.createDocument

如果需要,futureDocumentId变量可让您在需要时获取文档的标识符:

ObjectId documentId = futureDocumentId.get();

如果您确实需要,请仅调用此方法,并尽可能晚地调用它。