Thanks Florian. It works. Could you help to provide a little more details on how the paging works between OpenCMIS client with CMIS server on the backend? Here are some logs I get from FileNet CMIS for FileNet access logs.
2017-11-16 14:03:09 0.02 GET /fncmis/resources/Service?repositoryId=os1 200 2017-11-16 14:03:39 0.013 GET /fncmis/resources/Service?repositoryId= os1 200 2017-11-16 14:03:39 0.003 GET /fncmis/resources/Service?repositoryId= os1 200 2017-11-16 14:04:13 34.107 POST /fncmis/resources/os1/Query 201 2017-11-16 14:05:05 0.028 GET /fncmis/resources/Service?repositoryId= os1 200 2017-11-16 14:05:05 0.004 GET /fncmis/resources/Service?repositoryId= os1 200 2017-11-16 14:05:55 50.104 POST /fncmis/resources/os1/Query 201 There were total 6661 items back and the page size was 1500, from the log I noticed a few things that I am not quite understand: 1. There were only 2 queries been triggered, I thought it should at least had 5 (6661/1500)? 2. There were 52 seconds (14:05:05 - 14:04:13) between the first query call and the subsequent calls, I guess it took a while for OpenCMIS client to process something? 52 seconds seems like a bit longer than expect. 3. The second query took longer than first query, but I guess it is a question for IBM CMIS expert to answer. Wentao -----Original Message----- From: Florian Müller [mailto:f...@apache.org] Sent: Thursday, November 16, 2017 1:32 PM To: dev@chemistry.apache.org; Lu, Wentao Subject: Re: CMIS paging query result sample code Hi Wentao, If you are processing all query results, it's actually much simpler than you think. Please see: https://chemistry.apache.org/docs/cmis-samples/samples/operation-context/index.html#list-batch-size Use an Operation Context, set the maxItemsPerPage and just iterate over the query results: OperationContext oc = OperationContextUtils.createMinimumOperationContext(); oc.setMaxItemsPerPage(500); ItemIterable<QueryResult> results = session.query(queryString, false, oc); for (QueryResult result : results) { System.out.println(result.getPropertyValueByQueryName("cmis:name")); } - Florian > Hi, > > Is there a sample code for OpenCMIS to paging query result? We have a > query that will return large result set, we want to use paging query > to avoid timeout if return all dataset in one query from backend > FileNet repository, is there a sample code we can reference? I > googled but get confused sample code especially after the first query > call, > > while (results.getHasMoreItems()){ > PAGE_NUM ++; > //Should we do another session.query() call or just use the results.skipTo() > from the first query result? > ItemIterable<QueryResult> tmp_results = session.query(queryString, > false).skipTo(PAGE_NUM * PAGE_SIZE).getPage(PAGE_SIZE); //this line or next > line? > ItemIterable<QueryResult> tmp_results = > results.skipTo(PAGE_NUM * PAGE_SIZE).getPage(PAGE_SIZE); > > for (QueryResult result : tmp_results) { > System.out.println(result.getPropertyValueByQueryName("cmis:name")); > resultCount++; > } > } > > Here is the complete code snip > String queryString = "SELECT cmis:name FROM InformationSystem"; > > int PAGE_NUM = 0; > int PAGE_SIZE = 500; > > ItemIterable<QueryResult> results = session.query(queryString, > false).skipTo(PAGE_NUM * PAGE_SIZE).getPage(PAGE_SIZE); > int resultCount = 0; > for (QueryResult result : results) { > System.out.println(result.getPropertyValueByQueryName("cmis:name")); > resultCount ++; > } > System.out.println("resultCount="+resultCount); > > while (results.getHasMoreItems()){ > PAGE_NUM ++; > //Should we do another session.query() call or just use the results.skipTo() > from the first query result? > ItemIterable<QueryResult> tmp_results = session.query(queryString, > false).skipTo(PAGE_NUM * PAGE_SIZE).getPage(PAGE_SIZE); > ItemIterable<QueryResult> tmp_results = > results.skipTo(PAGE_NUM * PAGE_SIZE).getPage(PAGE_SIZE); > > for (QueryResult result : tmp_results) { > System.out.println(result.getPropertyValueByQueryName("cmis:name")); > resultCount++; > } > System.out.println("resultCount="+resultCount); > } > > > > Thanks > Wentao > ________________________________ > This email and its attachments are intended solely for the personal use of > the individual or entity named above. Any use of this communication by an > unintended recipient is strictly prohibited. If you have received this email > in error, any publication, use, reproduction, disclosure or dissemination of > its contents is strictly prohibited. Please immediately delete this message > and its attachments from your computer and servers. We would also appreciate > if you would contact us by a collect call or return email to notify us of > this error. Thank you for your cooperation. > -BCHydroDisclaimerID5.2.8.1541 >