viernes, 28 de octubre de 2011

Oracle WebCenter Portal PS3: Bug al ejecutar Task Flows con inline-popups

Uno de los Bug más curiosos que me encontré al aterrizar en la versión PS3 de Oracle WebCenter fue el siguiente:

Al ejecutar Custom ADF Task Flows que a su vez ejecutan otros Task Flows en forma de Dialog/inline-popup en una aplicación de Oracle WebCenter Portal. Me encontré que los popups, en Firefox/Chrome, renderizaban la misma página del Portal en la que se encontraba el Task Flow invococador en lugar del Task Flow al que invocaba. Curiosamente este "Bug" no ocurría en Internet Explorer.

Enlace de descarga

Aquí os presento un sencillo ejemplo que presenta el curioso Bug y una solución de contingencia al mismo hasta que encuentre una solución limpia a ello.
  • En primer lugar crear una Fusion Middleware Application (ADF) del cual generar una ADF JAR Library con los Custom ADF Task Flows que se van a ejecutar en la aplicación de WebCenter.
  • Básicamente generar 2 ADF Bounded Task Flows:
    • Uno basado en page-fragments (jsff), que actuará como el llamador.
    • Uno basado en pages (jspx) que será el Task Flow que se renderizará en el popup.
Task Flow llama a otro en forma de Diálogo / inline-popup
  • El ADF Task Flow basado en fragmentos llamará al otro como Run-as-Dialog / inline-popup.
    Propiedades de la llamada al Task Flow en diálogo
  • Crear una aplicación de WebCenter Portal e incluir nuestro Task Flow al catálgo de la misma. (Podeis hacerlo como comenté en un Post Anterior de cómo incluir Task Flows en aplicacines de WebCenter Portal).
  • Ejecutar la aplicación de WebCenter Portal. Incluir mediante Oracle Composer el Task Flow invocador del diálogo y ejecutar el mismo.
    Se puede observar que en Firefox/Chrome no renderiza el Task Flow que en Internet Explorer si.

    Ejecución en Firefox

    Ejecución en IE 8
  • El Task Flow invocador ha sido añadido una página del Navigation-Model que es renderizada en la Template asignada (y no realiza redirección).
    Configuración página Home como Render URL in Page Template
    En este caso, en Firefox y Chrome siempre se renderiza la misma página en lugar que el Task Flow que debería invocar, además de obtener una excepción a la hora de cerrar el diálogo.
  • Como solución de contingencia, si el Task Flow es añadido en una página que tiene configurado, en el Navigation-Model, que en lugar de renderizar la URL en la Page Template realizará una redirección a esa URL.
    Configuración de la página Redirect como Redirect to URL
  • Al ejecutar el Task Flow invocador en esta página en cualquier navegador, el popup renderizará el Task Flow en lugar de la misma página del Portal.

    Ejecución en Firefox
Conclusión: Como solución de contingencia hasta que sepa realmente porque ocurre este Bug recomiendo que la página que contenga un ADF Task Flow con este tipo de configuración, cambie su configuración del Navigation-Model para que realice una redirección a la URL.

Pruebas: Realmente no lo he probado, pero si en vez de usar la configuración por defecto para ejecutar un Task-Flow como diálogo/inline-popup realizamos esta funcionalidad manualmente con <af:dialog> y <af:popup>, creo que funcionará perfectamente. (Incluso también mediante API de RichFaces invocar a un Popup).

Referencias: Entrada de OTN al respecto de este Bug.

Ejemplo desarrollado en JDeveloper 11.1.1.4 con la extensión de Oracle WebCenter.

Descarga: Ejemplo descargable.

Un saludo a todos.

jueves, 27 de octubre de 2011

Oracle WebCenter Content (UCM): Propagación de metadatos de las carpetas


