SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler



Documentos relacionados
Task Scheduler. Se necesita modelar una aplicación que permita definir tareas y ejecutarlas en forma programada. Las tareas pueden ser:

REGISTRO DE EMPRESAS Y PERSONAS BASE DE INFORMACIÓN DE CLIENTES & CONTACTOS

Programación Avanzada SOLUCIÓN EXAMEN FEBRERO 2011

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

Base de datos en Excel

Curso de Java POO: Programación orientada a objetos

MICQ. Trabajo Práctico Final Seminario de Ingeniería en Informática I Facultad de Ingeniería, UBA. Junio Cátedra: Pablo Cosso

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

Resolución Ejercicio Subastas On Line

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.

Patrones para persistencia (I) Ingeniería del Software II

Programación Orientada a Objetos con Java

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere.

Introducción a la programación orientada a objetos

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso

Ingeniería del Software I Clase de Testing Funcional 2do. Cuatrimestre de 2007

BPMN Business Process Modeling Notation

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Resumen de clase Ejercicio Firewall. Ideas de Diseño y Command Pattern

Uso de excepciones en Java

Modulo 1 El lenguaje Java

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Comisión Nacional de Bancos y Seguros

Acronis License Server. Guía del usuario

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

Toda base de datos relacional se basa en dos objetos

Clases abstractas e interfaces

Resumen. Funcionamiento. Advertencia

Guía de implementación Softland en SQL Server Versión 1.0

Novedades en Q-flow 3.02

Manual de uso. Manual de uso - citanet 1

Apéndice 5 Manual de usuario de ColeXión. ColeXión 1.0. Manual de usuario

POLIMORFISMO "una interfaz, múltiples métodos".

Workflow, BPM y Java Resumen de la presentación de Tom Baeyens

Creación y administración de grupos locales

SINAUTO. (Captura Requirimientos) GRUPO 03

LABORATORIO DE RC: PRÁCTICA 4: IMPLEMENTACIÓN DE UN CLIENTE DE CORREO

Proyecto Help Desk en plataforma SOA Modelo de Dominio Versión 1.3. Historia de revisiones

Tablas y Campos Nuevos

Procedimiento para realizar la configuración de Internet Explorer y usar el Sistema de reservaciones Go! Res versión 4.x

Manual de Ayuda. Sistema de Comercializacion RUBROS SRL - Desarrollado por Pragmatia

SEPARAR Y ADJUNTAR UNA BASE DE DATOS. Separar una base de datos

Comisión Nacional de Bancos y Seguros

DCU Diagramas de casos de uso

Definición de clases: Herencia, polimorfismo, ligadura dinámica

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

Operación Microsoft Access 97

Componentes de Integración entre Plataformas Información Detallada

Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos

AGREGAR COMPONENTES ADICIONALES DE WINDOWS

Creación y administración de grupos de dominio

CAPÍTULO 3 Servidor de Modelo de Usuario

Transacciones y bloqueos en SQL-Server

Soporte y mantenimiento. Generalidades

Internet Information Server

Diseño orientado a los objetos

GVisualPDA Módulo de Almacén

2. Conceptos básicos Abstracción La abstracción como un proceso mental natural La abstracción en el desarrollo de software

WINDOWS : COPIAS DE SEGURIDAD

%& %)& '$!%*+ $, %%%&$ %%

Ayuda para la instalación Componente Firma Digital INDICE. 1 Configuración previa Configuración Internet Explorer para ActiveX...

Implementando un ERP La Gestión del Cambio

Conectar a unidad de red

REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS

MEJORAR EL RENDIMIENTO DEL EXPLORADOR DE INTERNET

CAPITULO 4. Requerimientos, Análisis y Diseño. El presente capítulo explica los pasos que se realizaron antes de implementar

Instalación y mantenimiento de servicios de Internet. U.T.3.- Servicio DNS

MANUAL COPIAS DE SEGURIDAD

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

CAPÍTULO 3 DISEÑO DE LA ARQUITECTURA

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

BROWSERSQL VERSIÓN 3.1 TUTORIAL

CONSTRUCCIÓN DEL PROCESO MESA DE AYUDA INTERNA. BizAgi Process Modeler

Modelo de Objetos Distribuidos

COPPEL MANUAL TÉCNICO MCC DE SISTEMAS PROGRAMACIÓN DESCRIPCIÓN DEL PROCESO DE ARQUITECTURA DE SOFTWARE

Este proyecto propone la investigación referente al modelado y desarrollo de agentes para

Sistema de Gestión Portuaria Sistema de Gestión Portuaria Uso General del Sistema

Soporte y mantenimiento. Generalidades

Manual de Usuario: Administrar Listas de Distribución

Titulo del Proyecto FACYU Sistema de Facturación. Alumnos David Ignacio Morales Ruelas Marco Antonio Jiménez Uribe Carlos José Márquez Guzmán

APÉNDICE E: MANUAL DE USUARIO PARA EL SISTEMA DE MONITOREO DE REDES LAN.

