AnsweredAssumed Answered

Creación de carpeta y comprobación si está creada(Action rule)

Question asked by kaecius on Apr 21, 2017
Latest reply on Apr 28, 2017 by togomez

Buenos días , estoy realizando una acción en java que mediante una regla todo el contenido que sea insertado se mueva a otra carpeta indicada como parámetro y sean organizados en dicha carpeta según un plantilla de fecha (yyyy/MM/dd) dada como parámetro y la fecha de creación.

 

Un ejemplo sería mover un archivo llamado 'test.txt' a la carpeta de inserción (con la regla añadida). La acción que se ejecutaría en el momento que ese archivo estuviera dentro de la carpeta de inserción comprobaría si las carpetas con la plantilla dada están creadas (suponiendo que la fecha de creación fuese hoy , las carpeta a comprobar serían 2017/ , 2017/04/, 2017/04/21/), si alguna de ellas no está creada la crearía y si no simplemente se movería a dicha carpeta.

 

El problema que estoy teniendo es a la hora de comprobar las carpetas de forma concurrente, concretamente el problema sucede cuando la carpeta no está creada y mi código la tiene que crear, uno de los hilos la crea y los demás saltan a la excepción que tengo capturada (FileExistsException), donde  hago una segunda comprobación de la carpeta con el mismo método utilizado antes para comprobar si ya está creada (fileFolderService.simpleSearch()).

Se supone que los hilos que entren a ese catch tendrían que buscar la carpeta ya creada por el primer hilo y cogerla pero no es así , ese método que utilizo para comprobar si está la carpeta me devuelve null y por lo tanto de todos los hilos ejecutados únicamente el que ha creado la carpeta es el que termina la ejecución los demás devuelven null en la búsqueda de las carpetas.

 

He probado a que todos los hilos que entren en el try catch de (FileExistsException) entraran en bucle hasta que el método devolviera el NodeRef de la carpeta, pero ningún hilo llega a pasar el NodeRef y se quedan en bucle hasta que manualmente paro alfresco.

 

private NodeRef check(NodeRef parent, String folderPathName) {
            NodeRef resultNodeRef = null;
            NodeRef temp = null;
            synchronized (this) {
               temp = fileFolderService.searchSimple(parent, folderPathName);
            }
            if (temp != null) {
                  resultNodeRef = temp
;

            } else {
                  
try {
                        resultNodeRef =
fileFolderService.create(parent, folderPathName,

                                                         ContentModel.TYPE_FOLDER).getNodeRef();

                  } catch (FileExistsException ex) {

                         resultNodeRef = fileFolderService.searchSimple(parent, folderPathName);

                  }
            }

   return resultNodeRef;

}

Outcomes