cancel
Showing results for 
Search instead for 
Did you mean: 

Relazioni tra documenti

fedemori
Champ in-the-making
Champ in-the-making
Ciao,
devo associare più allegati ad un documento principale. L'associazione funziona ma è molto lenta e di conseguenza, più allegati ci sono, più sono grandi e più è lenta questa funzionalità.
Come posso risolvere il problema?
In seguito il codice

public static void updateDocumentRelated(Session session, String root, String sourceObjectId, String targetObjectId,long idRepositoryPrincipale,long idRepositoryAllegato) throws Exception {
      
      Document doc = getDocumentInFolderByidRepository(session, idRepositoryPrincipale, root);
       if (doc==null){
          throw new Exception("Il documento con idRepository " + idRepositoryPrincipale + " non è stato trovato su Alfresco");
       }
      
       //Estraggo tutti i figli del documento principale
      
       ObjectType typeDefinition = session.getTypeDefinition("R:documento:related");
       OperationContext operationContext = session.createOperationContext();
       RelationshipDirection direction = RelationshipDirection.SOURCE;
       ItemIterable<Relationship> relationships = session.getRelationships(doc,true, direction, typeDefinition, operationContext);
      
      
      //Creo la relazione bilaterale
      
      Map relProps = new HashMap();
      
      
      
      //Dall'allegato verso il documento principale
      relProps = new HashMap();
      relProps.put("cmis:sourceId", targetObjectId);
      relProps.put("cmis:targetId", sourceObjectId);
      relProps.put("cmis:objectTypeId", "R:docarea:related");
      session.createRelationship(relProps, null, null, null);
      
      
      //Collego anche il documento allegato ad ogni fratello
      //che non sia stato già collegato
      
      
      
       if (relationships==null ) {
           //Dal documento principale verso l'allegato
          
          relProps = new HashMap();
         relProps.put("cmis:sourceId", sourceObjectId);
         relProps.put("cmis:targetId", targetObjectId);
         relProps.put("cmis:objectTypeId", "R:docarea:related");
         session.createRelationship(relProps, null, null, null);
         
          return;
       }
      
       Document docAllegato = getDocumentInFolderByidRepository(session, idRepositoryAllegato, root);
       ItemIterable<Relationship> brotherships = session.getRelationships(docAllegato,true, direction, typeDefinition, operationContext);
      
       for (Relationship relationship : relationships) {
           
            Document relatedDocument = (Document) relationship.getTarget();
           
           
   
           //Dall'allegato verso i fratelli se non sono già presenti
           
           
            boolean esiste = false;
            if (brotherships!=null ){
                for (Relationship brothership : brotherships) {
                    Document brotherDocument = (Document) brothership.getTarget();
                    if (brotherDocument.getId().equals(relatedDocument.getId())) {
                       esiste = true;
                       break;
                    }
                 }
            }

            if (!esiste){
               
                relProps = new HashMap();
              relProps.put("cmis:sourceId", targetObjectId);
              relProps.put("cmis:targetId", relatedDocument.getId());
              relProps.put("cmis:objectTypeId", "R:docarea:related");
              session.createRelationship(relProps, null, null, null);
              
              //Riporto anche il documento sui fratelli
               relProps = new HashMap();
                 relProps.put("cmis:sourceId", relatedDocument.getId());
                 relProps.put("cmis:targetId", targetObjectId);
                 relProps.put("cmis:objectTypeId", "R:docarea:related");
                 session.createRelationship(relProps, null, null, null);
              
              
            }

           

        }
      
       //Dal documento principale verso l'allegato
      
      relProps = new HashMap();
      relProps.put("cmis:sourceId", sourceObjectId);
      relProps.put("cmis:targetId", targetObjectId);
      relProps.put("cmis:objectTypeId", "R:docarea:related");
      session.createRelationship(relProps, null, null, null);
      
      
      
      

   }
2 REPLIES 2

openpj
Elite Collaborator
Elite Collaborator
Il motore di associazione di Alfresco è basato essenzialmente sull'utilizzo del database, in pratica le associazioni non vengono indicizzate. Questo infatti può impattare sulle performance.

Le soluzioni possibili sono due:
1. Tuning del database e del connection pool
2. Tuning della cache
3. Modellazione dell'associazione tramite content model


La soluzione 2 è attuabile solo su sistemi a 64bit e con molta memoria disponibile, potresti fare qualche iterazione di tuning provando ad incrementare i valori della cache del 50% di volta in volta.

La soluzione 3, ovvero la modellazione dell'associazione è la soluzione più radicale e che ti permetterebbe di indicizzare tutte le associazioni. In questo caso le performance ovviamente saranno sempre eccellenti.

La soluzione 1 non è sempre praticabile poiché dipende fortemente dall'ambiente.

fedemori
Champ in-the-making
Champ in-the-making
ok grazie, come si fa a modellare l'associazione? Ti posso girare via mail il mio customModel.xml Grazie
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.