CommandEngine

Descripción

En BBj 16.0 y superior, el CommandEngine es uno de los elementos claves del framework BBJSP, y ayuda a proveer la arquitectura MVC.

Cada BBjspCommand es una clase BBj, que debes definir en el contexto específico del archivo command-config.xml, el que realiza alguna lógica de programa en el procesamiento de request HTTP.

Un comando está enlazado a una URL específica y procesa el request de entrada para hacer decisiones acerca de dónde a continuación. Dependiendo de la lógica de negocios específica, un comando puede dirigir al usuario a otra página web BBJSP.

Por ejemplo, considera un comando de login. El comando recibirá el nombre de usuario y la password desde un Form en la página de login y validará al usuario. Si las credenciales están correctas, entonces el comando agregará alguna información al objeto BBjspWebSession y enviará al usuario a página principal de la Aplicación. Si las credenciales no son válidas entonces el usuario será enviado de regreso a la página de login.

¿Qué es un Comando BBJSP?

Un Comando BBJSP es una clase BBj regular que implementa la interfaz BBjspCommand. Un Comando BBJSP será mapeado dinámicamente a la URL que se especifique, dando a tu código acceso a BBjspCommandContext así como a BBjspSessionData.

El rol primerio de un Comando BBJSP es ejecutar lógica de negocio y retornar el nombre/identificador del comando que será procesado a continuación.

La clase puede extender cualquier otra clase BBj, e implementar cualquier interfaz BBj dentro de tu Aplicación. Un Comando BBJSP será envuelto dinámicamente por un servlet, dando a tu código acceso a BBjspWebSession así como a BBjPipelineSession.

Configurando el Motor de Comandos BBJSP

El Motor de Comandos BBJSP requiere un archivo de configuración .XML, similar al usado por Struts. Todos los archivos de configuración se leen en la partida, y los comandos en su interior son preparados en la aplicación. El comando puede registrar errores y mensajes normales durante la ejecución, los cuales estarán disponibles para la página resultante.

Este es un archivo de configuración simple con una Comando de acción:

<?xml version="1.0" encoding="UTF-8"?> <bbj-command-config> <command-mappings> <command path='/simpleCommand.cmd' classname='SimpleCommand' source='commands/SimpleCommand.bbj'> <forward name='success' path='/success.bbjsp' redirect='false' /> <forward name='fail' path='/fail.bbjsp' redirect='false' /> </command> </command-mappings> </bbj-command-config>

El archivo xml contiene un elemento raíz para <bbj-command-config> . Aquí sólo hay un elemento hijo válido para este el cual es <command-mappings>.

El elemento <command-mappings> tendría encapsulado uno o más elementos <command>.

El elemento <command> tiene los siguientes atributos:

Además de los atributos, el momando puede especificar múltiples elementos <forward> los cuales definen posibles resultados desde un comando, tales como éxito o falla mientras se va a controlar qué ocurre después que la ejecución del comando se complete.

Cada elemento <forward> puede tener los siguientes atributos:

Los Comandos BBJSP se ejecutan como un servlet y tienen acceso al objeto BBjspWebSession así como a la persistencia de sesiones BBJSP en el objeto BBjspSessionData.

Los Comandos BBJSP representan una forma avanzada para separar la lógica de negocios desde la presentación. Pueden almacenar datos como atributos dentro de los cuales será pasados a través del objeto BBjspWebRequest a la página de destino.

Los mensajes de Error y los mensajes regulares se pueden enviar también a través de la página de destino. Los mensajes de Error se pueden usar para destacar entradas erróneas para reingresar el dato o simplemente reportar un status de falla tal como 'Nombre de usuario o password inválido'.

Cuando se actualizan datos es importante que el programa que ejecuta la actualización tenga acceso exclusivo al archivo de datos que se está actualizando. Por esta razón debes usar el comando synchronize para asegurarte que si el comando esta corriendo para un request, que los subsiguientes request esperen hasta que el primero haya finalizado.

Los Comandos Sincronizados deben ser breves en términos de tiempo de ejecución siempre que esto sea posible, quizás ejecutando el update y moviendo a otro comando donde pueda ejecutarse lógica de negocios adicional.

Cómo escribir y configurar un comando

El controlador MVC de BBJSP se basa en comando configurables para controlar el flujo desde la página, a través de la lógica de negocios (en el comando) para otra página. Un comando es un objeto BBj.

Escribe tu programa BBj usando esta plantilla:

REM === UN COMANDO BASICO === class public WibbleCommand implements BBjspCommand method public BBjspCommandResult execute(BBjspCommandContext context!) declare BBjspCommandResult result! result! = context!.getResult() request! = context!.getRequest() response! = context!.getResponse() session! = request!.getSession() REM === REM === ESCRIBE TU LOGICA DE NEGOCIOS AQUI REM === result!.setForward("success") methodret result! methodend classend

Agrega la configuración al archivo command-engine.xml usando esta plantilla:

<command path='/wibble.cmd' classname='WibbleCommand' source='commands/WibbleCommand.bbj' > <forward name='success' path='/okpage.bbjsp' redirect='false' /> <forward name='fail' path='/failPage.bbjsp' redirect='false' /> </command>

Asegúrate que classname y source coincidan con el archivo fuente BBj que creaste.

Comentarios

Siempre que cambies el archivo command-engine.xml necesitarás reiniciar BBjServices...

Revisa también

BBJSP

BBjspCommand