L'endroit où je travaille essaie d'établir des règles de base, et le débat que nous avons maintenant concerne les bibliothèques locales et les services Web pour la réutilisation du code. Les services Web semblent être le choix populaire dans la plupart des entreprises, et c'est vers cela que la plupart des développeurs se tournent.
Je ne vois tout simplement pas comment vous pouvez utiliser efficacement les services Web pour tout travail sérieux. Comment puis-je exécuter plusieurs appels de service en toute sécurité si je ne peux pas utiliser une transaction?
Disons que j'ai un travail cron qui saisit les clients de notre base de données qui remplissent une certaine condition dont ils doivent être informés. Ils reçoivent un fax, un e-mail et un ticket est créé pour suivre le problème en interne. C'est 3 appels de service différents qui se produiraient pour chaque client dans une boucle for.
Si une erreur se produit quelque part, il est possible, par exemple, qu'un fax et un e-mail soient envoyés au client, mais qu'un ticket ne soit pas créé. Ou pire, ce travail cron peut contenir un bogue qui provoque son échec au même point à chaque fois, et il envoie plusieurs fois un e-mail au même client. Si les bibliothèques étaient toutes locales, tout pourrait simplement être enveloppé dans une transaction, et rien de tout cela ne se produirait. Mais nous utilisons des services Web dans cet exemple.
Notez que les méthodes de courrier électronique et de télécopie insèrent réellement les données dans des tables de files d'attente sauvegardées dans la base de données, qui à leur tour sont gérées par un processus de tâche cron distinct. Ainsi, les appels aux méthodes de service "envoyer un e-mail" et "envoyer un fax" pourraient être annulés sans effet secondaire si nécessaire.
Une option consiste à mettre tout ce morceau de code dans le service Web lui-même, afin que le service Web lui-même appelle les méthodes de création de courrier électronique, de télécopie et de ticket dans une transaction. Mais ensuite, nous créons une méthode de service Web uniquement pour l'utilisation d'une transaction; il n'y a aucune raison valable pour laquelle nous aurions besoin d'appeler cette méthode de n'importe où, sauf ce seul script cron.
Comment gérez-vous généralement cette méthode?