Historia de Usuario: Job Batch para Orquestar Validación de Líneas de Pedido
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 Validación)
Para que pueda leer líneas de pedido en estado NEW_LINE, disparar su validación a través de la máquina de estados, y que esta interactúe con Oracle Fusion para validar los datos.
✅ Criterios de Aceptación
- Se debe implementar un Job de Spring Batch (
orderLineValidationJob). - El
ItemReaderdel job debe leer registros de la tablafile_linesdondesm_stateseaNEW_LINE. - El
ItemProcessordel job debe, para cadafile_lineleída:- Obtener su
line_id. - Invocar al
OrderLineStateMachineManagerenviando el eventoEV_VALIDATEpara esaline_id.
- Obtener su
- La acción asociada al estado
S_VALIDATINGen la State Machine (invocada por el eventoEV_VALIDATE) debe:- Extraer los datos necesarios de
file_lines(o del contexto de la SM si se pasaron). - Llamar a la API de validación de Oracle Fusion (cliente de API debe estar implementado e inyectado).
- Basado en la respuesta de Oracle:
- Si la validación es exitosa: la SM debe transicionar a
S_VALIDATED, ysm_stateenfile_linesdebe actualizarse aVALIDATED. - Si la validación falla: la SM debe transicionar a
S_VALIDATION_FAILED, ysm_stateenfile_linesdebe actualizarse aVALIDATION_FAILED, y el campovalidation_error_detailsdebe poblarse con el mensaje de error.
- Si la validación es exitosa: la SM debe transicionar a
- Extraer los datos necesarios de
- El Job debe ser configurable (ej. tamaño de chunk, políticas de reintento del job si falla una interacción con
OrderLineStateMachineManager). - El Job debe registrar métricas (leídos, procesados, fallos en procesador) vía Micrometer/Prometheus.
- Logs detallados para cada línea procesada por el job y para la interacción con la SM.
🧪 Definition of Done (DoD)
-
orderLineValidationJobimplementado y configurado. - Lee líneas en
NEW_LINEcorrectamente. - Envía evento
EV_VALIDATEalOrderLineStateMachineManagerpor cada línea. - La SM ejecuta la validación contra Oracle y actualiza
sm_stateyvalidation_error_detailsenfile_linessegún el resultado. - Job maneja errores y es reiniciable (considerando que la SM es idempotente a eventos si ya está en el estado esperado o uno posterior).
- Métricas y logs del job implementados.
📦 Consideraciones Técnicas
- Usar
JpaPagingItemReaderoJdbcCursorItemReaderpara leer defile_lines. - El
ItemProcessorserá el punto de integración conOrderLineStateMachineManager. - El
ItemWriterpodría ser unNoOpItemWritersi toda la lógica de actualización de estado la maneja la SM y su persister, o podría usarse para una actualización final si es necesario. - Implementar un cliente HTTP robusto (
RestTemplate,WebClient,Feign) para interactuar con las APIs de Oracle Fusion.
🛠️ Consideraciones para Ambientes Productivos
🔐 Seguridad
- Asegurar credenciales para la API de Oracle Fusion (ej. OAuth2, API Keys) gestionadas de forma segura.
🧠 Eficiencia e Idempotencia
- Configurar tamaño de chunk apropiado para el job.
- El job puede ser paralelizado (
multi-threaded step) si elOrderLineStateMachineManagery la persistencia de SM son thread-safe o si se particiona la data. - La SM debe manejar correctamente eventos duplicados si el job se reinicia y reenvía un evento a una SM que ya lo procesó.
🧪 Observabilidad y Logging
- Métricas de Spring Batch (items leídos, escritos, omitidos, duración del job).
- Logs con
line_idpara trazar el procesamiento de cada ítem del batch. - Alertas si el job de validación falla repetidamente o tiene un backlog grande de líneas
NEW_LINE.