Web.xml'deki resource-ref ne için kullanılır?


112

Dosyanızda ne zaman / neden bir <resource-ref>öğe tanımlayacağınızı merak ediyorum.web.xml

Web / uygulama sunucunuzda JNDI kullanılarak tanımlanacağını ve ardından Java kodunuzda JNDI referansına bakılacağını düşünürdüm.

Kaynak ref tanımı bana biraz gereksiz görünüyor ve ne zaman yararlı olabileceğini düşünemiyorum. Misal:

<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>

Yanıtlar:


156

Uygulamanızdaki kaynaklara her zaman kapsayıcıda yapılandırıldığı gibi doğrudan JNDI adıyla başvurabilirsiniz, ancak bunu yaparsanız, esasen kapsayıcıya özgü adı kodunuza bağlarsınız. Bunun bazı dezavantajları vardır, örneğin, daha sonra herhangi bir nedenle adı değiştirmek isterseniz, tüm uygulamalarınızdaki tüm referansları güncellemeniz ve ardından bunları yeniden oluşturmanız ve yeniden dağıtmanız gerekir.

<resource-ref>başka bir indirme katmanı sunar: web.xml'de kullanmak istediğiniz adı belirtirsiniz ve konteynere bağlı olarak konteynere özgü bir yapılandırma dosyasında bir bağlama sağlarsınız.

Öyleyse burada olacak : java:comp/env/jdbc/primaryDBadı aramak istediğinizi varsayalım . Kap, web.xml'nin için bir <resource-ref>öğesi olduğunu bulur jdbc/primaryDB, bu nedenle aşağıdakine benzer bir şey içeren kapsayıcıya özgü yapılandırmaya bakar:

<resource-ref>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <jndi-name>jdbc/PrimaryDBInTheContainer</jndi-name>
</resource-ref>

Son olarak, adı altında kayıtlı nesneyi döndürür jdbc/PrimaryDBInTheContainer.

Fikir kaynakların belirterek olmasıdır web.xml ayıran avantajına sahiptir geliştirici gelen rol deployer rolü. Başka bir deyişle, bir geliştirici olarak, gerekli kaynaklarınızın üretimde gerçekte ne dendiğini bilmenize gerek yok ve uygulamayı dağıtan kişi olarak, gerçek kaynaklara eşlenecek güzel bir isim listesine sahip olacaksınız.


6
IMHO, rolleri ayırmanın ötesine geçiyor. Buradaki fikir, bir sunucuda bir jndi adının mevcut olduğunu varsayamazsınız, bu nedenle uygulamanızda kullanılan adı, dağıtıcı tarafından seçilen "gerçek" JNDI adı ile eşlemek için bir yola ihtiyacınız vardır.
Pascal Thivent

3
Google'da bulamadığım için bu temel olmalıdır, ancak "java: comp / env / jdbc / primaryDB" yi aramak istersem, o zaman neden res-ref-adı "jdbc / primaryDB"?
Torben

4
Bildiğim kadarıyla, "jndi-name" öğesi standart web.xml'nin bir parçası DEĞİL, bunun yerine belirli satıcıların dağıtım tanımlayıcılarının bir parçası.
Ramon Chiara

2
@RaviParekh, "kapsayıcıya özgü yapılandırmadan" bahsetti, jboss-web.xml veya weblogic.xml veya başka bir satıcıya özgü dağıtım tanımlayıcı dosyası olabilir
abhihello123

1
Bunu Tomcat ile ilişkilendirebilir miyiz? Tomcat'te context.xml'de tanımlanan veri kaynağını ve web.xml'de resource-ref'i kastediyorum
Atul
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.