Sie können Ressourcen in Ihrer Anwendung jederzeit direkt anhand ihres im Container konfigurierten JNDI-Namens referenzieren. Wenn Sie dies jedoch tun, verdrahten Sie den container-spezifischen Namen im Wesentlichen in Ihren Code. Dies hat einige Nachteile. Wenn Sie beispielsweise den Namen aus irgendeinem Grund später ändern möchten, müssen Sie alle Referenzen in all Ihren Anwendungen aktualisieren und sie dann neu erstellen und erneut bereitstellen.
<resource-ref>
führt eine weitere Indirektionsebene ein: Sie geben den Namen an, den Sie in der Datei web.xml verwenden möchten , und stellen je nach Container eine Bindung in einem Container-spezifischen bereit Datei Konfigurationsdatei .
Folgendes passiert also : Nehmen wir an, Sie möchten den java:comp/env/jdbc/primaryDB
Namen nachschlagen . Der Container stellt fest, dass web.xml ein <resource-ref>
Element für enthält jdbc/primaryDB
, und untersucht daher die container-spezifische Konfiguration, die Folgendes enthält:
<resource-ref>
<res-ref-name>jdbc/primaryDB</res-ref-name>
<jndi-name>jdbc/PrimaryDBInTheContainer</jndi-name>
</resource-ref>
Schließlich wird das unter dem Namen von registrierte Objekt zurückgegeben jdbc/PrimaryDBInTheContainer
.
Die Idee ist, dass die Angabe von Ressourcen in der Datei web.xml den Vorteil hat, dass die Entwicklerrolle von der Bereitstellungsrolle getrennt wird . Mit anderen Worten, als Entwickler müssen Sie nicht wissen, wie Ihre erforderlichen Ressourcen in der Produktion tatsächlich genannt werden, und als der Typ, der die Anwendung bereitstellt, haben Sie eine schöne Liste von Namen, die Sie realen Ressourcen zuordnen können.