Infraestructura Struts de HCL Commerce

Struts es una infraestructura bien documentada, desarrollada y popular para construir interfaces de usuario para aplicaciones Java. Para abordar los aspectos de las aplicaciones de software, utiliza una arquitectura de modelo-vista-controlador (MVC): El modelo representa el código del negocio o la base de datos, la vista representa el código de diseño de página y el controlador representa el código de navegación.

En el siguiente diagrama se muestran las interacciones entre los componentes clave de la aplicación web de HCL Commerce. A continuación del diagrama se muestra una breve descripción de cada componente clave. HCL Commerce utiliza actualmente Struts versión 1.1. Para obtener información general sobre Struts, consulte Struts official home page.

Interacciones entre los componentes clave de la aplicación web de HCL Commerce

Servlet de acciones

Action servlet es un componente de controlador clave que implementa los mismos métodos y tiene el mismo ciclo de vida que javax.servlet.http.HttpServlet.

Tal como se muestra en los pasos 1 y 2 del diagrama anterior, el servlet de acciones recibe una petición HTTP, utiliza los archivos de configuración de Struts para determinar el módulo de aplicación adecuado y dirige la petición al procesador de peticiones del módulo.

El servlet de acciones también se ocupa de la inicialización y borrado de recursos.

ECActionServlet (com.ibm.commerce.struts.ECActionServlet) es la extensión de HCL Commerce de la clase ActionServlet de Struts (org.apache.struts.action.ActionServlet). Proporciona funcionalidad adicional, como la capacidad de renovar la configuración de Struts sin reiniciar la aplicación web, que necesitan diversos componentes de HCL Commerce.

Esta implementación se define como el servlet de acción en el descriptor de aplicaciones web de HCL Commerce y debe utilizarse en la aplicación web de HCL Commerce.

Procesador de peticiones

Después de recibir una petición HTTP del servlet de acciones, el request processor, otro componente de controlador clave, lleva a cabo el proceso de peticiones básicas como se indica a continuación:

  1. Determina determinadas características de peticiones, como el tipo de contenido y el entorno local, que son necesarias para un proceso adicional.
  2. Utiliza el archivo de configuración de Struts del módulo para determinar la correlación de acciones configuradas para la petición.
  3. Utiliza el archivo de configuración de Struts del módulo para localizar o crear una instancia de un formulario de acciones adecuado para la petición, si es necesario, y lo rellena y valida.
  4. Utiliza el archivo de configuración de Struts del módulo para localizar o crear una instancia de una acción adecuada para la petición.
  5. Pasa la petición, el formulario de acciones y la correlación de acciones a la acción (paso 3 en el diagrama anterior).
  6. Remite al usuario al elemento de vista adecuado cuando la acción se ha completado (paso 6 en el diagrama anterior).

De forma predeterminada, HCL Commerce está configurado para utilizar la implementación de procesador de peticiones estándar proporcionado por la infraestructura de Struts. Dado que no necesita una implementación personalizada, la aplicación web de iHCL Commerce puede utilizar cualquier procesador de peticiones especializado, como el necesario para el soporte de Tiles.

Acciones

Actions llevan a cabo la lógica de controlador para la petición individual, como la autorización y la lógica de sesión, localizando y llamando a la lógica (modelo) de negocio adecuada, etc.

Las acciones unen una petición entrante y la correspondiente lógica de negocio que se debe ejecutar para procesarla. Las acciones utilizan datos de formularios de acciones para invocar operaciones de lógica de negocio en nombre del cliente (paso 4 en el diagrama anterior) y devolver un objeto ActionForward que indica el lugar al que el controlador debe remitir al usuario (paso 5 en el diagrama anterior).

Se crea una clase Action para dar soporte a cada tipo de petición que el controlador recibe.

BaseAction (com.ibm.commerce.struts.BaseAction) es la extensión de HCL Commerce de la clase de acción de Struts (org.apache.struts.action.Action). Proporciona la funcionalidad necesaria para invocar mandatos de HCL Commerce basándose en la configuración de la acción proporcionada por la correspondiente correlación de acciones. La acción base también proporciona ganchos de llamada para que la acción que se va a ampliar incluya lógica de pre y postproceso adicional.

Cualquier acción personalizada que invoque mandatos de HCL Commerce debe ampliar esta clase.

Correlaciones de acciones

Action mappings representan la información que el controlador tiene sobre la correlación de una petición concreta y una instancia de una clase Action específica. El procesador de peticiones selecciona una acción adecuada para cada petición en función de las correlaciones de acciones (elementos action-mapping) definidas en el archivo de configuración de Struts.

La clase ActionMapping base amplía org.apache.struts.config.ActionConfig, que representa toda la información de configuración proporcionada en un elemento action de un archivo de configuración de módulos de Struts.