La propagación de Metadata de las carpetas a los contenidos almacenados en la misma se realiza mediante la siguiente configuración.
  • Primer se debe seleccionar en la configuración del componente Folders_g de Oracle WebCenter Content (UCM) los metadatos que van a ser propagados.

    Configuración de qué metadatos propagar
  • En las carpetas que queremos que propaguen metadatos, debemos indicarles en el metadato Inhibit Propagation que lo haga estableciéndolo al valor “False”.
    Metadato que indica la propagación
  • Al realizar Check-in de nuevos contenidos en la carpeta desde UCM, los metadatos propagados estarán auto-rellenados.
Sin embargo, cuando realizamos una carga masiva de contenidos desde BatchLoader en una carpeta determinada, no se rellenan automáticamente los metadatos propagados desde la carpeta.
Por ello es necesario ejecutar la función Propagate desde la sección info de la carpeta.
Función de propagación de metadatos en la info de una carpeta
Un saludo a todos

martes, 25 de octubre de 2011

Procesamiento de XML y uso de XSLT en aplicaciones de SiteStudio o WebCenter

Una de los problemas más comunes a la hora de utilizar XSTL (JSTL para XML), o transformaciones XSL (x:transform por ejemplo) en nuestras aplicaciones de Oracle WebCenter o SiteStudio XA (SSXA) suele residir en el SAX Parser registrado tanto en WebLogic, como en nuestra aplicación.

El error más usual es el siguiente:

XML-22108: (Error) Invalid Source - URL format is incorrect. XML-22000: (Fatal Error) Error while parsing XSL file (weblogic.xml.jaxp.RegistryXMLReader cannot be cast to oracle.xml.parser.v2.SAXParser).

¿Qué significa este error?. 

Que WebLogic por su lado esta utilizando y tiene registrado los "Factory" de la librería xerces.jar y por nuestro lado tenemos en nuestro Classpath de la aplicación la librería de Oracle XML Parser v2. 

¿Cómo se soluciona este error?.

Las posibles soluciones a este error tienen 2 vertientes principalmente:

  • Registrar en WebLogic el Parser Oracle XML Parser v2 e incluirlo en su classpath. (Solución 1).
  • Directamente en el archivo weblogic-application.xml  de nuestra aplicación registrar el "parser" que tiene registrado actualmente WebLogic. (Solución 2).
En el siguiente ejemplo muestro unas imágenes acerca de la Solución 2:
  • En la consola de Administración, en la home de la misma podemos registrar un nuevo "parser". Al intentar generar uno nuevo, vendrá por defecto relleno con los siguientes valores.

    Configuración de Parser por defecto de WebLogic basado en Xerces
  • Copiar estos valores en el archivo de configuración weblogic-application.xml de nuestra aplicación.
    Archivo weblogic-application.xml de una aplicación J2EE con JDeveloper
Al desplegar de nuevo la aplicación podremos observar que se habrá solventado el quebradero de cabeza que suele dar este error :).

Espero haber ayudado un poco :).

Un saludo a todos.

Agradecimientos a Daniel Pascual por su aportación en esta entrada.

PD: Pronto más WebCenter y ADF.



lunes, 24 de octubre de 2011

Site Studio (SSXA): Cache de consultas RIDC

Una de las novedades de Site Studio for eXternal Applications (SSXA) es la posibilidad de "cachear" los resultados procedentes de consultas RIDC.

Por ello únicamente es necesario añadir, en las consultas "cacheables", los siguientes parámetros:

  • __ssxaCacheEnabled: Flag que establece si vamos a cachear la consulta. Para ello establecerlo a true.
  • __ssxaCacheKey: Para el caso en el que se quiera especificar la clave de caché a utilizar.
  • __ssxaCacheFields: Campos que se van a usar para "cachear" el contenido. Si no se especifica utilizará toda la información local.
  • __ssxaCacheTTL: Es el tiempo de vida del contenido en caché medido en milisegundos. Por defecto, si no se especifica valor es de 5 minutos.
Un ejemplo de uso:

Ejemplo de servicio RIDC cacheado

En el caso de querer administrar/monitorizar la caché manualmente. Se puede acceder a su administración desde la consola del Content Server de Oracle WebCenter Content (UCM):
  • Navegar hasta Administration > Site Studio Administration > External Applications Administration.
    Administración de SSXA Caché
