[ Решено , похоже, что была какая-то ошибка, влияющая на 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 ...
Есть идеи?