Presentación de la especificación de portlet, parte 1

Con la aparición de un número creciente de portales empresariales, varios proveedores han creado diferentes API para los componentes del portal, denominados portlets. Esta variedad de interfaces incompatibles genera problemas para los proveedores de aplicaciones, los clientes del portal y los proveedores de servidores del portal. Para superar estos problemas, se inició JSR (Solicitud de especificación de Java) 168, la Especificación de portlet, para proporcionar interoperabilidad entre portlets y portales.

JSR 168 define los portlets como componentes web basados ​​en Java, gestionados por un contenedor de portlets, que procesan solicitudes y generan contenido dinámico. Los portales utilizan portlets como componentes de interfaz de usuario conectables que proporcionan una capa de presentación a los sistemas de información.

Los objetivos de JSR 168 son los siguientes:

  • Definir el entorno de ejecución, o el contenedor de portlets, para portlets
  • Definir la API entre el contenedor de portlets y los portlets
  • Proporcionar mecanismos para almacenar datos transitorios y persistentes para portlets.
  • Proporcionar un mecanismo que permita que los portlets incluyan servlets y JSP (JavaServer Pages)
  • Defina un paquete de portlets para permitir una implementación sencilla
  • Permitir la portabilidad de portlets binarios entre portales JSR 168
  • Ejecute los portlets JSR 168 como portlets remotos utilizando el protocolo Web Services for Remote Portlets (WSRP)

La industria de TI ha aceptado ampliamente JSR 168. Todas las principales empresas en el espacio del portal forman parte del grupo de expertos JSR 168: Apache, ATG, BEA, Boeing, Borland, Broadvision, Citrix, EDS, Fujitsu, Hitachi, IBM, Novell, Oracle , SAP, SAS Institute, Sun Microsystems, Sybase, TIBCO y Vignette. La lista de seguidores oficiales es aún más larga.

Actualmente, JSR 168 está en revisión pública y la versión final está prevista para septiembre de 2003.

En este artículo, primero definimos portales y portlets, luego explicamos los conceptos que JSR 168 introduce, incluidos los objetos básicos de la API. A continuación, nos sumergimos en las funciones más avanzadas de JSR, como la información del usuario, la localización y el almacenamiento en caché. Luego, cubrimos los puntos de extensión que permiten a los proveedores de portales extender la funcionalidad definida actualmente en la especificación del portlet. El artículo concluye con la descripción del empaquetado y despliegue de la aplicación de portlet.

Lea la serie completa sobre la especificación de portlet:

  • Parte 1: mojarse los pies con los términos y conceptos subyacentes de la especificación
  • Parte 2: la implementación de referencia de la API de Portlet revela sus secretos

Definiciones basicas

En esta sección, explicamos las definiciones básicas que se utilizan en la especificación del portlet, incluida la arquitectura básica de un portal, el contenedor del portlet y una página del portal.

Portal

Un portal es una aplicación basada en la web que proporciona personalización, inicio de sesión único y agregación de contenido de diferentes fuentes, y aloja la capa de presentación de los sistemas de información. La agregación es el proceso de integrar contenido de diferentes fuentes dentro de una página web. Un portal puede tener funciones de personalización sofisticadas para proporcionar contenido personalizado a los usuarios. Las páginas del portal pueden tener diferentes conjuntos de portlets que crean contenido para diferentes usuarios.

La Figura 1 muestra la arquitectura básica de un portal. La aplicación web del portal procesa la solicitud del cliente, recupera los portlets en la página actual del usuario y luego llama al contenedor del portlet para recuperar el contenido de cada portlet. El contenedor de portlets proporciona el entorno de ejecución para los portlets y llama a los portlets a través de la API de portlets. El contenedor de portlet se llama desde el portal a través de la API Portlet Invoker; el contenedor recupera información sobre el portal utilizando Portlet Provider SPI (Service Provider Interface).

Página

La Figura 2 muestra los componentes básicos de la página del portal. La propia página del portal representa un documento de marcado completo y agrega varias ventanas de portlet. Además de los portlets, la página también puede constar de áreas de navegación y banners. Una ventana de portlet consta de una barra de título con el título del portlet, las decoraciones y el contenido producido por el portlet. Las decoraciones pueden incluir botones para cambiar el estado y el modo de la ventana del portlet (explicamos estos conceptos más adelante).

Portlet

