0

[已解决,似乎有一些影响 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

有时我们1连续获得 20 个,有时就是全部0。但是,我们从来没有得到1and的“混合” 0;我们总是得到它们的“运行”。

我们是否在每次查询之前创建会话都没关系,我们仍然有随机问题。我们尝试了两个不同的 Alfresco 服务器(它们都是 3.3 社区),全新安装,它们都随机失败。我们还尝试测量每个查询的时间,但它似乎与结果错误(0 folders retrieved)或正确(1 folders retrieved)没有任何关系。

Alfresco 似乎工作正常:如果我们转到“管理 --> 节点浏览器”并从那里启动 CMISQL 查询,它总是检索一个文件夹,这是正确的。所以,它一定是我们的代码,或者是一个 OpenCMIS 错误......

有任何想法吗?

4

1 回答 1

2

我无法重现这种行为。它对http://cmis.alfresco.com运行良好。问题https://issues.alfresco.com/jira/browse/ALF-2859指出已经修复了错误。您正在运行最新的 Alfresco 版本吗?

弗洛里安

于 2010-07-08T07:41:37.893 回答