cancel
Showing results for 
Search instead for 
Did you mean: 

Posicionamiento en User Homes

spilby
Confirmed Champ
Confirmed Champ
Buenas,

en nuestra anterior instalación de Alfresco (la 4.1.6) para obtener el NodeRef de un path de la forma más rápida posible utilizaba este método:


serviceRegistry.getFileFolderService().resolveNamePath(repository.getCompanyHome(), path).getNodeRef()


siendo path un String con las carpetas que quería buscar y que colgaban de User Homes.

En la nueva, un Alfresco 5.0, lo hemos instalado en castellano (bueno, concretamente, el Alfresco ha detectado el idioma de la máquina, que es el castellano). Nuestro "Company Home/User Homes" ha pasado a ser "Repositorio/Espacios personales de usuario".

¿Qué pasa? Pues que la ruta indicada en el path es otra, ahora es en castellano. Por lo que esto no debería ser así, no deberíamos depender del idioma para localizar los paths, por si alguna vez vuelve a ser en inglés o lo que sea.

La cuestión es que necesito situarme en el User Homes (o espacio personal de usuario). Luego ya la ruta sí que depende de nosotros y puede ser un String, pero me he de situar al menos en la carpeta de espacio de usuario.

He probado de utilizar ésto:


serviceRegistry.getFileFolderService().resolveNamePath(repository.getUserHome(repository.getPerson()), path).getNodeRef()


pero he visto que el nodo que devuelve getUserHome es en realidad el Company Home. Vamos, que es lo mismo que hacer un getCompanyHome.

¿Hay alguna forma de decirle que busque a partir del user home? Ya sea indicándolo de alguna manera al resolveNamePath, o si existe algun otro método que sea igual o más rápido incluso para posicionarme en un path desde el user homes.

Por query no tenemos problema porque un cm:User Home lo encuentra sea el idioma que sea el de la instalación, pero esto no quiero hacerlo por query.



6 REPLIES 6

angelborroy
Community Manager Community Manager
Community Manager
Échale un vistazo a NodeLocatorService (http://docs.alfresco.com/4.1/concepts/node-locator-intro.html), tienes pre-configuraciones para ubicarte en el home de usuarios, sitios… (http://docs.alfresco.com/4.1/concepts/node-locator-available.html)

Jeff tiene algún código de ejemplo sobre esto: https://github.com/jpotts/alfresco-developer-series/blob/master/actions/actions-tutorial-repo/src/te...

Y una cosa más, no cojas directamente el ServiceRegistry: te devuelve los servicios sin chequeo de permisos, por lo que alguna operación puede ser realizada de manera incorrecta. La manera más correcta es inyectar por Spring el bean del servicio que comienza por mayúscula (por ejemplo "NodeLocatorService")
Hyland Developer Evangelist

Hola Ángel,

he probado de utilizar el NodeLocatorService pero no me ha funcionado… Smiley Surprised\ Me devuelve el nodeRef del CompanyHome igualmente.

De hecho, si hago ésto:


logger.info("CompanyHome locator: " + serviceRegistry.getNodeLocatorService().getNode(CompanyHomeNodeLocator.NAME, null, null));
logger.info("User home locator: " + serviceRegistry.getNodeLocatorService().getNode(UserHomeNodeLocator.NAME, null, null));


ambos me printan el mismo NodeRef, el correspondiente al Company Home.

Lo estoy usando bien, ¿verdad? He mirado los ejemplos y así debería ser.

Respecto a los beans, los inyecto por Spring. Tengo un ServiceRegistry inyectado, aunque en el post no puse el get. Para evitar confusiones debería poner mejor el servicio que necesito y no inyectar el ServiceRegistry supongo.

angelborroy
Community Manager Community Manager
Community Manager
Quizá es porque estés empleando el usuario admin, tienes un ejemplo más detallado en https://github.com/Alfresco/community-edition/blob/master/projects/repository/source/java/org/alfres...

En cuanto al ServiceRegistry, lo mejor es inyectar el bean específico con mayúscula (ej. NodeService), porque el getNodeService() del serviceRegistry devuelve un objeto que no tiene en cuenta la gestión de permisos.
Hyland Developer Evangelist

Efectivamente! Tenía creado sólo el usuario admin y me devolvía el Company Home. He creado un nuevo usuario y el método me devuelve la carpeta del usuario con el que me he autenticado (User Home). Así que perfecto, merci! Smiley Happy

He modificado ya de paso lo que comentabas del serviceRegistry para usar sólo los beans específicos que necesito, en mayúscula.

Una cosa más… ¿Hay algún límite de usuarios permitidos? Ya sea porque por licencia hay un número tope, o porque al igual que no se recomienda sobrepasar los 1000 nodos en paralelo en el árbol, quizás no se recomienda tener más de 1000 usuarios (ya que en realidad serían 1000 nodos en paralelo también, supongo).

Lo comento por los problemas de rendimiento que tenemos, que ya he comentado alguna vez, para ver si tener 3000 usuarios y utilizar el NodeLocator para situarme en el User Homes de cada uno podría ser más eficiente a la hora de situarme en un nodo que tener un sólo usuario con todas las carpetas dentro (balanceadas en subcarpetas para evitar 3000 en paralelo).

Los usuarios entran a través de nuestro webscript, no usan el share, por lo que a ellos les da igual que tengamos un solo usuario o 3000.

angelborroy
Community Manager Community Manager
Community Manager
No hay un límite efectivo de nodos en paralelo, aunque ese número "mágico" 1.000 está configurado como límite por defecto en diferentes funciones (CMIS, SOLR…). Y, en efecto, influye sobre el rendimiento general del sistema.

Quizá, como creo que hablamos en alguna ocasión, podríais montar un sistema de clasificación de carpetas y subcarpetas de acuerdo a un UUID de usuario. Sería sencillo montar una prueba de capacidad para identificar el rendimiento aplicando diferentes configuraciones (puedes usar JMeter, un programa standalone, la compleja herramienta Alfresco Bechmark…)

En vuestro caso, parece requerido realizar esta prueba de capacidad para poder identificar los posibles cuellos de botella de la implantación, ya que Alfresco es capaz de manejar 3.000 usuarios.
Hyland Developer Evangelist

Sip, lo del UUID lo tuvimos que descartar ya que es el usuario quien escoge el path de la carpeta, pero estamos montando otro tipo de clasificación para balancear el árbol. Ahora que conozco el NodeLocator estaba pensando en separar por usuario, pero ya haremos pruebas a ver qué nos sale mejor.

Merci de nuevo!