El lugar donde estoy trabajando es establecer algunas reglas básicas, y el debate que estamos teniendo ahora es bibliotecas locales y servicios web para la reutilización de códigos. Los servicios web parecen ser la opción popular en la mayoría de las empresas, y eso es lo que la mayoría de los desarrolladores de aquí se están inclinando hacia.
Simplemente no puedo ver cómo puede usar efectivamente los servicios web para cualquier trabajo serio. ¿Cómo puedo ejecutar varias llamadas de servicio de manera segura si no puedo usar una transacción?
Supongamos que tengo un trabajo cron que capta clientes de nuestra base de datos que cumplen con una determinada condición de la que necesitan 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 cualquier 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 aún, este trabajo cron podría contener un error que hace que falle en el mismo punto cada vez, y envía un correo electrónico 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 en este ejemplo estamos usando servicios web.
Tenga en cuenta que los métodos de correo electrónico y fax realmente insertan los datos en las tablas de cola respaldadas por la base 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 abortarse sin efectos secundarios, si fuera necesario.
Una opción es colocar todo este fragmento de código en el propio servicio web, de modo que el servicio web mismo llame a los métodos de correo electrónico, fax y creación de tickets 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 para que necesitemos llamar a este método desde cualquier lugar, excepto este único script cron.
¿Cómo manejarías este método generalmente?