Untuk apa resource-ref di web.xml digunakan?

112

Saya hanya ingin tahu kapan / mengapa Anda mendefinisikan <resource-ref>elemen dalam web.xmlfile Anda ?

Saya akan berpikir bahwa itu akan ditentukan di server web / aplikasi Anda menggunakan JNDI dan kemudian mencari referensi JNDI di kode Java Anda?

Definisi resource-ref tampaknya agak berlebihan bagi saya dan saya tidak dapat memikirkan kapan definisi itu mungkin berguna. Contoh:

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

Jawaban:

156

Anda selalu dapat merujuk ke sumber daya dalam aplikasi Anda secara langsung dengan nama JNDI mereka seperti yang dikonfigurasi dalam penampung, tetapi jika Anda melakukannya, pada dasarnya Anda menghubungkan nama khusus penampung ke dalam kode Anda. Ini memiliki beberapa kelemahan, misalnya, jika Anda ingin mengubah nama nanti karena alasan tertentu, Anda harus memperbarui semua referensi di semua aplikasi Anda, lalu membangun kembali dan menerapkannya kembali.

<resource-ref>memperkenalkan lapisan tipuan lain: Anda menentukan nama yang ingin Anda gunakan di web.xml , dan, bergantung pada penampungnya, berikan pengikatan dalam file konfigurasi khusus penampung .

Jadi, inilah yang terjadi : misalkan Anda ingin mencari java:comp/env/jdbc/primaryDBnama. Penampung menemukan bahwa web.xml memiliki <resource-ref>elemen untuk jdbc/primaryDB, sehingga ia akan melihat ke dalam konfigurasi khusus penampung, yang berisi sesuatu yang mirip dengan berikut ini:

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

Akhirnya, ia mengembalikan objek yang didaftarkan dengan nama jdbc/PrimaryDBInTheContainer.

Idenya adalah bahwa menentukan sumber daya di web.xml memiliki keuntungan dengan memisahkan peran pengembang dari peran penyebaran . Dengan kata lain, sebagai pengembang, Anda tidak harus tahu apa sebenarnya sumber daya yang diperlukan dalam produksi, dan sebagai orang yang menerapkan aplikasi, Anda akan memiliki daftar nama yang bagus untuk dipetakan ke sumber daya nyata.

candiru
sumber
6
IMHO, ini lebih dari sekadar memisahkan peran. Idenya adalah Anda tidak dapat berasumsi bahwa nama jndi tersedia di server sehingga Anda memerlukan cara untuk memetakan nama yang digunakan dalam aplikasi Anda pada nama JNDI "asli" yang dipilih oleh penerapan.
Pascal Thivent
3
Ini pasti dasar, karena saya tidak dapat menemukannya dengan Google, tetapi jika saya ingin mencari "java: comp / env / jdbc / primaryDB", lalu mengapa nama res-ref-name "jdbc / primaryDB"?
Torben
4
Sejauh yang saya tahu, elemen "nama-jndi" BUKAN bagian dari web.xml standar, melainkan dari deskriptor penerapan vendor tertentu.
Ramon Chiara
2
@RaviParekh, dia menyebutkan "konfigurasi khusus penampung", bisa saja jboss-web.xml atau weblogic.xml atau file deskriptor penerapan khusus vendor lainnya
abhihello123
1
Bisakah kita menghubungkan ini dengan tomcat? Maksud saya, sumber data didefinisikan dalam context.xml di kucing jantan dan resource-ref di web.xml
Atul