Alfresco 3.3.0에서 CMISQL 쿼리를 사용한 무작위 실패
-
12-09-2020 - |
문제
[해결됨, Alfresco 3.3.0g에는 더 이상 존재하지 않는 Alfresco 3.3.0에 영향을 미치는 버그가 있었던 것 같습니다.]
안녕,
나는 사용하고있다 오픈CMIS Alfresco 3.3에서 데이터를 검색했지만 CMISQL 쿼리에서 매우 이상한 동작이 발생했습니다.같은 문제로 다른 사람을 검색해 봤는데 제가 전 세계에서 첫 번째인 것 같습니다. :) OpenCMIS가 아닌 내 잘못인 것 같습니다.
이것이 내가 Alfresco에 쿼리하는 방법입니다.
public Class CmisTest {
private static Session sesion;
private static final String QUERY = "select cmis:objectid, cmis:name from cmis:folder where cmis:name='MyFolder'";
public static void main(String[] args) {
// Open a CMIS session with Alfresco
Map<String, String> params = new HashMap<String, String>();
params.put(SessionParameter.USER, "admin");
params.put(SessionParameter.PASSWORD, "admin");
params.put(SessionParameter.ATOMPUB_URL, "http://localhost:8080/alfresco/s/api/cmis");
params.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
params.put(SessionParameter.REPOSITORY_ID, "fa9d2553-1e4d-491b-87fd-3de894dc7ca9");
sesion = SessionFactoryImpl.newInstance().createSession(params);
// Ugly bug in Alfresco which raises an exception if we request more data than it's available
// See https://issues.alfresco.com/jira/browse/ALF-2859
sesion.getDefaultContext().setMaxItemsPerPage(1);
// We repeat the same query 20 times and count the number of elements retrieved each time
for (int i = 0; i < 20; i++) {
List<QueryResult> result = doQuery();
System.out.println(result.size() + " folders retrieved");
}
}
public static List<QueryResult> doQuery() {
List<QueryResult> result = new LinkedList<QueryResult>();
try {
int page = 0;
while (true) {
ItemIterable<QueryResult> iterable = sesion.query(QUERY, false).skipTo(page);
page++;
for (QueryResult qr : iterable) {
result.add(qr);
}
}
} catch (Exception e) {
// We will always get an exception when Alfresco has no more data to retrieve... :(
// See https://issues.alfresco.com/jira/browse/ALF-2859
}
return result;
}
}
보시다시피 동일한 쿼리를 최대 20번 연속으로 실행합니다.매번 같은 결과를 기대할 수 있지 않습니까?불행하게도 이것은 우리가 얻은 것의 샘플입니다:
1 folders retrieved
1 folders retrieved
1 folders retrieved
0 folders retrieved
0 folders retrieved
0 folders retrieved
0 folders retrieved
0 folders retrieved
1 folders retrieved
1 folders retrieved
때로는 20을 얻습니다. 1
연속적으로, 때로는 그게 전부야 0
.우리는 결코 "혼합"을 얻지 못했습니다 1
그리고 0
, 그렇지만;우리는 항상 그것들을 "실행"합니다.
각 쿼리 전에 세션을 생성하는 것은 중요하지 않지만 여전히 임의의 문제가 있습니다.우리는 두 개의 서로 다른 Alfresco 서버(둘 다 3.3 커뮤니티)에 대해 새로 설치를 시도했지만 둘 다 무작위로 실패했습니다.또한 각 쿼리에 대한 시간을 측정해 보았지만 결과가 잘못된 것과는 아무런 관련이 없는 것 같습니다(0 folders retrieved
) 또는 오른쪽(1 folders retrieved
).
Alfresco는 잘 작동하는 것 같습니다."관리 --> 노드 브라우저"로 이동하여 거기에서 CMISQL 쿼리를 실행하면 항상 하나의 폴더를 검색하는데, 이는 맞습니다.그렇다면 우리의 코드이거나 OpenCMIS 버그임이 틀림없습니다...
어떤 아이디어가 있나요?
해결책
이 동작을 재현할 수 없습니다.상대로는 잘 돌아가고 있어요 http://cmis.alfresco.com .문제 https://issues.alfresco.com/jira/browse/ALF-2859 버그 수정이 있었다고 합니다.최신 Alfresco 버전을 실행하고 있나요?
플로리안