J.Alberto
Stranger
Ingresó: 27-feb-2009
Mensajes: 11
Estado:
Desconectados
|
Buenos días a todos!
Tenemos una web con OpenCMS 9.5.3 en la cual estamos teniendo un problema de rendimiento al abrir enlaces dentro de un contenido estructurado (vía VFSWidget), o bien cuando intentamos abrir una galería de descargas o imágenes desde el editor de texto. Después de "debuggear" el código, nos encontramos que en el método "getGalleriesByType" de la clase "org.opencms.ade.galleries.CmsGalleryService" del core de OpenCMS, intenta leer todos los recursos de la instancia para encontrar los diferentes archivos. Aquí el código original:
try { galleries.addAll( getCmsObject().readResources( "/", CmsResourceFilter.ONLY_VISIBLE_NO_DELETED.addRequireType(galleryTypeId))); } catch (Exception e) { LOG.error("Could not read site galleries: " + e.getLocalizedMessage(), e); }
En sitio web pequeño esto no supone un problema, pero en nuestro caso, con miles de archivos y más de 300 OUs hace que sea impracticable. Para solucionarlo hemos tocado el core haciendo que solamente lea los recursos del proyecto al cual pertenece el usuario que intenta abrir las galerías. El problema es que no queremos tener que tocar el núcleo, por lo que nos gustaría saber si alguien está en nuestra situación o conoce una manera más limpia para sortear este problema.
Os pego el código del método que hemos dejado:
/** * Generates a list of available galleries for the given gallery-type.<p> * * @param galleryTypeId the gallery-type * * @return the list of galleries * */ private List<CmsResource> getGalleriesByType(int galleryTypeId) {
List<CmsResource> galleries = new ArrayList<CmsResource>();
List ouresources = new ArrayList();
try {
CmsOrgUnitManager oumanager = OpenCms.getOrgUnitManager(); //Read OU resources ouresources.addAll( oumanager.getResourcesForOrganizationalUnit( getCmsObject(), getCmsObject().getRequestContext().currentProject().getOuFqn()));
//If root read "/" if (getCmsObject().getRequestContext().currentProject().getOuFqn().equals("")) {
galleries.addAll( getCmsObject().readResources( "/", CmsResourceFilter.ONLY_VISIBLE_NO_DELETED.addRequireType(galleryTypeId))); } else { for (int k = 0; k < ouresources.size(); k++) { // get the galleries of the current site CmsResource r = ((CmsResource)ouresources.get(k));
galleries.addAll( getCmsObject().readResources( getCmsObject().getRequestContext().removeSiteRoot(r.getRootPath()), CmsResourceFilter.ONLY_VISIBLE_NO_DELETED.addRequireType(galleryTypeId))); } } } catch (CmsException e) { // error reading resources with filter LOG.error(e.getLocalizedMessage(), e); }
return galleries;
}
Muchas gracias a todos!
Saludos!
|