[解決済み、Alfresco 3.3.0g には存在しない、Alfresco 3.3.0 に影響するバグがあったようです]
やあ、
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
201
連続で取得することもあれば、すべてを取得することもあります0
。1
ただし、との「混合」は一度もありません0
。私たちは常にそれらの「実行」を取得します。
各クエリの前にセッションを作成するかどうかは問題ではありませんが、まだランダムな問題があります。2 つの異なる Alfresco サーバー (どちらも 3.3 コミュニティ) に対してクリーン インストールを試みましたが、いずれもランダムに失敗します。0 folders retrieved
また、各クエリの時間を測定しようとしましたが、結果が間違っている ( ) または正しい ( )とは関係がないようです1 folders retrieved
。
Alfresco は正常に動作しているようです。「管理 --> ノード ブラウザ」に移動し、そこから CMISQL クエリを起動すると、常に 1 つのフォルダが取得されます。これは正しいことです。つまり、それは私たちのコードか、OpenCMIS のバグに違いありません...
何か案は?