Pertanyaan Apa tujuan dari JNDI


Bagaimana Anda bisa menyadari penggunaan JNDI, dengan contoh jika memungkinkan?


75
2017-08-29 08:03


asal


Jawaban:


JNDI adalah Java Naming and Directory Interface. Ini digunakan untuk memisahkan masalah aplikasi pengembang dan aplikasi deployer. Ketika Anda menulis aplikasi yang bergantung pada database, Anda tidak perlu khawatir tentang nama pengguna atau kata sandi untuk menghubungkan ke database itu. JNDI memungkinkan pengembang untuk memberikan nama ke database, dan bergantung pada deployer untuk memetakan nama itu ke instance database yang sebenarnya.

Misalnya, jika Anda menulis kode yang berjalan dalam wadah Java EE, Anda dapat menulis ini untuk mendapatkan sumber data dengan nama "Database" JNDI:


DataSource dataSource = null;
try
{
    Context context = new InitialContext();
    dataSource = (DataSource) context.lookup("Database");
}
catch (NamingException e)
{
    // Couldn't find the data source: give up
}

Perhatikan tidak ada apa pun di sini tentang driver database, atau nama pengguna, atau kata sandi. Itu dikonfigurasi di dalam wadah.

JNDI tidak terbatas pada database (JDBC); segala macam layanan dapat diberi nama. Untuk lebih jelasnya, Anda harus memeriksa Tutorial matahari tentang masalah ini.


96
2017-08-29 08:21



JNDI adalah mekanisme yang sangat kuat untuk mengatur informasi konfigurasi dan menemukan dan mendengarkan layanan via menggunakan EventContext. Di JNDI Anda dapat mencari dan mendengarkan apa saja objek (tidak adil DataSources), dengan asumsi bahwa penyedia layanan JNDI Anda mendukungnya.

Tentu saja, satu-satunya masalah adalah benar-benar memiliki penyedia layanan JNDI; hal yang hebat tentang ini adalah bahwa sangat mudah untuk menggulirkan milik Anda sendiri. Setelah semua Anda dapat mengkodekan contoh Java ke XML menggunakan JavaBeans XMLEncoder dan XMLDecoder: Anda tidak perlu bergantung pada server aplikasi!

Jadi apa perbedaan antara ini memiliki file konfigurasi? Yah, ini bisa jauh lebih bersih karena semua aplikasi Anda bisa mendapatkan konfigurasi dari tempat yang sama. Jika mereka perlu berbagi informasi konfigurasi (misalnya lokasi basis data) ini dapat didefinisikan satu kali di JNDI. Misalnya Anda memindahkan server basis data: Anda tidak perlu mengingat file konfigurasi trilyun dengan lokasi di dalamnya. Anda hanya pergi ke satu tempat: JNDI.


26
2017-08-29 17:23



JNDI adalah API yang digunakan untuk mengakses direktori dan layanan penamaan (yaitu sarana yang menghubungkan nama dengan objek). Hubungan nama dengan objek disebut pengikatan.

Contoh dasar dari layanan penamaan adalah DNS yang memetakan nama-nama mesin ke alamat IP.

Menggunakan JNDI, aplikasi dapat menyimpan dan mengambil objek bernama Java dari jenis apa pun.

Dalam konteks java ini dapat digunakan dalam file konfigurasi di mana Anda tidak ingin variabel khusus lingkungan hard-code.

Contoh Musim Semi:

File konteks musim semi

<bean id="WSClientConfig" class="com.example.BaseClientConfigImpl">
<property name="protocol">
    <jee:jndi-lookup jndi-name="java:comp/env/protocol" />
</property>
<property name="endpoint">
    <jee:jndi-lookup jndi-name="java:comp/env/endpoint" />
</property>
<property name="requestPath">
<jee:jndi-lookup jndi-name="java:comp/env/requestPath" />    
</property>

File konteks Tomcat

<Environment name="protocol" type="java.lang.String" value="https://"/>
<Environment name="endpoint" type="java.lang.String" value="172.0.0.1"/>
<Environment name="requestPath" type="java.lang.String" value="/path/to/service"/>

9
2018-03-28 12:41



JNDI memungkinkan penyederhanaan suatu sumber daya menjadi hanya a nama. Jadi, banyak detailnya kelompok menjadi 1 untuk kenyamanan / keamanan / dll. (Lapisan abstraksi alias)

menyadari: mengatur daftar properti yang sesuai dengan bidang yang telah ditentukan di Antarmuka Konteks Jndi. (properti ini menentukan pengaturan untuk eksekusi jndi; tetapi * bukan nama pencarian)

Properties props = new Properties();
//field Context.INITIAL_CONTEXT_FACTORY => property name java.naming.factory.initial
    //field Context.PROVIDER_URL => property name java.naming.provider.url
props.load(new FileInputStream("*properties file*")); //prop file in this case

Context ctx = new InitialContext(props);
    Object o = ctx.lookup("*name of resource*");

idealnya, fungsi khusus akan ada untuk menjaga direktori LDAP, DNS, dll, di organisasi Anda (jadi satu set layanan pemetaan tunggal yang terpadu semua, mengurangi perbedaan)

Daftar Penyedia Layanan JNDI: https://www.ibm.com/support/knowledgecenter/en/SSVSD8_8.4.1/com.ibm.websphere.dtx.adapjndi.doc/concepts/c_jndi_JNDI_Service_Providers_.htm


3
2018-06-13 02:31