Puoi sempre fare riferimento alle risorse nella tua applicazione direttamente dal loro nome JNDI come configurato nel contenitore, ma se lo fai, essenzialmente stai cablando il nome specifico del contenitore nel tuo codice. Ciò presenta alcuni svantaggi, ad esempio, se per qualche motivo vorrai cambiare il nome in un secondo momento, dovrai aggiornare tutti i riferimenti in tutte le tue applicazioni, quindi ricostruirli e ridistribuirli.
<resource-ref>
introduce un altro livello di riferimento indiretto: si specifica il nome che si desidera utilizzare in web.xml e, a seconda del contenitore, si fornisce un'associazione in un file di configurazione specifico del contenitore .
Quindi ecco cosa succede : diciamo che vuoi cercare il java:comp/env/jdbc/primaryDB
nome. Il contenitore rileva che web.xml ha un <resource-ref>
elemento per jdbc/primaryDB
, quindi esaminerà la configurazione specifica del contenitore, che contiene qualcosa di simile al seguente:
<resource-ref>
<res-ref-name>jdbc/primaryDB</res-ref-name>
<jndi-name>jdbc/PrimaryDBInTheContainer</jndi-name>
</resource-ref>
Infine, restituisce l'oggetto registrato con il nome di jdbc/PrimaryDBInTheContainer
.
L'idea è che la specifica delle risorse in web.xml abbia il vantaggio di separare il ruolo di sviluppatore dal ruolo di deployer . In altre parole, come sviluppatore, non devi sapere quali sono le tue risorse richieste effettivamente chiamate in produzione, e come il ragazzo che distribuisce l'applicazione, avrai un bel elenco di nomi da mappare alle risorse reali.