PS.Vending Almacén Pocket PC

Oracle 12c DISEÑO Y PROGRAMACIÓN

Factory method (Gamma et al.)

Prof. Dr. Paul Bustamante

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

DNS IPLAN ABM DE REGISTROS DNS EN IPLAN CONTROL

Configuración de correo en Mozilla Thunderbird

Manual de usuario de Parda Programa de Almacenamiento y Recuperación de Datos Automático

Configuración de Aspel-SAE 6.0 para trabajar Remotamente

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

CONECTOR CTIFAC CONTENIDO

Informàtica i Comunicacions Plaça Prnt. Tarradellas, FIGUERES (Girona) Tel Fax

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

4. Programación Paralela

Ejercicio 1 (3 puntos).-

INTRODUCCION. entidades. Modelo lógico de la base de datos. Matricula. carne. codigo_curso. año semestre nota. propiedades

TEMA 7: DIAGRAMAS EN UML

Resumen de clase Ejemplos creacionales. Ideas de Diseño sobre ejercicios anteriores

Transcripción:

Task Scheduler Se necesita modelar una aplicación que permita definir tareas y ejecutarlas en forma programada. Las tareas pueden ser: La ejecución de programa cualquiera o comando del sistema operativo, para lo cual se especifica la línea de comando y una colección de parámetros. Un Stored Procedure de cualquier base de datos, para lo que se necesita la información de conexión a la base (ip, puerto, usuario, password) y el comando sql a ejecutar. Un proceso Java escrito especialmente para este TaskScheduler, que permite extender el comportamiento arbitrariamente. Especificar las condiciones que debe cumplir este proceso para poder ser ejecutado por el TaskScheduler y también la información que debe contener la definición de la tarea. Las tareas se pueden programar individualmente para su ejecución u organizarlas en grupos que ejecutan varias tareas secuencialmente. Cada tarea dentro de un grupo puede ser una tarea simple u otro grupo. Por ejemplo: el proceso central de facturación se conforma de la siguiente manera: Para la ejecución programada de las tareas o grupos, periódicamente se corre un proceso que debe seleccionar y ejecutar las tareas o grupos que corresponda. Sólo se puede programar las tareas o grupos raíz, las tareas dependientes no es necesario programarlas porque se ejecutan dentro de su grupo.

Nota: Se pide modelar el proceso que selecciona y ejecuta las tareas y no el llamado periódico a ese proceso. Sólo indicar cuál es el proceso que debe llamarse periódicamente, como un caso de uso más. Las tareas se programan para su ejecución según diferentes criterios: Diariamente a una hora determinada. Cada una determinada cantidad de minutos. Una sola vez en un día y hora determinados. Al finalizar la tarea el resultado puede ser: Ok BONUS: Finalizado con mensaje de advertencia Error El usuario puede configurar el grupo de tareas de manera de que cuando ejecute el Proceso Central de Facturación: Se ejecuten todas las tareas independientemente de las fallas. Corte ante cualquier error o advertencia. BONUS: Corte ante cualquier error (pero no ante una advertencia) Corte si se produce un error en la primera tarea (ignorando los errores en las tareas subsiguientes). Si se corta la ejecución de un grupo por un error, el resultado del grupo será un error. Si es por una advertencia el grupo tendrá la misma advertencia como resultado. Se pide: ) Identificar los casos de uso de la aplicación (los requerimientos destacados). 2) Identificar qué objetos son los responsables de resolver cada caso de uso (debe quedar en claro los objetos, sus responsabilidades y sus relaciones con los otros objetos que componen la solución). Aclaración: no alcanza con decir qué objeto, tienen que decir qué mensaje recibe, y qué parámetros. 3) Codifique los casos de uso más importantes. 4) En base a lo desarrollado en el punto 3, indicar dónde ocurren situaciones de excepción y cómo se manejan (máximo 0 líneas, relacionarlo con el código escrito). 5) Explicar las principales decisiones de diseño, qué alternativas consideró y qué elementos tuvo en cuenta para llegar a la solución final (máximo 0 líneas). 6) Definir claramente cómo interactuar con otros sistemas o componentes (por ejemplo las tareas definidas por terceros, sólo debe indicarlo en el código escrito en el punto 3). 7) Mostrar un ejemplo de prueba que demuestre que la solución presentada resuelve adecuadamente el problema a través de un diagrama de objetos o un caso de prueba. Ejemplo: queremos eliminar todos los días a las 22 hs. el directorio public a través del comando rm rf del sistema operativo. 2

Solución propuesta Diagrama de clases general TaskScheduler + tic() : void + add() : void Programada UnicaVez Diaria CadaNMinutos + ultimaejecucion() : Date Compuesta ComandoSO StoredProcedure RuntimeException «interface» EstrategiaEjecucion Falla Error Advertencia CortarPorErrorOWarning CortarPorError EjecutarTodas CortarPorErrorPrimera 3

