2010-07-08 3 views
0

[Résolu, il semble qu'il y avait un bug affectant Alfresco 3.3.0, qui n'est plus présent sur Alfresco 3.3.0g]échecs aléatoires à l'aide de requêtes CMISQL sur Alfresco 3.3.0

Salut,

J'utilise OpenCMIS pour extraire des données d'Alfresco 3.3, mais il a un comportement très étrange sur les requêtes CMISQL. J'ai googlé quelqu'un d'autre avec les mêmes problèmes, mais il semble que je sois le premier dans le monde :), donc je suppose que c'est de ma faute, pas OpenCMIS '.

Voilà comment je suis l'interrogation 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; 
    } 

} 

Comme vous pouvez le voir, nous exécutons simplement la même requête, jusqu'à 20 fois de suite. Vous attendez le même résultat à chaque fois, n'est-ce pas? Malheureusement, cela est un échantillon de ce que nous obtenons:

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 

Parfois, nous obtenons 20 1 dans une rangée, il est parfois tout 0. Cependant, nous n'avons jamais obtenu un «mélange» de 1 et de 0; nous avons toujours "une course" d'entre eux.

Peu importe si nous créons la session avant chaque requête, nous avons toujours le problème aléatoire. Nous avons essayé contre deux différents serveurs Alfresco (tous les deux 3.3 Communauté), l'installation propre, et tous les deux échouent au hasard. Nous avons également essayé de mesurer le temps pour chaque requête, mais il ne semble pas avoir de relation avec le résultat étant faux (0 folders retrieved) ou à droite (1 folders retrieved).

Alfresco semble fonctionner correctement: si nous allons dans "Administration -> Navigateur de nœuds" et que nous lançons la requête CMISQL à partir de là, il récupère toujours un dossier, ce qui est juste. Donc, ça doit être notre code, ou un bug OpenCMIS ...

Des idées?

Répondre

2

Je ne peux pas reproduire ce comportement. Il fonctionne bien contre http://cmis.alfresco.com. Le numéro https://issues.alfresco.com/jira/browse/ALF-2859 indique qu'il y a eu des corrections de bogues. Courez-vous la dernière version d'Alfresco?

Florian

+0

Salut Florian, merci pour votre réponse. J'utilise Alfresco 3.3.0 (build 2765), je n'ai pas remarqué qu'Alfresco 3.3g était déjà disponible. Je vais le mettre à jour et j'espère que le numéro ALF-2859 sera parti. En ce qui concerne le test, je teste maintenant contre http://cmis.alfresco.com et je suis incapable de le reproduire. Peut-être qu'il y avait un autre bug dans ma version d'Alfresco, je vais devoir réessayer après la mise à jour. – AJPerez

+0

Après la mise à niveau de 3.3.0 à 3.3.0g, il semble que le "comportement aléatoire" est résolu. Maintenant, je reçois toujours 0 résultats (apparemment, l'interrogation de la propriété cmis: name ne fonctionne pas) ... mais, au moins, elle échoue toujours. Merci encore pour votre aide :) – AJPerez

Questions connexes