Apa itu JNDI? Apa penggunaan dasarnya? Kapan itu digunakan?


Jawaban:


241

Apa itu JNDI?

Itu adalah singkatan dari Java Naming dan Directory Interface .

Apa penggunaan dasarnya?

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:

  1. 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.
  2. 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.

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

masukkan deskripsi gambar di sini

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:

  1. Protokol Akses Direktori Ringan (LDAP)
  2. Arsitektur Permintaan Objek Umum (CORBA) layanan nama Layanan Objek Umum (COS)
  3. 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.


30

JNDI dalam istilah awam pada dasarnya adalah sebuah Antarmuka karena bisa mendapatkan contoh sumber daya internal / eksternal seperti

  javax.sql.DataSource, 
  javax.jms.Connection-Factory,
  javax.jms.QueueConnectionFactory,
  javax.jms.TopicConnectionFactory,
  javax.mail.Session, java.net.URL,
  javax.resource.cci.ConnectionFactory,

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

jndiContext.lookup("java:comp/env/persistence/customerDB");

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

Referensi


9

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 .


7

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.


3

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.

Dan arsitekturnya

masukkan deskripsi gambar di sini

Dan biasanya cara Anda menggunakannya .


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

 <datasource jta="false" jndi-name="java:/DEV.DS" pool-name="DEV" enabled="true" use-ccm="false">
                <connection-url>jdbc:oracle:thin:@<IP>:1521:DEV</connection-url>
                <driver-class>oracle.jdbc.OracleDriver</driver-class>
                <driver>oracle</driver>
                <security>
                    <user-name>usname</user-name>
                    <password>pass</password>
                    </security>
                    <security>

 <security-domain>encryptedSecurityDomain</security-domain>
                    </security>

                <validation>
                    <validate-on-match>false</validate-on-match>
                    <background-validation>false</background-validation>
                    <background-validation-millis>1</background-validation-millis>
                </validation>
                <statement>
                    <prepared-statement-cache-size>0</prepared-statement-cache-size>
                    <share-prepared-statements>false</share-prepared-statements>
                    <pool>
                        <min-pool-size>5</min-pool-size>
                        <max-pool-size>10</max-pool-size>
                    </pool>
                </statement>
            </datasource>

masukkan deskripsi gambar di sini

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.

masukkan deskripsi gambar di sini

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

<security-domain name="encryptedSecurityDomain" cache-type="default">
                    <authentication>
                        <login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
                            <module-option name="username" value="<usernamefordb>"/>
                            <module-option name="password" value="894c8a6aegc8d028ce169c596d67afd0"/>
                        </login-module>
                    </authentication>
                </security-domain>

Ini adalah salah satu kasus penggunaan. Semoga ini menjelaskan.


0

Penjelasan terbaik untuk saya diberikan di sini

Apa itu JNDI?

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.