JNDI memungkinkan aplikasi terdistribusi untuk mencari layanan secara abstrak, sumber daya independen.
Kapan digunakan?
Kasing penggunaan yang paling umum adalah menyiapkan kumpulan koneksi database pada server aplikasi Java EE. Aplikasi apa pun yang digunakan pada server itu dapat memperoleh akses ke koneksi yang mereka butuhkan menggunakan nama JNDI java:comp/env/FooBarPooltanpa harus mengetahui detail tentang koneksi.
Ini memiliki beberapa keunggulan:
Jika Anda memiliki urutan penerapan tempat aplikasi bergerak dari devl->int->test->prodlingkungan, Anda dapat menggunakan nama JNDI yang sama di setiap lingkungan dan menyembunyikan database aktual yang sedang digunakan. Aplikasi tidak harus berubah karena mereka bermigrasi di antara lingkungan.
Anda dapat meminimalkan jumlah orang yang perlu mengetahui kredensial untuk mengakses basis data produksi. Hanya server aplikasi Java EE yang perlu tahu jika Anda menggunakan JNDI.
jadi ini pada dasarnya merupakan alternatif yang lebih aman untuk memiliki file properti dengan info koneksi jdbc Anda?
Grinch
4
@ grinch: Intinya ya. Itu lebih aman, dan lebih terstandarisasi, sehingga membuat penyebaran lebih mudah (tidak perlu menebak apa nama file properti harus dll.).
sleske
Lalu apa perbedaan antara menggunakan variabel lingkungan dan JNDI? Apakah konsepnya serupa?
skryvets
100
Apa itu JNDI?
Java Naming dan Directory Interface TM (JNDI) adalah antarmuka pemrograman aplikasi (API) yang menyediakan fungsi penamaan dan direktori untuk aplikasi yang ditulis menggunakan bahasa pemrograman Java TM . Ini didefinisikan independen dari implementasi layanan direktori spesifik. Dengan demikian berbagai direktori (baru, baru muncul, dan sudah digunakan) dapat diakses secara umum.
Apa penggunaan dasarnya?
Sebagian besar dibahas dalam jawaban di atas tetapi saya ingin memberikan arsitektur di sini sehingga di atas akan lebih masuk akal.
Untuk menggunakan JNDI, Anda harus memiliki kelas JNDI dan satu atau lebih penyedia layanan. Java 2 SDK, v1.3 mencakup tiga penyedia layanan untuk layanan penamaan / direktori berikut:
Protokol Akses Direktori Ringan (LDAP)
Arsitektur Permintaan Objek Umum (CORBA) layanan nama Layanan Objek Umum (COS)
Registri Java Remote Method Invocation (RMI)
Jadi pada dasarnya Anda membuat objek dan mendaftarkannya pada layanan direktori yang nantinya dapat Anda lakukan pencarian dan menjalankan operasi.
atau jenis lain yang ditentukan oleh adaptor sumber daya JCA. Ini memberikan sintaks untuk dapat membuat akses apakah itu internal atau eksternal. yaitu (comp / env dalam contoh ini berarti di mana komponen / lingkungan, ada banyak sintaks lainnya):
Ini hanya bagian dari gambar. JNDI memungkinkan Anda mencari objek Java - mereka dapat berupa sumber daya seperti DataSource, atau yang lainnya, bahkan polos java.lang.Stringuntuk informasi konfigurasi.
sleske
3
@sleske Saya sarankan Anda membuat jawaban sendiri.
Ced
14
Ikhtisar JNDI
JNDI adalah API yang ditentukan dalam teknologi Java yang menyediakan fungsi penamaan dan direktori untuk aplikasi yang ditulis dalam bahasa pemrograman Java. Ini dirancang khusus untuk platform Java menggunakan model objek Java. Menggunakan JNDI, aplikasi yang berbasis pada teknologi Java dapat menyimpan dan mengambil objek Java yang disebut dari jenis apa pun. Selain itu, JNDI menyediakan metode untuk melakukan operasi direktori standar, seperti mengaitkan atribut dengan objek dan mencari objek menggunakan atributnya.
JNDI juga didefinisikan independen dari setiap penamaan atau implementasi layanan direktori spesifik. Ini memungkinkan aplikasi mengakses layanan penamaan dan direktori yang berbeda, mungkin banyak, menggunakan API umum. Penyedia layanan penamaan dan direktori yang berbeda dapat terhubung dengan mulus di belakang API umum ini. Ini memungkinkan aplikasi berbasis teknologi Java untuk memanfaatkan informasi dalam berbagai layanan penamaan dan direktori yang ada, seperti LDAP, NDS, DNS, dan NIS (YP), serta memungkinkan aplikasi untuk hidup berdampingan dengan perangkat lunak dan sistem lama.
Menggunakan JNDI sebagai alat, Anda dapat membangun aplikasi yang kuat dan portabel yang tidak hanya memanfaatkan model objek Java tetapi juga terintegrasi dengan lingkungan di mana mereka ditempatkan.
JNDI adalah singkatan dari Java Naming and Directory Interface. Muncul standar dengan J2EE.
Apa penggunaan dasarnya?
Dengan API ini, Anda dapat mengakses berbagai jenis data, seperti objek, perangkat, file penamaan dan layanan direktori, misalnya. digunakan oleh EJB untuk menemukan objek jarak jauh. JNDI dirancang untuk menyediakan antarmuka umum untuk mengakses layanan yang ada seperti DNS, NDS, LDAP, CORBA, dan RMI.
Kapan digunakan?
Anda dapat menggunakan JNDI untuk melakukan operasi penamaan, termasuk operasi baca dan operasi untuk memperbarui namespace. Operasi berikut dijelaskan di sini .
Layanan penamaan mengaitkan nama dengan objek dan menemukan objek berdasarkan nama yang diberikan. (RMI registry adalah contoh yang baik dari layanan penamaan.) JNDI menyediakan antarmuka umum untuk banyak layanan penamaan yang ada, seperti LDAP, DNS.
Tanpa JNDI, informasi lokasi atau akses sumber daya jarak jauh harus dikodekan dalam aplikasi atau disediakan dalam konfigurasi. Mempertahankan informasi ini cukup membosankan dan rawan kesalahan.
Saya hanya ingin tahu mengapa dokumen resmi begitu diabaikan yang sudah menguraikan detail dengan cermat.
Tetapi jika Anda ingin memahami kasusnya, silakan merujuk ke jawaban duffymo .
Java Naming dan Directory Interface TM (JNDI) adalah antarmuka pemrograman aplikasi (API) yang menyediakan fungsi penamaan dan direktori untuk aplikasi yang ditulis menggunakan bahasa pemrograman Java TM . Ini didefinisikan independen dari implementasi layanan direktori spesifik. Dengan demikian berbagai direktori - baru, baru muncul, dan sudah digunakan - dapat diakses dengan cara yang umum.
I am just curious why the official docs are so ignored which elaborate the details meticulously alreadyMungkin karena mereka tidak menjelaskan dengan cara yang cukup sehingga orang awam bisa mengerti?
skryvets
1
Saya akan menggunakan satu contoh untuk menjelaskan bagaimana JNDI dapat digunakan untuk mengkonfigurasi database tanpa pengembang aplikasi mengetahui nama pengguna dan kata sandi dari database.
1) Kami telah mengkonfigurasi sumber data di standalone-full.xml server JBoss . Selain itu, kami juga dapat mengonfigurasi detail kolam.
Sekarang, nama jndi ini dan objek sumber datanya yang terkait akan tersedia untuk aplikasi kita. Aplikasi.
2) Kita dapat mengambil objek sumber data ini menggunakan kelas JndiDataSourceLookup.
Spring akan instantiate bean sumber data, setelah kami memberikan nama jndi.
Sekarang, kita dapat mengubah ukuran kumpulan, nama pengguna atau kata sandi sesuai lingkungan atau persyaratan kita, tetapi itu tidak akan berdampak pada aplikasi.
Catatan : terenkripsiSecurityDomain, kita perlu mengkonfigurasinya secara terpisah di server JBoss seperti
Ini adalah API untuk menyediakan akses ke layanan direktori, yaitu, nama pemetaan layanan (string) dengan objek, referensi ke objek jarak jauh atau data sederhana . Ini disebut mengikat. Himpunan binding disebut konteks . Aplikasi menggunakan antarmuka JNDI untuk mengakses sumber daya.
Sederhananya, itu seperti sebuah hashmap dengan kunci String dan nilai-nilai Object yang mewakili sumber daya di web.
Masalah Apa yang Dipecahkan JNDI
Tanpa JNDI, informasi lokasi atau akses sumber daya jarak jauh harus dikodekan dalam aplikasi atau disediakan dalam konfigurasi. Mempertahankan informasi ini cukup membosankan dan rawan kesalahan.
Jika sumber daya telah dipindahkan di server lain, dengan alamat IP lain, misalnya, semua aplikasi yang menggunakan sumber daya ini harus diperbarui dengan informasi baru ini. Dengan JNDI, ini tidak perlu. Hanya pengikatan sumber daya yang sesuai harus diperbarui. Aplikasi masih dapat mengaksesnya dengan namanya dan relokasi transparan.
Jawaban:
Itu adalah singkatan dari Java Naming dan Directory Interface .
JNDI memungkinkan aplikasi terdistribusi untuk mencari layanan secara abstrak, sumber daya independen.
Kasing penggunaan yang paling umum adalah menyiapkan kumpulan koneksi database pada server aplikasi Java EE. Aplikasi apa pun yang digunakan pada server itu dapat memperoleh akses ke koneksi yang mereka butuhkan menggunakan nama JNDI
java:comp/env/FooBarPool
tanpa harus mengetahui detail tentang koneksi.Ini memiliki beberapa keunggulan:
devl->int->test->prod
lingkungan, Anda dapat menggunakan nama JNDI yang sama di setiap lingkungan dan menyembunyikan database aktual yang sedang digunakan. Aplikasi tidak harus berubah karena mereka bermigrasi di antara lingkungan.sumber
Java Naming dan Directory Interface TM (JNDI) adalah antarmuka pemrograman aplikasi (API) yang menyediakan fungsi penamaan dan direktori untuk aplikasi yang ditulis menggunakan bahasa pemrograman Java TM . Ini didefinisikan independen dari implementasi layanan direktori spesifik. Dengan demikian berbagai direktori (baru, baru muncul, dan sudah digunakan) dapat diakses secara umum.
Sebagian besar dibahas dalam jawaban di atas tetapi saya ingin memberikan arsitektur di sini sehingga di atas akan lebih masuk akal.
Untuk menggunakan JNDI, Anda harus memiliki kelas JNDI dan satu atau lebih penyedia layanan. Java 2 SDK, v1.3 mencakup tiga penyedia layanan untuk layanan penamaan / direktori berikut:
Jadi pada dasarnya Anda membuat objek dan mendaftarkannya pada layanan direktori yang nantinya dapat Anda lakukan pencarian dan menjalankan operasi.
sumber
JNDI dalam istilah awam pada dasarnya adalah sebuah Antarmuka karena bisa mendapatkan contoh sumber daya internal / eksternal seperti
atau jenis lain yang ditentukan oleh adaptor sumber daya JCA. Ini memberikan sintaks untuk dapat membuat akses apakah itu internal atau eksternal. yaitu (comp / env dalam contoh ini berarti di mana komponen / lingkungan, ada banyak sintaks lainnya):
sumber
java.lang.String
untuk informasi konfigurasi.Ikhtisar JNDI
Referensi
sumber
Apa itu JNDI?
JNDI adalah singkatan dari Java Naming and Directory Interface. Muncul standar dengan J2EE.
Apa penggunaan dasarnya?
Dengan API ini, Anda dapat mengakses berbagai jenis data, seperti objek, perangkat, file penamaan dan layanan direktori, misalnya. digunakan oleh EJB untuk menemukan objek jarak jauh. JNDI dirancang untuk menyediakan antarmuka umum untuk mengakses layanan yang ada seperti DNS, NDS, LDAP, CORBA, dan RMI.
Kapan digunakan?
Anda dapat menggunakan JNDI untuk melakukan operasi penamaan, termasuk operasi baca dan operasi untuk memperbarui namespace. Operasi berikut dijelaskan di sini .
sumber
Layanan penamaan mengaitkan nama dengan objek dan menemukan objek berdasarkan nama yang diberikan. (RMI registry adalah contoh yang baik dari layanan penamaan.) JNDI menyediakan antarmuka umum untuk banyak layanan penamaan yang ada, seperti LDAP, DNS.
Tanpa JNDI, informasi lokasi atau akses sumber daya jarak jauh harus dikodekan dalam aplikasi atau disediakan dalam konfigurasi. Mempertahankan informasi ini cukup membosankan dan rawan kesalahan.
sumber
Saya hanya ingin tahu mengapa dokumen resmi begitu diabaikan yang sudah menguraikan detail dengan cermat.
Tetapi jika Anda ingin memahami kasusnya, silakan merujuk ke jawaban duffymo .
Dan arsitekturnya
Dan biasanya cara Anda menggunakannya .
sumber
I am just curious why the official docs are so ignored which elaborate the details meticulously already
Mungkin karena mereka tidak menjelaskan dengan cara yang cukup sehingga orang awam bisa mengerti?Saya akan menggunakan satu contoh untuk menjelaskan bagaimana JNDI dapat digunakan untuk mengkonfigurasi database tanpa pengembang aplikasi mengetahui nama pengguna dan kata sandi dari database.
1) Kami telah mengkonfigurasi sumber data di standalone-full.xml server JBoss . Selain itu, kami juga dapat mengonfigurasi detail kolam.
Sekarang, nama jndi ini dan objek sumber datanya yang terkait akan tersedia untuk aplikasi kita. Aplikasi.
2) Kita dapat mengambil objek sumber data ini menggunakan kelas JndiDataSourceLookup.
Spring akan instantiate bean sumber data, setelah kami memberikan nama jndi.
Sekarang, kita dapat mengubah ukuran kumpulan, nama pengguna atau kata sandi sesuai lingkungan atau persyaratan kita, tetapi itu tidak akan berdampak pada aplikasi.
Catatan : terenkripsiSecurityDomain, kita perlu mengkonfigurasinya secara terpisah di server JBoss seperti
Ini adalah salah satu kasus penggunaan. Semoga ini menjelaskan.
sumber
Penjelasan terbaik untuk saya diberikan di sini
Apa itu JNDI?
Masalah Apa yang Dipecahkan JNDI
sumber