Error Node does not exist despues de subir un fichero

cancel
Showing results for 
Search instead for 
Did you mean: 
agey
Member II

Error Node does not exist despues de subir un fichero

Hola a todos,

He implementado una extensión de Alfresco que básicamente consiste en una interfaz nueva y nuevas funcionalidades. Utilizo la versión 3 de Alfresco, Mysql 5 y tomcat 6.

El problema es que a veces cuando un usuario sube un fichero a Alfresco este no es accesible utilizando su referencia, devuelve Node does not exist. Pero si utilizo el navegador de nodos de la consola del administrador lo veo en el espacio donde debe estar. Solo cuando reinicio Alfresco soy capaz de acceder a el utilizando su referencia.

Esto también sucede con los foros. A cada espacio creado se abre un foro asociado donde los usuarios pueden escribir comentarios. Algunas veces el comentario no se muestra en la interfaz del usuario pero sí aparece el nodo si lo busco a través del node browse de la consola del administrador. Al reiniciar Alfresco ya no da problemas.

¿A alguien le ha sucedido algo parecido? ¿Sabeis a que puede ser debido?

Muchas gracias,
4 Replies
fegor
Senior Member

Re: Error Node does not exist despues de subir un fichero

¿Cómo has implementado esa interface?, cuando no encuentra algún nodo pero lo ves en el explorador de nodos, suele ser problema de que no se ha indexado correctamente. Pero pueden ser infinidad de más cosas, supongo, así que, mejor si das más información  :wink:

Un saludo.
agey
Member II

Re: Error Node does not exist despues de subir un fichero

La aplicación consiste en crear expedientes que sería en alfresco un espacio. A un expediente se debe adjuntar documentos y guardar ciertos datos. Como necesitamos que estos datos se puedan configurar, modificar, crear, etc de forma dinámica sin parar la aplicación y con una interfaz amigable al usuario, se ha creado una base de datos nueva. En esta base de datos nueva se almacena esa configuración y la información registrada sobre cada expediente incluido la referencia de Alfresco de los documentos adjuntos al expediente para así poderlos recuperar rápidamente.

Para hacer esto se ha integrado Alfresco con la nueva funcionalidad a nivel de service, es decir, por ejemplo, al guardar un documento se le especifica donde debe guardarlo (el expediente), y obtenemos la referencia del nuevo fichero y lo guardamos en la nueva base de datos.

Cuando queremos visualizar el expediente (para ello no lo mostramos con la interfaz de Alfresco pero básicamente es mostrar los datos almacenados en la base de datos y listar todos los documentos adjuntos que se han registrado en la base de datos nueva) al finalizar el proceso de subir un documento es cuando da error, el documento no que se acaba de subir no lo encuentra. Si accedemos directamente a Alfresco con su interfaz, tampoco lo encontramos. Si vamos al explorador de nodos del administrador se ve la referencia del fichero como hijo del espacio espediente pero al pinchar sobre el devuelve el error. Lo más curioso es que si reiniciamos la aplicación ya no hay ningún problema, el fichero se encuentra donde debe estar y con la referencia correcta. Todo funciona correctamente desde la nueva interfaz y desde Alfresco.

Este es el código que se utiliza para subir un documento:

public void registerOtrosDocumentos(Integer numExpediente, File file,
         String fileName){

      String container = ExpedienteModel.EXPEDIENTE_OTROS_DOCUMENTOS;
      this.saveFile(numExpediente, file, fileName, container);
      
   }

private NodeRef saveFile(Integer numExpediente, File file, String fileName, String container){

      String xpath = "/app:company_home/" +
      "cm:" + ExpedienteModel.EXPEDIENTE_NAME_PREFIX + numExpediente + container;
      StoreRef storeRef = StoreRef.STORE_REF_WORKSPACE_SPACESSTORE;
      NodeRef rootNodeRef = serviceRegistry.getNodeService().getRootNode(storeRef);

      List<NodeRef> results = this.serviceRegistry.getSearchService()
      .selectNodes(rootNodeRef, xpath, null, this.serviceRegistry.getNamespaceService(), false);

      String name;
      if(fileName == null){
         name = file.getName();
      }else{
         name = fileName;
      }
      FileInfo fileInfo = this.serviceRegistry.getFileFolderService().create(
            results.get(0),
            name,
            ContentModel.TYPE_CONTENT);
      NodeRef fileNodeRef = fileInfo.getNodeRef();

      ContentWriter writer = this.serviceRegistry.getContentService()
      .getWriter(fileNodeRef, ContentModel.PROP_CONTENT, true);

      writer.setEncoding(getEncoding());
      if (file != null)
      {
         writer.putContent(file);
      }

      return fileNodeRef;
   }

Y este es el método para visualizarlos:


public List<OtrosDocumentos> otrosDocumentos(Integer numExpediente)
      throws FileNotFoundException{

      List<OtrosDocumentos> otrosDocs = new ArrayList<OtrosDocumentos>();
      String xpath = "/app:company_home/" +
      "cm:" + ExpedienteModel.EXPEDIENTE_NAME_PREFIX + numExpediente +
      ExpedienteModel.EXPEDIENTE_OTROS_DOCUMENTOS + "/*";
      StoreRef storeRef = StoreRef.STORE_REF_WORKSPACE_SPACESSTORE;
      NodeRef rootNodeRef = serviceRegistry.getNodeService().getRootNode(storeRef);
      List<NodeRef> results = this.serviceRegistry.getSearchService()
      .selectNodes(rootNodeRef, xpath, null, this.serviceRegistry.getNamespaceService(), false);
      
      for(NodeRef nodeRef: results){
         if(nodeRef!=null){
            Node node = new Node(nodeRef);
            if(node != null){
               String url = DownloadContentServlet.generateDownloadURL(nodeRef, node.getName());
               otrosDocs.add(new OtrosDocumentos(node.getName(), url, nodeRef.getId()));
            }
         }         
      }
      if(otrosDocs.size()>0){
         return otrosDocs;
      }else{   
         return null;
      }

   }

He pensado que podría ser por tema de actualización de los índices lucene pero no sé ni como comprobarlo ni como arreglarlo. Agradecería cualquier sugerencia del motivo de este error y como solucionarlo.

Muchas gracias,
cristinamr
Advanced

Re: Error Node does not exist despues de subir un fichero

Eso de que al finalizar no lo encuentra y ojeando por encima el código me da que no haces en ningún momento un node.save(); Es decir, el método save es como un commit, si no confirmas los cambios que has hecho en un nodo, no hay cambios.

Prueba a hacerlo y nos cuentas Smiley Wink
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc
agey
Member II

Re: Error Node does not exist despues de subir un fichero

Hola CristinaMR,

Muchas gracias por tu sugerencia.

He probado a añadir lo que me sugieres al final del método "registerOtrosDocumentos" pero la clase Node no tiene el método save(), ni tampoco NodeRef ¿qué método save() debo invocar?. En los scripts sí que existe (document.save()) y es necesario invocarlo al final de todos los cambios realizados sobre el nodo para que se hagan efectivos. Indicame por favor como debería hacerlo.

El código del método "saveFile" que utilizo, lo copie del método "saveContent" de "BaseContentWizard.java" y lo adapté para mi caso omitiendo algunos aspectos y propiedades que non hacian falta. No se si esto podría causar el problema. No lo mencioné antes pero este error no ocurre siempre, solo algunas veces da este problema y se soluciona si se reinicia la aplicación.