ความเข้าใจทั่วไปของ JNDI:
JNDI (การตั้งชื่อ Java และอินเทอร์เฟซไดเรกทอรี) มันมีชุดของอินเทอร์เฟซที่ใช้การตั้งชื่อและบริการไดเรกทอรี ผู้ใช้สามารถใช้บริการการตั้งชื่อและไดเรกทอรีผ่านมัน เช่นเดียวกับ JDBC JNDI มีสองส่วน: บริการชื่อและบริการไดเรกทอรีที่บริการไดเรกทอรีมีวัตถุไดเรกทอรีวัตถุไดเรกทอรีซึ่งมีวัตถุแอตทริบิวต์หลายอย่าง ให้การดำเนินการมากมายเกี่ยวกับคุณสมบัติ
บริการการตั้งชื่อและไดเรกทอรี:
เราใช้บริการการตั้งชื่อและไดเรกทอรีเช่นระบบไฟล์ของระบบปฏิบัติการซึ่งให้ฟังก์ชั่นเช่นการดำเนินการค้นหาการเพิ่มและการลบไฟล์ บริการ DNS ผูก URL และที่อยู่ IP เข้าด้วยกัน ฟังก์ชั่นที่สำคัญที่สุดของการตั้งชื่อและระบบไดเรกทอรีคือการผูกชื่อและวัตถุ บนพื้นฐานของมันมันยังมีฟังก์ชั่นเพิ่มเติมเช่นการค้นหาและการค้นหา ยิ่งไปกว่านั้นวัตถุที่เก็บไว้มีลำดับชั้นบางอย่าง การใช้บริการดังกล่าวเราสามารถจัดการและใช้งานวัตถุได้อย่างมีประสิทธิภาพมากขึ้น
บริการการตั้งชื่อแมปชื่อกับวัตถุ RMI Registry และบริการการตั้งชื่อ Corba เป็นทั้งบริการการตั้งชื่อ
บริการไดเรกทอรียังเก็บวัตถุ แต่บริการไดเรกทอรีตระหนักถึงคุณสมบัติที่เกี่ยวข้องของวัตถุเหล่านี้ คุณสามารถใช้คุณสมบัติโครงการเพื่อค้นหาไดเรกทอรี
ในช่วงต้นทศวรรษ 1990 โปรโตคอลการเข้าถึงไดเรกทอรีที่มีน้ำหนักเบา (LightweightDiretoryAccessProtocol) ได้รับการพัฒนาเป็นโปรโตคอลไดเรกทอรีมาตรฐานและ JNDI สามารถเข้าถึง LDAP ได้
J2SE จัดเตรียมแพ็คเกจส่วนขยาย 5 ชุดสำหรับ JNDI:
บริบท: บริบทเป็นชุดของการผูกชื่อกับวัตถุซึ่งสามารถเข้าใจได้ว่าเป็นลำดับชั้นหรือไดเรกทอรี นอกจากนี้ยังสามารถรวมเลเยอร์ถัดไปของ subcontext การได้รับบริบทเริ่มต้นเมื่อใช้การตั้งชื่อและบริการไดเรกทอรีเป็นรายการเข้าสู่การดำเนินการทั้งเนมสเปซทั้งหมด ในบริการไดเรกทอรีคือ dircontext
JNDI (การตั้งชื่อ Java และอินเทอร์เฟซไดเรกทอรี) เป็น API ที่ออกแบบโดยแอปพลิเคชันที่ให้อินเทอร์เฟซที่ใช้ร่วมกันและเป็นเอกภาพเพื่อค้นหาและเข้าถึงบริการที่มีชื่อและไดเรกทอรีต่างๆ JDBC ถูกสร้างขึ้นบนเลเยอร์ที่เป็นนามธรรม
ไดเรกทอรีและบริการที่มีอยู่ที่ JNDI สามารถเข้าถึงได้คือ:
DNS, XNAM, Novell Directory Service, LDAP (โปรโตคอลการเข้าถึงไดเรกทอรีน้ำหนักเบา), บริการวัตถุ Corba, ระบบไฟล์, Windows XP/2000/NT/ME/9X Registry, RMI, DSML V1 & V2, NIS
ข้อดีของ JNDI:
มันมีบริการการตั้งชื่อและไดเรกทอรีจำนวนมากโดยใช้อินเทอร์เฟซทั่วไปเพื่อเข้าถึงบริการประเภทต่างๆ สามารถเชื่อมต่อกับบริการการตั้งชื่อหรือไดเรกทอรีหลายรายการในเวลาเดียวกัน มันสร้างความสัมพันธ์เชิงตรรกะช่วยให้ชื่อเชื่อมโยงกับวัตถุ Java หรือทรัพยากรโดยไม่ต้องชี้นำ ID ทางกายภาพของวัตถุหรือทรัพยากร
แพ็คเกจ jndi:
Jndi กับ JDBC:
JNDI เป็นวิธีที่รวมกันในการค้นหาและเข้าถึงบริการบนเครือข่าย โดยการระบุชื่อทรัพยากรที่สอดคล้องกับบันทึกในฐานข้อมูลหรือบริการการตั้งชื่อจะส่งคืนข้อมูลที่จำเป็นสำหรับการสร้างการเชื่อมต่อฐานข้อมูล
ตัวอย่างรหัส:
ลอง {context cntxt = new InitialContext (); DataSource ds = (DataSource) cntxt.lookup ("jdbc/dpt");} catch (namingexception ne) {... } Jndi และ JMS:
การสื่อสารข้อความเป็นวิธีที่ใช้โดยส่วนประกอบซอฟต์แวร์หรือแอปพลิเคชันเพื่อสื่อสาร JMS เป็นเทคโนโลยี Java ที่อนุญาตให้แอปพลิเคชันสร้างส่งรับและอ่านข้อความ
ตัวอย่างรหัส:
ลอง {คุณสมบัติ env = properties ใหม่ (); initialContext inictxt = new InitialContext (env); TopicConnectionFactory Connactory = (TopicConnectionFactory) inictxt.lookup ("ttopicConnectionFactory"); ... เยี่ยมชมไดเรกทอรีเฉพาะ: ตัวอย่างเช่นบุคคลเป็นวัตถุและเขามีคุณลักษณะหลายอย่างเช่นชื่อบุคคลหมายเลขโทรศัพท์ที่อยู่อีเมลรหัสไปรษณีย์และแอตทริบิวต์อื่น ๆ โดยวิธี getattributes ()
แอตทริบิวต์ attr = directory.getattributes (personname) .get ("อีเมล"); string email = (string) attr.get (); โดยใช้ JNDI ให้ลูกค้าใช้ชื่อหรือแอตทริบิวต์ของวัตถุเพื่อค้นหาวัตถุ:
Foxes = directory.search ("o = wiz, c = us", "sn = fox", ควบคุม); ตัวอย่างของการค้นหาเครื่องพิมพ์โดยใช้ JNDI เพื่อค้นหาวัตถุเช่นเครื่องพิมพ์และฐานข้อมูล:
เครื่องพิมพ์เครื่องพิมพ์ = (เครื่องพิมพ์) namespace.lookup (printername); Printer.print (เอกสาร);
เรียกดูเนมสเปซ:
รายการ namingenumeration = namespace.list ("o = วิดเจ็ต, c = เรา"); ในขณะที่ (list.hasmore ()) {nameclasspair entry = (nameclasspair) list.next (); display (entry.getName (), entry.getClassName ());}ตัวอย่างรหัส: รับชื่อชื่อคลาสและวัตถุที่ถูกผูกไว้อีกครั้ง
Namingenumeration namenumList = ctxt.listbinding ("cntxtname"); ... ในขณะที่ (namenumlist.hasmore ()) {binding bnd = (binding) namenumList.next (); string sobjname = bnd.getName (); (someObject) bnd.getObject ();} การทำความเข้าใจแนวคิดของบริการชื่อและบริการไดเรกทอรีจะช่วยให้ใช้ JNDI ได้ดีขึ้น บริการชื่อบริการตั้งชื่อกำหนดวิธีเชื่อมโยงชื่อกับวัตถุและวิธีการค้นหาวัตถุผ่านชื่อ ตัวอย่างทั่วไปคือ: DNS Associates ชื่อโดเมนด้วย IP และระบบไฟล์เชื่อมโยงชื่อไฟล์กับไฟล์ ในชื่อบริการแนวคิดหลัก:
- ชื่อ (ชื่อ) ชื่อรหัสของวัตถุจริงในระบบชื่อเช่นชื่อไฟล์ชื่อโดเมน ฯลฯ มันจะถูกใช้เพื่อค้นหาวัตถุที่เกี่ยวข้อง ระบบที่แตกต่างกันจะมีข้อกำหนดการตั้งชื่อที่แตกต่างกันเช่นระบบไฟล์ใช้ "/" เพื่อเป็นตัวแทนของลำดับชั้นในขณะที่ DNS ใช้ "
- การผูกความสัมพันธ์ของชื่อและวัตถุจริง
- การอ้างอิงและที่อยู่ เมื่อวัตถุไม่สามารถเก็บไว้ได้โดยตรงในระบบชื่อต้องใช้การอ้างอิงเพื่อค้นหาวัตถุจริงผ่านการอ้างอิง ในระบบเนื้อหาของการอ้างอิงที่บันทึกไว้เรียกว่าที่อยู่ ใบเสนอราคามีการใช้งานอื่น: ในระบบชื่อแนวคิดของคีย์ต่างประเทศในฐานข้อมูลเชิงสัมพันธ์ยังขาดอยู่ โดยการใช้การอ้างอิงสามารถใช้เป็นทางเลือกแทนคีย์ต่างประเทศ
-บริบทมันเป็นคอลเลกชันชื่อวัตถุที่ให้การดำเนินการหลักเพื่อโต้ตอบกับระบบชื่อเช่นการค้นหาการเชื่อมโยงและการยกเลิกการผูกมัด ความสัมพันธ์ระหว่างบริบทของเด็ก (subcontext) คล้ายกับความสัมพันธ์ระหว่างไดเรกทอรีและไดเรกทอรีย่อยในระบบไฟล์ บริบทของเด็กมีอยู่ในบริบทและเกี่ยวข้องกับบริบทของเด็กผ่านชื่อในบริบทของผู้ปกครอง
- ระบบการตั้งชื่อและเนมสเปซ ระบบชื่อเป็นคอลเลกชันของบริบทประเภทเดียวกันและให้บริการชื่อ พื้นที่ชื่อเป็นชุดของชื่อในระบบชื่อเช่นชื่อไฟล์และไดเรกทอรีของระบบไฟล์
Directory Service Directory Service เป็นส่วนขยายของบริการชื่อ นอกเหนือจากการเชื่อมโยงชื่อและวัตถุแล้วยังช่วยให้วัตถุมีแอตทริบิวต์ ระบบไดเรกทอรีมักจะจัดระเบียบข้อมูลในลำดับชั้น แนวคิดหลักในบริการไดเรกทอรี:
- แอตทริบิวต์ซึ่งเป็นของวัตถุไดเรกทอรีมันเป็นคู่ (ชื่อค่า) และแอตทริบิวต์สามารถมีหลายค่า
- ไดเรกทอรีและบริการไดเรกทอรีไดเรกทอรีเป็นคอลเลกชันของวัตถุไดเรกทอรี บริการไดเรกทอรีให้บริการที่เกี่ยวข้องกับไดเรกทอรีเพื่อสร้างลบและแก้ไขคุณสมบัติของวัตถุที่เก็บไว้ในไดเรกทอรี
- การค้นหาและตัวกรองการค้นหาการดำเนินการของการรับวัตถุไดเรกทอรีคือการค้นหา ตัวกรองเป็นวัตถุที่คล้ายกับเงื่อนไขการค้นหา
การใช้งานขั้นพื้นฐาน
²การลงทะเบียนผู้ให้บริการ JNDI ก่อนที่จะใช้ JNDI คุณต้องได้รับผู้ให้บริการ JNDI และลงทะเบียนกับระบบ คุณสมบัติของระบบที่เกี่ยวข้องกับ JNDI ถูกกำหนดใน javax.naming.context, คุณสมบัติที่ใช้กันทั่วไป:
- java.naming.factory.initial ชื่อคลาสที่ใช้โดยผู้ให้บริการเพื่อสร้าง InitialContext
- java.naming.provider.url ใช้เพื่อกำหนดค่า URL เริ่มต้นของ InitialContext
-java.naming.factory.Object คลาสที่ใช้ในการสร้างแผนที่ชื่อต่อวัตถุใช้สำหรับ Nameclasspair และการอ้างอิง
- java.naming.factory.state คลาสที่ใช้ในการสร้างสถานะ JNDI สำหรับบริการไดเรกทอรีมักจะต้องมีการตั้งค่าความปลอดภัยและมักจะใช้:
- java.naming.security.authentication, ประเภทความปลอดภัย, สามค่า: ไม่มี, ง่ายหรือแข็งแรง
- java.naming.security.principal, ข้อมูลการตรวจสอบสิทธิ์
- java.naming.security.credentials, ข้อมูลใบรับรอง
- java.naming.security.protocol ชื่อโปรโตคอลความปลอดภัย
ลงทะเบียนด้วย System.SetProperty หากโปรแกรมไม่แสดงคำแนะนำ Java จะค้นหาไฟล์ jdni.properties ใน classpath เพื่อให้การลงทะเบียนเสร็จสมบูรณ์ ตัวอย่าง jdni.properties:
java.naming.factory.initial = com.codeline.db.mockinitialContextFactory
บริการเชื่อมต่อ
หลังจากลงทะเบียนคุณสามารถใช้การเชื่อมต่อบริการ สำหรับบริการชื่อเริ่มต้นด้วย InitialContext, Directory Services ใช้ initialdircontext พวกเขาใช้บริบทและ dircontext ตามลำดับ อินเทอร์เฟซทั้งสองนี้สอดคล้องกับอินเทอร์เฟซของบริการชื่อและบริการไดเรกทอรีและยังเป็นอินเทอร์เฟซที่สำคัญที่สุดสองประการใน JNDI
เชื่อมต่อบริการชื่อ:
System.SetProperty (context.initial_context_factory, "com.sun.jndi.fscontext.fscontextfactory"); InitialContext ctx = new InitialContext ();
เชื่อมต่อกับบริการไดเรกทอรี:
hashtable env = new hashtable (); env.put (context.initial_context_factory, "com.sun.jndi.ldap.ldapctxfactory"); env.put (context.provider_url, "ldap: //myserver.com/"); env.put (context.security_authentication, "ง่าย"); // ชื่อผู้ใช้ที่จำเป็นในการเข้าสู่ระบบ LDAP คือ env.put (context.security_principal, "ldapuser"); // เข้าสู่ระบบเพื่อ LDAP รหัสผ่านที่เซิร์ฟเวอร์ต้องการคือ env.put (context.security_credentials, "myPassword"); initialdircontext ctx = ใหม่เริ่มต้น Tircontext (env);
ผู้ให้บริการหลายบริการ: หากแอปพลิเคชันมีผู้ให้บริการหลายรายมันจะแตกต่างกันเล็กน้อยเมื่อเชื่อมต่อ ใช้บริการชื่อเป็นตัวอย่าง
hashtable env = new hashtable (); env.put (context.initial_context_factory, "com.sun.jndi.rmi.registry.registryContextFactory"); env.put (context.provider_url, "rmi: //myserver.com: 1099"); // ใช้ตัวสร้างที่แตกต่างกันเริ่มต้น ctx = new InitialContext (env);
ค้นหาวัตถุ
ไม่ว่าจะเป็นบริการชื่อหรือบริการไดเรกทอรีการค้นหาจะใช้เพื่อค้นหาวัตถุ นอกเหนือจากการใช้สตริงเป็นพารามิเตอร์การค้นหายังสามารถใช้อินเตอร์เฟสชื่อเป็นพารามิเตอร์
greeter greeter = (greeter) ctx.lookup ("sayhello"); หากคุณต้องการรับชื่อวัตถุทั้งหมดในบริบทให้ใช้ LIS เพื่อส่งคืนรายการ Nameclasspair Nameclasspair มีชื่อวัตถุและชื่อคลาสวัตถุ หากคุณต้องการรับรายการอินสแตนซ์ของวัตถุจริงให้ใช้ listbindings ซึ่งส่งคืนรายการที่มีผลผูกพัน การผูกเป็นคลาสย่อยของ Nameclasspair ซึ่งมีอินสแตนซ์ของวัตถุ
- รายการ
รายการ namingenumeration = ctx.list ("awt"); ในขณะที่ (list.hasmore ()) {nameclasspair nc = (nameclasspair) list.next (); System.out.println (NC); - - ListBindings
การเชื่อมโยงการผูกมัด = ctx.listbindings ("awt"); ในขณะที่ (bindings.hasmore ()) {การผูก bd = (การผูก) bindings.next (); System.out.println (bd.getName () + ":" + bd.getObject ()); -
การผูกวัตถุ
- เพิ่มการผูกโดยใช้การผูก
ผลไม้ผลไม้ = ผลไม้ใหม่ ("สีส้ม"); ctx.bind ("โปรด", ผลไม้); - ใช้ rebind เพื่อแก้ไขการเชื่อมโยง
ผลไม้ผลไม้ = ผลไม้ใหม่ ("มะนาว"); ctx.rebind ("โปรด", ผลไม้); - ใช้ Unbind เพื่อลบการผูก
ctx.unbind ("โปรด");
เปลี่ยนชื่อวัตถุ
ใช้การเปลี่ยนชื่อเพื่อเปลี่ยนชื่อวัตถุในบริบท
ctx.rename ("report.txt", "old_report.txt");- อินเทอร์เฟซที่เกี่ยวข้องกับการรับแอตทริบิวต์เป็นแอตทริบิวต์และแอตทริบิวต์ซึ่งทั้งสองอย่างนี้อยู่ในแพ็คเกจ Javax.naming.directory คุณสามารถรับแอตทริบิวต์ของวัตถุผ่านวิธี getAttributes ของ dirContext จากนั้นใช้วิธี GET ของแอตทริบิวต์เพื่อรับแอตทริบิวต์ที่เกี่ยวข้องและในที่สุดคุณก็สามารถรับค่าแอตทริบิวต์ผ่านวิธีการของแอตทริบิวต์
String dn = "uid = me, dc = myCompany, dc = com, ou = ลูกค้า, o = exampleApp"; บริบทผู้ใช้ = (บริบท) CTX.Lookup (DN); // รับแอตทริบิวต์ทั้งหมดแอตทริบิวต์ attrs = user.getAttributes (""); การทดสอบแอตทริบิวต์ = attrs .get ("ทดสอบ"); TestValue Object = test.get ();ในตัวอย่างข้างต้นจะได้รับแอตทริบิวต์ทั้งหมดของผู้ใช้ ในการใช้งานจริงเมื่อพิจารณาถึงผลกระทบของแบนด์วิดท์เครือข่ายคุณสามารถตั้งค่ารายการแอตทริบิวต์ที่จะได้รับ:
string reqd_attrs = สตริงใหม่ [] {"นามสกุล", "ชื่อย่อ", "ชื่อ", "rfc822mailalias"}; แอตทริบิวต์ attrs = user.getAttributes ("", reqd_attrs);
ค้นหาและกรอง
ใช้วิธีการค้นหาเพื่อให้เสร็จสมบูรณ์
public dirContext [] findUser (ค่าเริ่มต้นสตริง, นามสกุลสตริง, สตริงประเทศ, โทรศัพท์สตริง) {// เงื่อนไขการก่อสร้าง BasicAttributes search_attrs = ใหม่ BasicAtTributes (); search_attrs.put ("ชื่อย่อ", ชื่อย่อ); search_attrs.put ("sn", เหตุการณ์); search_attrs.put ("C", ประเทศ); ถ้า (โทรศัพท์! = null) search_attrs.put ("phonenumber", โทรศัพท์); ผลการ NaminingEnumeration = initial_ctx.search ("ou = ลูกค้า, o = ExampleApp", search_attrs); linkedList found = new LinkedList (); ในขณะที่ (results.hasmore ()) {searchResults sr = (searchResults) results.next (); ชื่อสตริง = sr.getName (); Object ctx = sr.getObject (); if ((ctx == null) ||! (ctx instanceof dircontext)) found.add (initial_ctx.lookup (ชื่อ)); Found.add (CTX); } dircontext [] ret_val = new dircontext [found.size ()]; Found.toArray (ret_val); return ret_val; -
วิธีการกรองหลักของอินเทอร์เฟซ DirContext:
1. ใช้สตริงตัวกรอง
string reqd_attrs = สตริงใหม่ [] {"cn", "uid", "rfc822mailalias"}; ผลการ NaminingEnumeration = initial_ctx.search ("OU = ลูกค้า, o = ExampleApp", search_attrs, reqd_attrs);
2. ใช้ SearchControls เพื่อรับการควบคุมเพิ่มเติม
SearchControls ctrls = new SearchControls (); Ctrls.setCountLimit (20); ctrls.settimelimit (5,000); ctrls.setSearchScope (searchControls.subtree_scope); ผลการ Nammingenumeration = initial_ctx.search ("cat = books, ou = products, o = exampleApp", "title =*java*", ctrls); แก้ไขคุณสมบัติ
มันทำโดยใช้วิธีการ modifyattributes ของ dircontext และ initialdircontext กระบวนการปรับเปลี่ยนที่เรียกว่าจริง ๆ แล้วจะสร้างรายการของแอตทริบิวต์ที่จะแก้ไขก่อนแล้วจึงส่งโดยใช้วิธีข้างต้น เมื่อคุณสมบัติมีหลายค่าจำเป็นต้องรวมค่าที่ไม่ได้แก้ไขของคุณสมบัติมิฉะนั้นเซิร์ฟเวอร์จะลบค่าเหล่านั้นหากไม่จำเป็นต้องใช้อีกต่อไป
โมฆะสาธารณะ updateAddress (String DN, ที่อยู่สตริง, สตริงประเทศ, โทรศัพท์สตริง) {BasicAtTributes mod_attrs = ใหม่ BasicAttributes (); ถ้า (ที่อยู่! = null) mod_attrs.put ("ที่อยู่", ที่อยู่); ถ้า (ประเทศ! = null) mod_attrs.put ("c", ประเทศ); ถ้า (โทรศัพท์! = null) mod_attrs.put ("phonenumber", โทรศัพท์); if (mod_attrs.size ()! = 0) intial_ctx.modifyattributes (dn, dircontext.replace_attribute, mod_attrs); - การใช้ ModificationItem คุณยังสามารถดำเนินการปรับเปลี่ยนได้หลายครั้งในครั้งเดียว:
ModificationItem [] mod_items = new ModificationItems [2]; attribute email = new BasicAttribute ("RFC822Mailalias", new_email); ModificationItem email_mod = ใหม่ modificationItem (dircontext.add_attribute, อีเมล); แอตทริบิวต์ addr = ใหม่ BasicAttribute ("ที่อยู่", ที่อยู่); ModificationItem addr_mod = new ModificationItem (dircontext.replace_attribute, addr); mod_items [0] = email_mod; mod_items [1] = addr_mod; initial_ctx.modifyattributes (dn, mod_items); สร้างบริบท
ใช้วิธี createSubContext เพื่อให้เสร็จสมบูรณ์
BasicAttributes attrs = ใหม่ BasicAttributes (); attrs.put ("ชื่อย่อ", ชื่อย่อ); Attrs.put ("SN", เหตุการณ์); Attrs.put ("RFC822Mailalias", อีเมล); ถ้า (ที่อยู่! = null) attrs.put ("ที่อยู่", ที่อยู่); ถ้า (ประเทศ! = null) attrs.put ("c", ประเทศ); if (โทรศัพท์! = null) attrs.put ("phonenumber", โทรศัพท์); initial_ctx.createsubcontext (dn, attrs);
ลบบริบท
ใช้วิธี DestroySubContext เพื่อให้เสร็จสมบูรณ์
initial_ctx.destroysubcontext (DN);
ตัวอย่าง
นี่เป็นอีกตัวอย่างหนึ่ง
กำหนดค่าใน conf/server.xml ของ Tomcat:
<context path = "/jndi"> <resource name = "Bean/myBeanFactory" auth = "container" type = "com.huawei.jndi.bean.mybean" Factory = "org.apache.naming.factory.beanfactory" bar = "23"/>
ส่วนประกอบถูกประกาศใน Tomcat ด้านบนและคุณสามารถรับส่วนประกอบนี้ในรหัส:
ลอง {context initContext = new InitialContext (); บริบท envctx = (บริบท) initcontext.lookup ("java: comp/env"); MyBean Bean = (MyBean) Envctx.lookup ("Bean/MyBeanFactory"); System.out.println (bean.getBar ()); } catch (exception e) {e.printstacktrace (); -สรุป: กำหนดค่าองค์ประกอบ JNDI ใน Tomcat จากนั้นรับส่วนประกอบที่ติดตั้งในรหัส
คลาสการใช้งาน JNDI ของแต่ละเว็บคอนเทนเนอร์นั้นแตกต่างกัน ตัวอย่างเช่นใน JBoss คลาสบทบัญญัติ JNDI คือ org.jnp.interfaces.namingcontextfactory ซึ่งแตกต่างจาก Tomcat
จากมุมมองนี้บทบาทของ JNDI นั้นคล้ายคลึงกับการฉีดพึ่งพาของฤดูใบไม้ผลิ อย่างไรก็ตามผ่าน JNDI เป็นไปได้ที่จะได้รับส่วนประกอบข้ามแอปพลิเคชันและแม้กระทั่งในโดเมน ส่วนประกอบที่กำหนดค่าบนเซิร์ฟเวอร์ A สามารถรับได้ผ่าน JNDI บนเซิร์ฟเวอร์อื่น B
ฤดูใบไม้ผลิยังให้การห่อหุ้มของ JNDI ซึ่งสะดวกกว่าในการใช้งาน ต่อไปนี้เป็นตัวอย่าง
<!-เทมเพลต jndi-> <bean id = "jnditemplate"> <property name = "environment"> <props> <prop key = "java.naming.factory.initial"> org.jnp.interfaces.namingcontextfactory </prop> key = "java.naming.provider.url"> 10.137.96.212:18199 </prop> <prop key = "java.naming.factory.url.pkgs"> org.jnp.interfaces: org.jboss.naming id = "jmsconnectionfactory"> <property name = "jnditemplate" ref = "jnditemplate" /> <property name = "jndiname" value = "TopicConnectionFactory" /> </ebean>
ก่อนอื่นประกาศ JNDITEMPLATE กำหนดค่าที่อยู่เป้าหมายและคลาสการจัดเตรียมบริการ JNDI จากนั้นผ่าน JndiobjectFactoryBean คุณสามารถรับส่วนประกอบ JNDI ได้อย่างง่ายดายและทำการแปลงประเภท