Il posto in cui sto lavorando sta cercando di stabilire alcune regole di base, e il dibattito che stiamo avendo ora è biblioteche locali vs servizi web per il riutilizzo del codice. I servizi Web sembrano essere la scelta popolare nella maggior parte delle aziende, ed è ciò a cui la maggior parte degli sviluppatori qui si appoggia.
Non riesco proprio a vedere come è possibile utilizzare efficacemente i servizi Web per qualsiasi lavoro serio. Come posso eseguire in modo sicuro più chiamate di servizio se non riesco a utilizzare una transazione?
Diciamo che ho un lavoro cron che attira clienti dal nostro database che soddisfano una certa condizione di cui devono essere informati. Vengono inviati un fax, un'e-mail e viene creato un ticket per tracciare il problema internamente. Si tratta di 3 diverse chiamate di servizio che potrebbero verificarsi per ciascun cliente in un ciclo for.
Se si verifica un errore ovunque, è possibile che, ad esempio, un fax e un'e-mail vengano inviati al cliente, ma non viene creato un biglietto. O peggio, questo cron job potrebbe contenere un bug che causa ogni volta che fallisce nello stesso punto e invia ripetutamente e-mail allo stesso cliente. Se le biblioteche fossero tutte locali, tutto potrebbe essere racchiuso in una transazione, e nulla di tutto ciò accadrebbe. Ma stiamo usando i servizi web in questo esempio.
Si noti che i metodi di posta elettronica e fax in realtà inseriscono i dati in tabelle delle code supportate dal database, che a loro volta sono gestite da un processo cron cron separato. Pertanto, se necessario, le chiamate ai metodi di servizio "Invia e-mail" e "Invia fax" potrebbero essere annullate senza effetti collaterali.
Un'opzione è quella di inserire l'intero blocco di codice nel servizio Web stesso, in modo che il servizio Web stesso chiamerebbe i metodi di creazione di e-mail, fax e ticket in una transazione. Ma poi stiamo creando un metodo di servizio web solo per l'uso di una transazione; non vi è alcun motivo valido per cui avremmo effettivamente bisogno di chiamare questo metodo da qualsiasi luogo tranne questo script cron.
Come gestiresti generalmente questo metodo?