Historia de Usuario: Job Batch para Orquestar Creación de Pedidos en Oracle
Versión: 1.0
Fecha: 2025-06-03
Autor: Arquitecto de Tecnologías
🎯 Historia de Usuario
Como Sistema de Integración EDI
Quiero un proceso Spring Batch (Job de Creación de Pedidos)
Para que pueda leer líneas de pedido validadas (S_VALIDATED) o pendientes de reintento (S_PENDING_RETRY), disparar su procesamiento a través de la máquina de estados para crear el pedido en Oracle Fusion, gestionando la lógica de reintentos.
✅ Criterios de Aceptación
- Se debe implementar un Job de Spring Batch (
oracleOrderCreationJob). - El
ItemReaderdel job debe leer registros de la tablafile_linesdondesm_stateseaVALIDATEDoPENDING_RETRY. - El
ItemProcessordel job debe, para cadafile_lineleída:- Obtener su
line_id. - Si el estado es
VALIDATED, invocar alOrderLineStateMachineManagerenviando el eventoEV_CREATE_IN_ORACLE. - Si el estado es
PENDING_RETRY, invocar el eventoEV_RETRY_ORACLE_CREATION.
- Obtener su
- La acción asociada al estado
S_CREATING_IN_ORACLEen la State Machine debe:- Incrementar
retry_count(o tomar el valor del contexto de la SM) y actualizarlast_oracle_attempt_at. - Llamar a la API de creación de pedidos de Oracle Fusion.
- Basado en la respuesta de Oracle y las guardias de la SM:
- Éxito: Transicionar a
S_ORACLE_CREATION_SUCCESSFUL. Actualizarsm_statey guardaroracle_order_id. - Fallo reintentable (y
retry_count < MAX_RETRIES): Transicionar aS_PENDING_RETRY. Actualizarsm_stateyoracle_api_error_details. - Fallo no reintentable (o
retry_count >= MAX_RETRIES): Transicionar aS_ORACLE_CREATION_FAILED_TERMINAL. Actualizarsm_stateyoracle_api_error_details.
- Éxito: Transicionar a
- Incrementar
- La acción de entrada a
S_ORACLE_CREATION_FAILED_TERMINALdebe disparar una notificación mediante elNotification_Service. - El Job debe ser configurable y registrar métricas y logs detallados.
- Al finalizar el procesamiento exitoso de una línea (
S_ORACLE_CREATION_SUCCESSFUL) o un fallo terminal (S_VALIDATION_FAILED,S_ORACLE_CREATION_FAILED_TERMINAL), se deben actualizar los contadoressuccessful_linesofailed_linesen la tablaprocessed_filespara el archivo correspondiente (esto puede ser una acción de la SM o un paso posterior del batch).
🧪 Definition of Done (DoD)
-
oracleOrderCreationJobimplementado y configurado. - Lee líneas en
VALIDATEDoPENDING_RETRYcorrectamente. - Envía eventos
EV_CREATE_IN_ORACLEoEV_RETRY_ORACLE_CREATIONalOrderLineStateMachineManager. - La SM ejecuta la creación en Oracle, maneja reintentos y actualiza
sm_state,retry_count,oracle_order_id,oracle_api_error_detailsenfile_lines. - Notificaciones se envían en fallos terminales.
- Contadores en
processed_filesse actualizan. - Job maneja errores y es reiniciable.
- Métricas y logs del job implementados.
📦 Consideraciones Técnicas
- Similar al Job de Validación:
JpaPagingItemReaderoJdbcCursorItemReader. ItemProcessorintegra conOrderLineStateMachineManager.- Cliente HTTP robusto para Oracle Fusion APIs.
- La actualización de contadores en
processed_filespuede requerir lógica adicional para agregar porfile_id, posiblemente en unItemWriteListenero un paso de resumen del job.
🛠️ Consideraciones para Ambientes Productivos
🔐 Seguridad
- Asegurar credenciales para la API de Oracle Fusion.
🧠 Eficiencia e Idempotencia
- Ajustar tamaño de chunk. Paralelización/particionamiento si es viable.
- Lógica de reintento en la SM debe ser robusta. Implementar backoff exponencial para reintentos si la API de Oracle lo sugiere para ciertos errores.
🧪 Observabilidad y Logging
- Métricas de Spring Batch y logs con
line_idyfile_id. - Alertas para fallos en la creación de pedidos o si muchas líneas quedan en
PENDING_RETRY.