Requerimientos principales del enunciado A) Definir la interfaz de una tarea para un proceso Java B) Definir tareas / grupos de tareas C) Disparar la ejecución de tareas programadas en forma periódica D) Programar la ejecución de las tareas Diaria Cada n minutos Por única vez E) Manejar los eventos que ocurren cuando se ejecuta una tarea. Para esto tenemos que: configurar el comportamiento del grupo de tareas ante errores o advertencias (sólo al grupo de tareas). Cómo resolver cada requerimiento A) Para implementar un proceso ejecutable por el Task Scheduler extender de implementando el método ejecutar. En caso de ser necesario se podría modificar a: cd Alternativ a - Proceso Jav a Usuario «interface» Ejecutable <<Usuario>> this.ejecutable.ejecutar(); En ese caso aquel que quiera agregar una tarea propia debería implementar la interfaz Ejecutable. B) Las tareas agrupadas tienen como abstracción la clase Compuesta, que son polimórficas con las tareas simples en el caso de ejecutarse, conocer la última ejecución, etc. No obstante la tarea compuesta tiene comportamiento diferencial que no debería estar incluido en (no es una buena decisión que todas las tareas tengan una colección de subtareas, en especial para el punto E). 4

+ ultimaejecucion() : Date Compuesta C) Para la ejecución periódica se debe llamar al método tic() del TaskScheduler: public void tic() { for (Programada tareaprogramada : this.tareasprogramadas) { tareaprogramada.ejecutar(); D) La responsabilidad de saber si la tarea debe ejecutarse en este momento está delegada en la Programada): UnicaVez TaskScheduler + tic() : void + add() : void Programada Diaria CadaNMinutos if (this.correspondeejecutar()) { this.tarea.ejecutar(); Como ejemplo implementamos la tarea que corre cada n minutos: public boolean correspondeejecutar() { return (new Date().minutosDesde(this.tarea.ultimaEjecucion()) > this.minutos); Como necesitamos saber la última vez que se ejecutó una tarea, podemos poner esa responsabilidad: 5

En programada En Lo que hay que hacer entonces es: ) ejecutar la tarea, 2) registrar de alguna manera que esa tarea fue ejecutada. Dos opciones: Hacemos que Programada dispare la actualización en el método ejecutar: if (this.correspondeejecutar()) { this.tarea.ejecutar(); this.tarea.registrarejecucion(); O bien hacemos que el ejecutar de registre la ejecución. Para eso tenemos que separar a) la ejecución de la tarea propiamente dicha y doejecutar() b) disparar la ejecución + registrar ejecución. registrarejecucion() En this.doejecutar(); this.registrarejecucion(); lo implementan las subclases de Qué pasa si una tarea falla? Cómo nos enteramos? El método ejecutar() (o el doejecutar()) no devuelven int, sino una excepción. Tanto el error como la advertencia se modelan como excepciones que heredan de Falla (excepción no chequeada, para no tener que ensuciar el contrato de los métodos ejecutar() de las tareas, las tareas programadas y el task scheduler). + ultimaejecucion() : Date RuntimeException Error Falla Adv ertencia E) Manejo de eventos que ocurren al ejecutar un grupo de tareas 6

Recordemos el diagrama de clases: + ultimaejecucion() : Date Compuesta «interface» EstrategiaEjecucion CortarPorErrorOWarning CortarPorError EjecutarTodas CortarPorErrorPrimera En el caso de las tareas compuestas, tenemos que atrapar las excepciones por falla en base al comportamiento que va a tener el grupo. Implementamos el ejecutar: this.estrategia.ejecutar(this.tareas); El caso más sencillo es cuando queremos ejecutar todas las tareas independientemente de que den o no error: public void ejecutar(list tareas) { for ( tarea : tareas) { try { tarea.ejecutar(); catch (Falla f) { // Ignorar, uno de los pocos casos en el que está bien no hacer nada 7

Si hay que verificar que la primera tarea no falle: public void ejecutar(list tareas) { Iterator<> it = tareas.iterator(); it.next().ejecutar(); while (it.hasnext()) { try { it.next().ejecutar(); catch (Falla f) { // Ignorar Recordamos el diagrama de clases para mostrar la relación entre Falla, Error y Advertencia: RuntimeException Error Falla Adv ertencia El resto de los casos los dejamos para el lector. Casos de uso (Punto + 2) Agregar una tarea responsabilidad del TaskScheduler, método: add(programada tareaprogramada) Ejecutar las tareas que corresponden a un momento dado responsabilidad del TaskScheduler, método: tic(). Interfaces del sistema (Punto 6) s definidas por terceros: resuelta en punto A de Requerimientos También define interacciones con tareas que se ejecutan con línea de comando y stored procedures (se utilizan APIs de Java: Runtime y JDBC). Los parámetros se especifican en un paso anterior para poder definir la interfaz ejecutar() que es polimórfica con la definida por terceros. Ejecución de Rm (punto 7) rm = new ComandoSO("rm -rf /public"); Programada rm22hs = new ProgramadaDiaria(rm, 22, 0, 0); scheduler.add(rm00hs); 8