Por último comentar que el contenido cacheado queda almacenado en archivos de formato .hda en una estructura de carpetas con la siguiente nomenclatura:

/idc-service/service_name/user_name/cacheID.hda

Donde:
  • service_name: Es el nombre del servicio RIDC ejecutado. Por ejemplo: get_search_results.
  • user_name: Nombre del usuario que ejecutó el servicio RIDC.
  • cacheID: Compuesto por el __ssxaCacheKey y __ssxaCacheFields en el caso de haber sido proporcionados.
Un saludos a todos.

Referencia: Documentación oficial de Oracle para SSXA.

PD: Espero tener el ejemplo de integración WebCenter Spaces API - WebCenter Portal pronto :).

lunes, 3 de octubre de 2011

Rendimiento en aplicaciones de WebCenter (Performance)

Hola.

Aquí os traigo un breve bloque de referencias sobre como mejorar el rendimiento de nuestros portales de WebCenter.

Por un lado, en el capítulo 22 de la documentación oficial de Oracle encontramos diferentes formas de mejorar el rendimiento de nuestra aplicación. En ella podemos encontrar varios tipos de configuraciones que podemos realizar tanto a nivel de aplicación como de configuración externa:

  • Configuración del DataSource de WebCenterDS recomienda que se incrementen los "pooles" iniciales de conexión al igual qué parámetros que por defecto vienen en un valor bastante bajo.
  • Configuraciones de la JVM y WebLogic como pueden ser el aumento de la memoria asignada a la JVM ó la configuración del garbage collector
  • Configuración de la duración de la sesión y del tiempo de expiración de las JSP de nuestra aplicación de WebCenter para la liberación de memoria de aquellos recursos que son usados con menor frecuencia.
  • "Setting ADF Client State Token". Es el número de páginas que el usuario puede guardar en la pila en caso de dar al botón Back del navegador. Contra más páginas se guarden mayor rendimiento. Sin embargo, esto tiene una penalización de uso de CPU y memoria. Hay que encontrar una cifra de equilibrio.
  • También hace referencia para aumentar la capacidad de almacenamiento de la caché del MDS.
  • Y por último hace referencia a cómo mejorar el rendimiento de servicios proporcionados por el framework de WebCenter.
Por otro lado también podemos mejorar el rendimiento de nuestras aplicaciones de WebCenter almacenando en caché recursos estáticos internos a nuestra aplicación de WebCenter que no se encuentren en un frontal (Servidor Web). Para ello es necesario la modificación del archivo adf-config.xml como se indica en la siguiente página de cómo mejorar el rendimiento en aplicaciones ADF.

Por último comentar (gracias a Luis Villa por este reporte) un pequeño detalle a la hora de integrar nuestras aplicaciones de WebCenter con UCM para la visualización de contenidos.
Si existe el caso en el que es necesario aplicar una política de seguridad tan estricta como que se llegue al punto de que puede haber un grupo de seguridad por cada documento o contenido. UCM genera Queries  mediante operadores OR para verificar si el documento es accesible por un usuario o no.
¿Qué significa? Las Queries a base de datos con operadores OR son muy lentas por lo que cada consulta penalizará seriamente el rendimiento del Portal.

También existen ciertos trucos para aumentar el rendimiento de ADF en caso de usar Business Components u otras partes de ADF. En el Blog de Andrejus Baranovskis's encontraréis muchos trucos para incrementar el rendimiento de vuestras aplicaciones ADF / WebCenter.

Un saludo a todos :).

domingo, 2 de octubre de 2011

Integración WebCenter - UCM (PS3): Obtener conexión RIDC mediante Java (II)

Hola.

Respecto al a entrada: Integración WebCenter - UCM (PS3): Obtener conexión RIDC mediante Java añadir que existe una librería para el acceso al nombre de la conexión primaria RIDC configurada en nuestra aplicación de WebCenter:

String connectionName = DocLibADFConfigUtils.getPrimaryConnectionName();

Con ella podremos acceder al nombre configurado de la conexión UCM de forma transparente.

Un saludo.