Случайные сбои при использовании CMISQL-запросов на Alfresco 3.3.0 - PullRequest
0 голосов
/ 08 июля 2010

[ Решено , похоже, что была какая-то ошибка, влияющая на Alfresco 3.3.0, которого больше нет в Alfresco 3.3.0g]

Привет

Я использую OpenCMIS для извлечения данных из Alfresco 3.3, но у него очень странное поведение при запросах CMISQL. Я гуглил кого-то еще с такими же проблемами, но, кажется, я первый в мире :), так что я думаю, что это моя вина, а не OpenCMIS ».

Вот как я спрашиваю на свежем воздухе:

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 Community) чистую установку, и оба случайно вышли из строя. Мы также пытались измерить время для каждого запроса, но, похоже, он не имеет никакого отношения к результату, который был неверным (0 folders retrieved) или правильным (1 folders retrieved).

Кажется, что Alfresco работает нормально: если мы перейдем в «Administration -> Node browser» и запустим оттуда запрос CMISQL, он всегда найдет одну папку, что правильно. Итак, это должен быть наш код или ошибка OpenCMIS ...

Есть идеи?

1 Ответ

2 голосов
/ 08 июля 2010

Я не могу воспроизвести это поведение. Он отлично работает против http://cmis.alfresco.com. Проблема https://issues.alfresco.com/jira/browse/ALF-2859 гласит, что были исправлены ошибки. Вы используете последнюю версию Alfresco?

Florian

...