Como se mencionó anteriormente, un portlet es un componente web basado en Java que procesa solicitudes y genera contenido dinámico. El contenido generado por un portlet se denomina fragmento, un fragmento de marcado (por ejemplo, HTML, XHTML o WML (Lenguaje de marcado inalámbrico)) que se adhiere a determinadas reglas. Un fragmento se puede agregar con otros fragmentos para formar un documento completo, como se muestra en la Figura 3. El contenido de un portlet normalmente se agrega al contenido de otros portlets para formar la página del portal. Un contenedor de portlet gestiona el ciclo de vida de un portlet.

Los clientes web interactúan con los portlets a través de un paradigma de solicitud / respuesta implementado por el portal. Por lo general, los usuarios interactúan con el contenido producido por portlets, por ejemplo, siguiendo enlaces o enviando formularios, lo que da como resultado que el portal reciba acciones de portlet, que luego reenvían a los portlets a los que apuntan las interacciones del usuario.

El contenido generado por un portlet puede variar de un usuario a otro dependiendo de la configuración del usuario del portlet.

Contenedor de portlet

Un contenedor de portlets ejecuta portlets y les proporciona el entorno de ejecución necesario. Un contenedor de portlets contiene portlets y gestiona sus ciclos de vida. También proporciona mecanismos de almacenamiento persistentes para las preferencias del portlet. Un contenedor de portlets recibe solicitudes del portal para ejecutar solicitudes en los portlets que aloja. Un contenedor de portlets no es responsable de agregar el contenido producido por los portlets; el portal mismo maneja la agregación.

Un portal y un contenedor de portlet se pueden construir juntos como un solo componente de una suite de aplicaciones o como dos componentes separados de una aplicación de portal.

Conceptos

Esta sección explica los conceptos básicos de programación en JSR 168, como el ciclo de vida, la interfaz, los modos y los estados de ventana de un portlet, así como el acceso a la sesión, el acceso al almacenamiento persistente y cómo incluir servlets y páginas JSP.

Ciclo de vida del portlet

El ciclo de vida básico del portlet de un portlet JSR 168 es:

  • Init: inicializar el portlet y ponerlo en servicio
  • Manejar solicitudes: procesar diferentes tipos de acciones y solicitudes de procesamiento
  • Destruir: poner el portlet fuera de servicio

El contenedor del portlet gestiona el ciclo de vida del portlet y llama a los métodos correspondientes en la interfaz del portlet.

Interfaz de portlet

Cada portlet debe implementar la interfaz del portlet o ampliar una clase que implemente la interfaz del portlet. La interfaz del portlet consta de los siguientes métodos:

  • init(PortletConfig config):para inicializar el portlet. Este método se llama solo una vez después de crear una instancia del portlet. Este método se puede utilizar para crear objetos / recursos costosos utilizados por el portlet.
  • processAction(ActionRequest request, ActionResponse response):para notificar al portlet que el usuario ha desencadenado una acción en este portlet. Solo se activa una acción por solicitud del cliente. En una acción, un portlet puede emitir una redirección, cambiar su modo de portlet o estado de ventana, modificar su estado persistente o establecer parámetros de representación.
  • render(RenderRequest request, RenderResponse response):para generar el marcado. Para cada portlet de la página actual, se llama al método de representación, y el portlet puede producir un marcado que puede depender del modo del portlet o del estado de la ventana, parámetros de representación, atributos de solicitud, estado persistente, datos de sesión o datos de backend.
  • destroy():para indicar al portlet el final del ciclo de vida. Este método permite que el portlet libere recursos y actualice los datos persistentes que pertenezcan a este portlet.

Modos de portlet

Un modo de portlet indica la función que realiza un portlet. Por lo general, los portlets ejecutan diferentes tareas y crean contenido diferente según las funciones que realizan actualmente. Una modalidad de portlet informa al portlet qué tarea debe realizar y qué contenido debe generar. Al invocar un portlet, el contenedor de portlet proporciona la modalidad de portlet actual al portlet. Los portlets pueden cambiar su modo mediante programación al procesar una solicitud de acción.

JSR 168 divide los modos de portlet en tres categorías:

  1. Modos requeridos: cada portal debe admitir los modos Editar, Ayuda y Ver. Un portlet debe admitir al menos el modo de vista utilizado para representar el marcado de una página. El modo de edición se utiliza para cambiar la configuración de cada usuario para personalizar el marcado del portlet, y el modo de ayuda se utiliza para mostrar una pantalla de ayuda.
  2. Modos personalizados opcionales: estos son modos que puede admitir un portal; mientras está en una modalidad opcional, es posible que no se llame a un portlet. Los modos opcionales incluyen el modo Acerca de para mostrar un mensaje "acerca de"; el modo de configuración para permitir que los administradores configuren el portlet; Modo Edit_defaults para permitir que un administrador preestablezca los valores del modo Edit; el modo Vista previa para mostrar la vista previa del portlet; y el modo de impresión para generar una vista que se puede imprimir fácilmente.
  3. Modos específicos del proveedor del portal: estos modos no están definidos en la especificación y, por lo tanto, son específicos del proveedor.

