Suppongo che per una determinata risorsa si utilizzi lo stesso nome JNDI in ogni ambiente. Altrimenti dovresti modificare il tuo codice per puntare al nome della nuova risorsa (JNDI).
Impostare l'ambiente per la prima volta può essere quasi impossibile da testare in anticipo.Non c'è modo di verificare che alcune stringhe, come la stringa di connessione del database di produzione, non siano diventate fat-fingered fino a quando non è effettivamente necessario utilizzarle. È la natura della configurazione dell'ambiente. Detto questo, se si vuole ridurre il rischio di errori, prima è necessario assicurarsi che a ciascuna risorsa venga assegnato un nome che viene utilizzato indipendentemente dall'ambiente in cui è ospitato. Creare un nome risorsa dbConnectionString in un file delle proprietà che punta a jndi:/jdbc/myproject/resources/dbConnectionString e assicurarsi che tutti gli ambienti dichiarino la stessa risorsa. Di seguito è riportato come abbiamo mantenuto il codice isolato da questi tipi di dipendenze ambientali. Detto questo, sarà sempre necessario verificare manualmente che la configurazione di un server specifico stia utilizzando i valori appropriati per le risorse definite.
NOTA: mai creare nomi di risorse come "dbProdConnectionString", "dbQAConnectionString", "dbDevConnectionString". Sconfiggerai lo scopo di cercare di eliminare l'intervento manuale perché hai aggiunto un passaggio indiretto che richiederà una modifica del codice (per indirizzare il codice al nome della risorsa corretta) e compilare (per impacchettare le modifiche nel tuo file .war) quando si muove tra gli ambienti.
Quello che abbiamo fatto è stato creare una struttura di cartelle per le proprietà che erano specifiche dell'ambiente. Sotto quella cartella abbiamo creato le cartelle per ogni specifico ambiente destinato alla distribuzione, incluso lo sviluppo locale. Si presentava così:
Project
\
-Properties
\
-Local (your PC)
-Dev (shared dev server)
-Test (pre-production)
-Prod (Production)
In ogni cartella abbiamo messo copie parallele dei file di proprietà/config e mettere le diverse configurazioni solo nel file nella cartella appropriata. Il segreto era controllare il classpath dell'ambiente di distribuzione. Abbiamo definito una voce classpath PROPERTIES su ogni server. Su Prod, sarebbe impostato su "$ ProjectDir/Properties/Prod" mentre su Test la stessa variabile verrebbe impostata su "$ ProjectDir/Properties/Test".
In questo modo è possibile avere stringhe di connessione al database per il database dev/test/prod preconfigurato e non dover effettuare il checkout/nel file delle proprietà ogni volta che si desidera creare un ambiente diverso.
Ciò significava anche che è possibile distribuire lo stesso file .war/.ear su Test e Prod senza ricostruzione. Qualsiasi proprietà che non è stata dichiarata nel file delle proprietà è stata gestita in modo simile utilizzando lo stesso nome JNDI in ciascun ambiente ma utilizzando valori specifici per quell'ambiente.
fonte
2009-07-21 14:21:49
Questi voti negativi sono davvero fastidiosi. Se stai votando qualcuno, abbi un po 'di coraggio e lascia un commento perché. Questo vale il doppio per quando pensi che ho detto qualcosa di sbagliato nella mia risposta - in che altro modo qualcuno potrebbe imparare? – ChssPly76
Non ho votato, ma sono fortemente in disaccordo con te. Risorse come origini dati JDBC e sessione di posta non dovrebbero mai essere definite nella WAR stessa. I parametri di connessione del database sono proprietà dell'ambiente, non dell'applicazione. Uno dovrebbe essere in grado di distribuire WAR in un ambiente di test prima di andare in produzione. –
Sono d'accordo con Maurice ma penso che ChssPly76 valga un voto alto perché sta dando una risposta alla domanda. IIRC Bea Weblogic ha un "JNDI proxy" che permette di creare un riferimento JNDI che punta ad altre risorse JNDI – ATorras