A cosa serve resource-ref in web.xml?


112

Mi chiedo solo quando / perché definiresti un <resource-ref>elemento nel tuo web.xmlfile?

Avrei pensato che sarebbe stato definito nel tuo server web / app utilizzando JNDI e quindi cercare il riferimento JNDI nel tuo codice Java?

La definizione resource-ref mi sembra un po 'ridondante e non riesco a pensare a quando potrebbe essere utile. Esempio:

<resource-ref>
  <description>Primary database</description>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>CONTAINER</res-auth>
</resource-ref>

Risposte:


156

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/primaryDBnome. 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.


6
IMHO, va oltre la separazione dei ruoli. L'idea è che non si possa presumere che un nome jndi sia disponibile su un server, quindi è necessario un modo per mappare il nome utilizzato nella propria applicazione sul nome JNDI "reale" scelto dal deployer.
Pascal Thivent

3
Questo deve essere elementare, dal momento che non riesco a trovarlo con Google, ma se voglio cercare "java: comp / env / jdbc / primaryDB", allora perché res-ref-name è "jdbc / primaryDB"?
Torben

4
Per quanto ne so, l'elemento "jndi-name" NON fa parte dello standard web.xml, ma piuttosto di descrittori di distribuzione di fornitori specifici.
Ramon Chiara

2
@RaviParekh, ha menzionato la "configurazione specifica del contenitore", potrebbe essere jboss-web.xml o weblogic.xml o qualsiasi altro file descrittore di distribuzione specifico del fornitore
abhihello123

1
Possiamo collegarlo a Tomcat? Intendo datasource definita in context.xml in tomcat e resource-ref in web.xml
Atul
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.