Modelo de programación de mandatos de tarea

Un mandato de tarea nuevo debe ampliar la clase de mandato de tarea abstracta com.ibm.commerce.command.TaskCommandImpl e implementar una interfaz que amplíe la interfaz com.ibm.commerce.command.TaskCommand.

En el siguiente diagrama se muestra la relación entre la interfaz y la clase de implementación de un nuevo mandato de controlador y la interfaz y clase de implementación abstracta existentes. La clase abstracta y la interfaz están en el paquete com.ibm.commerce.command.

En el siguiente diagrama se muestra la relación entre la interfaz y la clase de implementación de un nuevo mandato de controlador y la interfaz y clase de implementación abstracta existentes. MyTaskCmdImpl amplía TaskCommandImpl y MyTaskCmd amplía TaskCommand.

En Java, el nuevo mandato de tarea MyTaskCmdImpl se definirá como se indica a continuación:


public class MyTaskCmdImpl extends com.ibm.commerce.command.TaskCommandImpl 
     implements MyTaskCmd 
{
        ...
}

Todas las propiedades de entrada y salida para el mandato de tarea deben definirse en la interfaz de mandatos como, por ejemplo, MyTaskCmd. El emisor de la llamada invoca la interfaz del mandato de tarea en lugar de la clase de implementación de mandato de tarea. Esto le permite tener varias implementaciones del mandato de tarea (una para cada tienda), sin que el emisor de la llamada tenga que preocuparse de a qué clase de implementación debe llamar.

Todos los métodos definidos en la interfaz deben implementarse en la clase de implementación. Puesto que el contexto de mandatos debe establecerlo el emisor de la llamada (un mandato de controlador), el mandato de tarea no necesita establecer el contexto de mandatos. Sin embargo, el mandato de tarea puede obtener información de sesión adicional mediante el contexto de mandatos.

Además de implementar los métodos definidos en la interfaz de mandatos de tarea, debe alterar temporalmente el método performExecute de com.ibm.commerce.command.TaskCommandImpl.

El método performExecute contiene la lógica de negocio de la unidad de trabajo concreta que lleva a cabo el mandato de tarea. Debe invocar el método performExecute de la superclase del mandato de tarea antes de ejecutar una lógica de negocio. El fragmento de código siguiente muestra un ejemplo del método performExecute para un mandato de tarea.


public void performExecute() throws ECException
{
     super.performExecute();

     // Include your business logic here.

     // Set output properties so the controller command
     // can retrieve the result from this task command.
}

La estructura de tiempo de ejecución llama al método getResources del mandato de controlador para determinar a qué recursos protegibles accederá el mandato. Puede darse el caso de que un mandato de tarea que se ejecute durante el ámbito de un mandato de controlador intente acceder a recursos que el método getResources del mandato de controlador no haya devuelto. En ese caso, el mandato de tarea mismo puede implementar un método getResources para asegurar que se proporciona control de acceso para recursos protegibles.

Observe que, por omisión, getResources devuelve null para un mandato de tarea y no se efectúa la comprobación de control de acceso a nivel de recurso. Por tanto, debe modificar esto si el mandato de tarea accede a recursos protegibles.