JNDIคืออะไร
การใช้งานพื้นฐานคืออะไร?
จะใช้เมื่อไหร่?
JNDIคืออะไร
การใช้งานพื้นฐานคืออะไร?
จะใช้เมื่อไหร่?
คำตอบ:
JNDI คืออะไร
มันย่อมาจากJava การตั้งชื่อและไดเรกทอรีอินเตอร์เฟซ
การใช้งานพื้นฐานคืออะไร?
JNDI อนุญาตให้แอปพลิเคชันแบบกระจายค้นหาบริการในลักษณะที่เป็นนามธรรมและไม่ขึ้นกับทรัพยากร
เมื่อมีการใช้งาน?
กรณีการใช้งานบ่อยที่สุดคือการตั้งค่าพูลการเชื่อมต่อฐานข้อมูลบนแอ็พพลิเคชันเซิร์ฟเวอร์ Java EE แอปพลิเคชันใด ๆ ที่ปรับใช้บนเซิร์ฟเวอร์นั้นสามารถเข้าถึงการเชื่อมต่อที่ต้องการโดยใช้ชื่อ JNDI java:comp/env/FooBarPool
โดยไม่ต้องทราบรายละเอียดเกี่ยวกับการเชื่อมต่อ
นี่มีข้อดีหลายประการ:
devl->int->test->prod
สภาพแวดล้อมคุณสามารถใช้ชื่อ JNDI เดียวกันในแต่ละสภาพแวดล้อมและซ่อนฐานข้อมูลจริงที่ใช้ แอปพลิเคชั่นไม่จำเป็นต้องเปลี่ยนเมื่อพวกเขาย้ายระหว่างสภาพแวดล้อมJNDI คืออะไร
Java Naming และ Directory Interface TM (JNDI) เป็น application programming interface (API) ที่จัดเตรียมฟังก์ชันการตั้งชื่อและไดเร็กทอรีให้กับแอ็พพลิเคชันที่เขียนโดยใช้ภาษาการเขียนโปรแกรมJava TM มันถูกกำหนดให้เป็นอิสระจากการดำเนินการบริการไดเรกทอรีที่เฉพาะเจาะจง ดังนั้นความหลากหลายของไดเรกทอรี (ใหม่เกิดขึ้นใหม่และปรับใช้แล้ว) สามารถเข้าถึงได้ในลักษณะทั่วไป
การใช้งานพื้นฐานคืออะไร?
ส่วนใหญ่ครอบคลุมในคำตอบข้างต้น แต่ฉันต้องการให้สถาปัตยกรรมที่นี่เพื่อให้ด้านบนจะทำให้รู้สึกมากขึ้น
ในการใช้ JNDI คุณต้องมีคลาส JNDI และผู้ให้บริการอย่างน้อยหนึ่งราย Java 2 SDK, v1.3 มีผู้ให้บริการสามรายสำหรับบริการการตั้งชื่อ / ไดเรกทอรีต่อไปนี้:
ดังนั้นโดยทั่วไปคุณสร้างวัตถุและลงทะเบียนในบริการไดเรกทอรีซึ่งคุณสามารถทำการค้นหาและดำเนินการในภายหลัง
JNDI ในแง่ของคนธรรมดานั้นเป็นอินเตอร์เฟสสำหรับการรับอินสแตนซ์ของทรัพยากรภายใน / ภายนอกเช่น
javax.sql.DataSource,
javax.jms.Connection-Factory,
javax.jms.QueueConnectionFactory,
javax.jms.TopicConnectionFactory,
javax.mail.Session, java.net.URL,
javax.resource.cci.ConnectionFactory,
หรือชนิดอื่นใดที่กำหนดโดยอะแดปเตอร์ทรัพยากร JCA มันมีไวยากรณ์ในความสามารถในการสร้างการเข้าถึงไม่ว่าจะเป็นภายในหรือภายนอก ie (comp / env ในอินสแตนซ์นี้หมายถึงตำแหน่งที่องค์ประกอบ / สภาพแวดล้อมมีไวยากรณ์อื่น ๆ อีกมากมาย):
jndiContext.lookup("java:comp/env/persistence/customerDB");
java.lang.String
สำหรับข้อมูลการกำหนดค่า
ภาพรวม JNDI
JNDI เป็น API ที่ระบุในเทคโนโลยี Java ที่ให้ฟังก์ชันการตั้งชื่อและไดเรกทอรีไปยังแอปพลิเคชันที่เขียนด้วยภาษาการเขียนโปรแกรม Java มันถูกออกแบบมาโดยเฉพาะสำหรับแพลตฟอร์ม Java โดยใช้โมเดลวัตถุของ Java การใช้ JNDI แอปพลิเคชั่นที่ใช้เทคโนโลยีจาวาสามารถจัดเก็บและเรียกค้นวัตถุ Java ที่มีชื่อทุกประเภท นอกจากนี้ JNDI ยังมีวิธีสำหรับการดำเนินการกับไดเรกทอรีมาตรฐานเช่นการเชื่อมโยงคุณสมบัติกับวัตถุและค้นหาวัตถุโดยใช้คุณสมบัติ
JNDI ยังถูกกำหนดโดยไม่ขึ้นกับการตั้งชื่อหรือการปรับใช้บริการไดเรกทอรีเฉพาะ มันช่วยให้แอปพลิเคชันเข้าถึงบริการที่แตกต่างกันหลายชื่อและไดเรกทอรีโดยใช้ API ทั่วไป ผู้ให้บริการการตั้งชื่อและไดเรกทอรีต่าง ๆ สามารถต่อเชื่อมกับ API ทั่วไปนี้ได้อย่างราบรื่น สิ่งนี้ทำให้แอปพลิเคชันที่ใช้เทคโนโลยี Java สามารถใช้ประโยชน์จากข้อมูลในบริการการตั้งชื่อและไดเรกทอรีที่มีอยู่หลากหลายเช่น LDAP, NDS, DNS และ NIS (YP) รวมถึงการเปิดใช้งานแอพพลิเคชั่นร่วมกับซอฟต์แวร์และระบบดั้งเดิม
การใช้ JNDI เป็นเครื่องมือคุณสามารถสร้างแอปพลิเคชั่นที่ทรงพลังและพกพาใหม่ซึ่งไม่เพียง แต่ใช้ประโยชน์จากโมเดลวัตถุของ Java เท่านั้น แต่ยังรวมเข้ากับสภาพแวดล้อมที่มีการปรับใช้
JNDI คืออะไร
JNDI ย่อมาจาก Java Naming and Directory Interface มันมาพร้อมกับมาตรฐาน J2EE
การใช้งานพื้นฐานคืออะไร?
ด้วย API นี้คุณสามารถเข้าถึงข้อมูลหลายประเภทเช่นวัตถุอุปกรณ์ไฟล์การตั้งชื่อและบริการไดเรกทอรีเช่น มันถูกใช้โดย EJB เพื่อค้นหาวัตถุระยะไกล JNDI ถูกออกแบบมาเพื่อให้ติดต่อกันในการเข้าถึงบริการที่มีอยู่เช่น DNS, NDS, LDAP, CORBA และ RMI
เมื่อมีการใช้งาน?
คุณสามารถใช้ JNDI เพื่อดำเนินการตั้งชื่อรวมถึงการดำเนินการอ่านและการดำเนินการสำหรับการอัพเดตเนมสเปซ การดำเนินงานดังต่อไปนี้จะมีคำอธิบายที่นี่
ชื่อบริการเชื่อมโยงชื่อกับวัตถุและค้นหาวัตถุตามชื่อที่กำหนด (รีจิสทรี RMI เป็นตัวอย่างที่ดีของบริการการตั้งชื่อ) JNDI มีอินเตอร์เฟสทั่วไปสำหรับบริการการตั้งชื่อที่มีอยู่มากมายเช่น LDAP, DNS
หากไม่มี JNDI ตำแหน่งหรือการเข้าถึงข้อมูลของทรัพยากรระยะไกลจะต้องมีการกำหนดค่าตายตัวในแอปพลิเคชันหรือทำให้พร้อมใช้งานในการกำหนดค่า การรักษาข้อมูลนี้ค่อนข้างน่าเบื่อและเกิดข้อผิดพลาดได้ง่าย
ฉันแค่อยากรู้ว่าทำไมเอกสารอย่างเป็นทางการถึงถูกเพิกเฉยซึ่งทำให้รายละเอียดอย่างละเอียดแล้ว
แต่ถ้าคุณต้องการที่จะเข้าใจกรณีโปรดดูคำตอบของ duffymo
Java Naming และ Directory Interface TM (JNDI) เป็น application programming interface (API) ที่จัดเตรียมฟังก์ชันการตั้งชื่อและไดเร็กทอรีให้กับแอ็พพลิเคชันที่เขียนโดยใช้ภาษาการเขียนโปรแกรมJava TM มันถูกกำหนดให้เป็นอิสระจากการดำเนินการบริการไดเรกทอรีที่เฉพาะเจาะจง ดังนั้นความหลากหลายของไดเรกทอรี - ใหม่เกิดขึ้นใหม่และปรับใช้แล้ว - สามารถเข้าถึงได้ในลักษณะทั่วไป
และสถาปัตยกรรมของมัน
และตามปกติคุณจะใช้มันอย่างไร
I am just curious why the official docs are so ignored which elaborate the details meticulously already
อาจเป็นเพราะพวกเขาไม่ได้อธิบายอย่างเพียงพอที่คนธรรมดาจะเข้าใจ?
ฉันจะใช้ตัวอย่างหนึ่งเพื่ออธิบายวิธีที่ JNDI สามารถใช้ในการกำหนดค่าฐานข้อมูลโดยไม่ต้องมีผู้พัฒนาแอปพลิเคชันที่รู้ชื่อผู้ใช้และรหัสผ่านของฐานข้อมูล
1) เราได้กำหนดค่าแหล่งข้อมูลในเซิร์ฟเวอร์ของ JBoss แบบสแตนด์อโลน-full.xml นอกจากนี้เรายังสามารถกำหนดค่ารายละเอียดสระว่ายน้ำได้อีกด้วย
<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>
ตอนนี้ jndi-name และออบเจ็กต์แหล่งข้อมูลที่เกี่ยวข้องจะพร้อมใช้งานสำหรับ application.application ของเรา
2) เราสามารถดึงข้อมูลวัตถุแหล่งข้อมูลนี้ได้โดยใช้คลาส JndiDataSourceLookup
Spring จะสร้างอินสแตนซ์ของแหล่งข้อมูลถั่วหลังจากเราให้ชื่อ jndi
ตอนนี้เราสามารถเปลี่ยนขนาดพูลชื่อผู้ใช้หรือรหัสผ่านตามสภาพแวดล้อมหรือข้อกำหนดของเราได้ แต่จะไม่ส่งผลกระทบต่อแอปพลิเคชัน
หมายเหตุ : เข้ารหัสความปลอดภัยโดเมนเราต้องกำหนดค่าแยกในเซิร์ฟเวอร์ JBoss เช่น
<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>
นี่เป็นหนึ่งในกรณีการใช้งาน หวังว่ามันชัดเจน
คำอธิบายที่ดีที่สุดสำหรับฉันมีให้ที่นี่
JNDI คืออะไร
มันเป็น API เพื่อให้การเข้าถึงบริการไดเรกทอรีที่เป็นชื่อของการทำแผนที่บริการ (สตริง) กับวัตถุอ้างอิงไปยังวัตถุระยะไกลหรือข้อมูลง่าย สิ่งนี้เรียกว่าการผูก ชุดของการผูกเรียกว่าบริบท แอปพลิเคชันใช้อินเตอร์เฟส JNDI เพื่อเข้าถึงทรัพยากร
เพื่อให้ง่ายมากมันก็เหมือนกับ hashmap ที่มีคีย์ String และค่า Object ที่แสดงถึงทรัพยากรบนเว็บ
JNDI แก้ปัญหาอะไรบ้าง
หากไม่มี JNDI ตำแหน่งหรือการเข้าถึงข้อมูลของทรัพยากรระยะไกลจะต้องมีการกำหนดค่าตายตัวในแอปพลิเคชันหรือทำให้พร้อมใช้งานในการกำหนดค่า การรักษาข้อมูลนี้ค่อนข้างน่าเบื่อและเกิดข้อผิดพลาดได้ง่าย
หากมีการย้ายทรัพยากรบนเซิร์ฟเวอร์อื่นด้วยที่อยู่ IP อื่นแอปพลิเคชันทั้งหมดที่ใช้ทรัพยากรนี้จะต้องได้รับการอัปเดตด้วยข้อมูลใหม่นี้ ด้วย JNDI สิ่งนี้ไม่จำเป็น ต้องอัพเดตเฉพาะการเชื่อมโยงทรัพยากรที่เกี่ยวข้องเท่านั้น แอปพลิเคชันยังคงสามารถเข้าถึงได้ด้วยชื่อและการย้ายที่โปร่งใส