Estados de ventana

Un estado de ventana indica la cantidad de espacio de la página del portal que se asignará al contenido generado por un portlet. Cuando se invoca un portlet, el contenedor del portlet proporciona el estado actual de la ventana al portlet. El portlet puede utilizar el estado de la ventana para decidir cuánta información debe representar. Los portlets pueden cambiar el estado de su ventana mediante programación al procesar una solicitud de acción.

JSR 168 define los siguientes estados de ventana:

  • Normal: indica que un portlet puede compartir la página con otros portlets. Este es el estado de ventana predeterminado.
  • Maximizado: indica que un portlet puede ser el único portlet en la página del portal o que el portlet tiene más espacio en comparación con otros portlets en la página del portal y, por lo tanto, puede producir contenido más rico que en un estado de ventana normal.
  • Minimizado: indica que el portlet solo debe generar una salida mínima o ninguna salida.

Además de estos estados de ventana, JSR 168 permite que el portal defina estados de ventana específicos del proveedor.

Se puede llamar a un portlet en cualquiera de estos tres estados de ventana, pero es libre de producir el mismo marcado para los tres estados.

Tienda persistente

El portlet puede almacenar datos persistentes para un usuario específico utilizando el PortletPreferencesobjeto. Las preferencias se pueden leer y escribir en la fase de acción y leer en la fase de renderizado. El modo preferido para escribir preferencias es el modo Editar, que proporciona al usuario una pantalla de personalización. Las preferencias pueden ser cadenas o valores de matriz de cadenas asociados con una clave de tipo cadena. Las preferencias se pueden preestablecer con valores predeterminados en el descriptor de implementación.

Las preferencias y la definición del portlet en el descriptor de despliegue definen juntos un portlet, a veces denominado entidad de portlet.

Sesiones

El concepto de sesión de JSR 168 se basa en lo HttpSessiondefinido para aplicaciones Web. Como las aplicaciones de portlet son aplicaciones web, utilizan la misma sesión que los servlets. Para permitir que los portlets almacenen datos temporales privados en un portlet, el ámbito de sesión predeterminado es el ámbito del portlet . En este ámbito, el portlet puede almacenar la información necesaria en las solicitudes de los usuarios y específica de una entidad de portlet. Los atributos almacenados con este ámbito tienen el prefijo del contenedor de portlets en la sesión para evitar que dos portlets (o dos entidades de la misma definición de portlet) sobrescriban la configuración del otro.

Además del ámbito de la sesión del portlet, JSR 168 da soporte al ámbito de la sesión de la aplicación web . En este ámbito, todos los componentes de la aplicación web pueden acceder a la información. La información se puede utilizar para compartir el estado transitorio entre diferentes componentes de la misma aplicación web (por ejemplo, entre portlets o entre un portlet y un servlet).

Incluyendo servlets / páginas JSP

Para dar soporte al patrón Modelo-Vista-Controlador, el portlet debe poder incluir contenido generado a partir de servlets y páginas JSP. De esta forma, el portlet puede actuar como controlador, llenar un bean con datos e incluir una página JSP para representar la salida.

En JSR 168, el mecanismo de inclusión para servlets y páginas JSP es el mismo para la API de servlet. A través del contexto del portlet, se recupera un despachador de solicitudes para una ruta determinada; include()luego se llama al método en este objeto request-dispatcher:

PortletRequestDispatcher rd = getPortletContext (). GetRequestDispatcher (editJSP); rd.include (portletRequest, portletResponse);

Alineación con WSRP

WSRP agrega contenido producido por portlets que se ejecutan en máquinas remotas que utilizan diferentes entornos de programación, como J2EE (Java 2 Platform, Enterprise Edition) y .Net. Los servicios WSRP son servicios web orientados a la presentación y orientados al usuario que se conectan y funcionan con portales u otras aplicaciones. Permiten que las empresas proporcionen contenido o aplicaciones sin necesidad de ningún contenido manual o adaptación específica de la aplicación mediante el consumo de portales; Los portales pueden agregar fácilmente servicios WSRP sin esfuerzo de programación.

El grupo de expertos JSR 168 alineó cuidadosamente los conceptos entre JSR 168 y WSRP. La siguiente lista describe en qué medida se han alineado los conceptos principales entre ambos estándares: