El lugar en el que estoy trabajando es tratar de establecer algunas reglas básicas, y el debate que estamos teniendo ahora es bibliotecas locales versus servicios web para la reutilización de código. Los servicios web parecen ser la elección popular en la mayoría de las empresas, y hacia eso se inclinan la mayoría de los desarrolladores.
Simplemente no puedo ver cómo puede utilizar efectivamente los servicios web para cualquier trabajo serio. ¿Cómo puedo ejecutar de manera segura varias llamadas de servicio si no puedo usar una transacción?
Digamos que tengo un trabajo cron que capta clientes de nuestra base de datos que cumplen una determinada condición de la que deben ser notificados. Se les envía un fax, un correo electrónico y se crea un ticket para rastrear el problema internamente. Eso es 3 llamadas de servicio diferentes que sucederían para cada cliente en un bucle for.
Si se produce un error en algún lugar, es posible que, por ejemplo, se envíe un fax y un correo electrónico al cliente, pero no se cree un ticket. O peor, este trabajo cron podría contener un error que provoca que falle en el mismo punto cada vez, y envía correos electrónicos repetidamente al mismo cliente. Si las bibliotecas fueran todas locales, todo podría estar envuelto en una transacción, y nada de eso sucedería. Pero estamos usando servicios web en este ejemplo.
Tenga en cuenta que los métodos de correo electrónico y fax en realidad insertan los datos en tablas de colas respaldadas por bases de datos, que a su vez son manejadas por un proceso de trabajo cron separado. Por lo tanto, las llamadas a los métodos de servicio "enviar correo electrónico" y "enviar fax" podrían suspenderse sin efectos secundarios si fuera necesario.
Una opción es poner todo este fragmento de código en el servicio web en sí, para que el servicio web mismo llame a los métodos de creación de correo electrónico, fax y ticket en una transacción. Pero luego estamos creando un método de servicio web solo para el uso de una transacción; no hay una razón válida por la que necesitemos llamar a este método desde cualquier lugar, excepto este script cron.
¿Cómo manejarías generalmente este método?