ECActionMapping (com.ibm.commerce.struts.ECActionMapping) es la extensión de HCL Commerce de la clase ActionMapping de Struts (org.apache.struts.action.ActionMapping) que permite pasar información de configuración personalizada a las acciones de la aplicación web de HCL Commerce. Estas incluyen propiedades personalizadas específicas de HCL Commerce y propiedades adicionales arbitrarias:

  • Las propiedades https, authenticate y credentialsAccepted son ejemplos de propiedades personalizadas específicas de HCL Commerce. (Consulte Configurar una aplicación web para ver ejemplos de cómo establecer estas propiedades de forma declarativa.)
  • Las propiedades arbitrarias adicionales se pueden pasar a instancias de las clases de acciones basándose en la clase BaseAction estableciendo la propiedad denominada defaultProperties.
    Nota: La propiedad defaultProperties sustituye al atributo parameter utilizado en org.apache.struts.action.ActionMapping. En HCL Commerce, se utiliza el último para proporcionar el nombre de la interfaz del mandato de controlador que una acción debe utilizar.

Para especificar una correlación para una instancia de la clase BaseAction o sus descendientes, debe utilizar o ampliar la clase ECActionMapping.

Formulario de acciones

Action forms son un componente de vista clave que se utiliza para transferir información entre la vista y la pareja controlador-modelo.

Un objeto ActionForm es una representación Java (JavaBeans) de datos de formulario HTML. Como tal, encapsula datos de formulario para una fácil inserción y recuperación de datos, soporta validación de datos de formulario y se puede reutilizar.

La infraestructura de Struts transfiere automáticamente los datos de entrada a objetos ActionForm.

A partir de la versión 1.1, Struts también da soporte a formularios de acciones dinámicas. Se trata de subclases ActionForm reutilizables incorporadas que se pueden configurar utilizando XML en lugar de crear de forma explícita una clase ActionForm para cada formulario de entrada. Los formularios de acciones dinámicos permiten a los desarrolladores crear declarativamente formularios de acciones en el archivo de configuración de Struts sin tener que crear una clase ActionForm para cada tipo de formulario HTML o cambiar la clase cada vez que se modifica el correspondiente formulario HTML.

La infraestructura de Struts crea una instancia de la clase DynaActionForm para cada definición form-bean de tipo DynaActionForm (o su subtipo) durante la ejecución.

Acciones de redirección

Action forwards, correctamente consideradas como parte del controlador, representan el siguiente recurso web, normalmente una página HTML o JSP, del flujo de control de la aplicación. Devuelto por una acción, un objeto ActionForward indica el lugar en el que el procesador de peticiones debe remitir al usuario.

Las instancias ActionForward se pueden crear de forma explícita en una clase Action o configurarse previamente en el archivo de configuración de Struts (mediante elementos forward dentro de elementos global-forward o elementos action) y ubicarse durante la ejecución.

ECActionForward (com.ibm.commerce.struts.ECActionForward) es la extensión de HCL Commerce de la clase ActionForward de Struts (org.apache.struts.action.ActionForward). Las características que la distinguen son:

  • Posibilidad de especificar propiedades adicionales de reenvío de finalidad especial como resourceClassName
  • Posibilidad de pasar una colección de propiedades de vista definidas por el usuario (y sus valores) a través de una propiedad con varios valores denominada properties, en forma de una serie de consulta de solicitud HTTP (consulte Configurar una aplicación web para ver ejemplos de cómo definir declarativamente esta propiedad y las anteriores)
  • Posibilidad de ejecutar una vista directamente (consulte la documentación API de la clase ECActionForward para obtener más información)

Limitaciones

Tenga en cuenta las siguientes limitaciones al trabajar con la infraestructura Struts de HCL Commerce:
  • No se soporta el almacenamiento en memoria caché para mandatos que utilizan AjaxAction. En su lugar, utilice un método que esté habilitado para la memoria caché. Por ejemplo:
    • Utilice servicios REST. Los servicios REST soportan el almacenamiento en memoria caché de lado del servidor utilizando dynacache y el almacenamiento en memoria caché del lado de cliente utilizando las directivas de memoria caché de la cabecera de respuesta.
    • Utilice el mandato BaseAction. El almacenamiento en memoria caché se puede utilizar para mandatos de acción que solo muestran información, pero que no causan actualizaciones de base de datos o cambios de estado. Para generar información de error en la respuesta AJAX, pase un parámetro requesttype=ajax como parte de la petición de acción.

Archivos de configuración de Struts

Tanto el servlet de acciones como el procesador de peticiones dependen de los Struts configuration files para obtener información de componentes de la aplicación, lo que permite realizar una configuración declarativa, en lugar de mediante programa, de una aplicación web basada en Struts.

El archivo de configuración de Struts se analiza durante la inicialización de servlets de acciones y se crea un objeto ModuleConfig para representarlo durante la ejecución.

Una aplicación puede tener definido un solo archivo de configuración de Struts (struts-config.xml) o varios archivos de configuración de Struts, en el descriptor de despliegue de aplicaciones web (mediante elementos init-param). De forma predeterminada, HCL Commerce proporciona varios archivos de configuración de Struts por modulo, uno para las definiciones y otro para las personalizaciones y la migración. Se recomienda utilizar varios archivos de configuración de Struts, ya que facilita el desarrollo paralelo y permite realizar la configuración con menos errores.