Più vicini alla produzione più i server dovrebbero essere identici. Lo scopo è quello di assicurarsi che l'installazione finale sia priva di problemi imprevisti, vale a dire la sindrome "lavora per me". Tuttavia, più ci avviciniamo allo sviluppo, abbiamo bisogno di più libertà di sperimentare. Quindi direi che l'intero set di piattaforme non ha bisogno di essere identico, e in realtà non può essere.
Una delle cose che stai facendo bene è usare uno script di build automatico. Sia che si tratti di ANT o di Maven non è importante quanto il fatto che l'applicazione sia compilata e che i JAR siano assemblati allo stesso modo ogni volta. Ciò consentirà di evitare una serie di problemi.
Il punto dolente che hai menzionato - i bug dovuti alle differenze nei server delle applicazioni - è un'arma a doppio taglio. Maggiore è il numero di server delle applicazioni a cui è esposta la tua app, più sarà portatile quando avrai risolto i problemi. D'altra parte, a meno che non si stia costruendo un'applicazione che i tuoi clienti saranno liberi di installare sui propri server di app, il lavoro extra necessario per la portabilità si limiterà a perdere tempo a sistemare altri bug, probabilmente più importanti.
È un triste fatto della vita che a volte la nostra scelta di application server sia limitata dalle politiche IT dei nostri clienti. "Userai IBM o Oracle, sì e in verità" Se questo è il caso, almeno tutto dal server di prova dovrebbe utilizzare lo stesso server di applicazioni della produzione. Nel campo dello sviluppo, potresti voler standardizzare solo uno dei server delle applicazioni alternativi. Se ti stai trasferendo a Maven (come sembra che tu sia), allora Jetty è una partita naturale. Maven ha una preferenza per Jetty, quindi eseguire l'applicazione nel server dell'app è semplice come digitare mvn jetty:run
( leggi questo articolo ).
Essenzialmente, vorrai minimizzare il numero di cose che possono andare storte. Se riesci a cogliere la maggior parte dei problemi di incompatibilità nella fase di test, sei molto avanti rispetto al gioco. La messa in scena dovrebbe essere un passaggio obbligato con la produzione, in quanto sarà la tua ultima possibilità di trovare problemi di installazione che potrebbero morderti durante la produzione. Gli stessi processi di hardening da utilizzare nella produzione dovrebbero essere utilizzati anche nella gestione temporanea. I test dovrebbero utilizzare lo stesso stack tecnologico che verrà utilizzato su staging e produzione, ma non devono essere tenuti in una fase di blocco. Sarà la tua prima opportunità di trovare problemi a causa dell'aggiornamento del server o delle librerie che stai utilizzando.