[解决了,似乎有一些影响Alfresco 3.3.0的错误,Alfresco 3.3.0g上已不再存在
您好,
我正在使用OpenCMIS从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似乎工作正常:如果我们转到“管理 - &gt;节点浏览器”并从那里启动CMISQL查询,它总是检索一个文件夹,这是正确的。所以,它必须是我们的代码,或OpenCMIS错误......
有什么想法吗?
答案 0 :(得分:2)
我无法重现此行为。它对http://cmis.alfresco.com正常运行。问题https://issues.alfresco.com/jira/browse/ALF-2859表明存在错误修复。你在运行最新的Alfresco版本吗?
弗洛里安