סקירה כללית על שמות Java וממשק מדריך

1. הקדמה

ממשק ה- Java Naming and Directory (JNDI) מספק שימוש עקבי בשירותי שמות ו / או ספריות כ- API של Java. ניתן להשתמש בממשק זה לכריכת אובייקטים, חיפוש או שאילתות על אובייקטים, כמו גם איתור שינויים על אותם אובייקטים.

בעוד ש- JNDI כולל רשימה מגוונת של שירותי שמות וספריות נתמכים, במדריך זה נתמקד ב- JDBC תוך כדי חקר ה- API של JNDI.

2. תיאור JNDI

כל עבודה עם JNDI דורשת הבנה של השירות הבסיסי בנוסף ל יישום נגיש. לדוגמא, שירות חיבור בסיס נתונים קורא למאפיינים ספציפיים וטיפול בחריגים.

עם זאת, ההפשטה של ​​JNDI מבטלת את תצורת החיבור מהיישום.

בוא נחקור שֵׁם ו הֶקשֵׁר, המכילים את הפונקציונליות המרכזית של JNDI.

2.1. שֵׁם מִמְשָׁק

שם objectName = חדש CompositeName ("java: comp / env / jdbc");

ה שֵׁם הממשק מספק את היכולת לנהל את שמות הרכיבים ותחביר עבור שמות JNDI. האסימון הראשון של המחרוזת מייצג את ההקשר הגלובלי, לאחר מכן כל מחרוזת שנוספה מייצגת את המשנה הבאה:

רכיבי ספירה = objectName.getAll (); בעוד (elements.hasMoreElements ()) {System.out.println (elements.nextElement ()); }

התפוקה שלנו נראית כמו:

java: comp env jdbc

כמו שאנו יכולים לראות, / הוא התיחום עבור שֵׁם תת-הקשרים. עכשיו, בואו להוסיף תת-הקשר:

objectName.add ("דוגמה");

ואז אנו בודקים את התוספת שלנו:

assertEquals ("דוגמה", objectName.get (objectName.size () - 1));

2.2. הֶקשֵׁר מִמְשָׁק

הֶקשֵׁר מכיל את המאפיינים לשירות שמות וספריות. הנה, בואו נשתמש בקוד עוזר מ- Spring מטעמי נוחות לבניית a הֶקשֵׁר:

בונה SimpleNamingContextBuilder = SimpleNamingContextBuilder חדש (); builder.activate ();

האביב SimpleNamingContextBuilder יוצר ספק JNDI ואז מפעיל את הבנאי באמצעות ה- NamingManager:

JndiTemplate jndiTemplate = JndiTemplate חדש (); ctx = (InitialContext) jndiTemplate.getContext ();

סוף כל סוף, JndiTemplate עוזר לנו לגשת ל InitialContext.

3. כריכה וחיפוש אובייקטים של JNDI

עכשיו כשראינו להשתמש שֵׁם ו הֶקשֵׁר, בואו נשתמש ב- JNDI לאחסון JDBC מקור מידע:

ds = DriverManagerDataSource חדש ("jdbc: h2: mem: mydb");

3.1. קשירת אובייקטים של JNDI

מכיוון שיש לנו הקשר, נקשר אליו את האובייקט:

ctx.bind ("java: comp / env / jdbc / source source", ds);

באופן כללי, שירותים צריכים לאחסן הפניה לאובייקט, נתונים סדרתיים או תכונות בהקשר של ספרייה. הכל תלוי בצרכי היישום.

שים לב כי שימוש בדרך זו ב- JNDI פחות נפוץ. בדרך כלל, JNDI מתממשק עם נתונים שמנוהלים מחוץ לזמן הריצה של היישום.

עם זאת, אם היישום כבר יכול ליצור או למצוא אותו מקור מידע, אולי יהיה קל יותר לחבר את זה באמצעות אביב. לעומת זאת, אם משהו מחוץ ליישום שלנו קשור אובייקטים ב- JNDI, היישום יכול לצרוך אותם.

3.2. מחפש אובייקטים של JNDI

בואו נחפש את שלנו מקור מידע:

DataSource ds = (DataSource) ctx.lookup ("java: comp / env / jdbc / source datas");

ואז בואו לבדוק כדי להבטיח זאת מקור מידע הוא כצפוי:

assertNotNull (ds.getConnection ());

4. חריגים נפוצים של JNDI

עבודה עם JNDI עלולה לגרום לפעמים לחריגים בזמן ריצה. הנה כמה נפוצים.

4.1. NameNotFoundException

ctx.lookup ("badJndiName");

מכיוון ששם זה אינו מחויב בהקשר זה, אנו רואים את עקבות הערימה:

javax.naming.NameNotFoundException: שם [badJndiName] לא מאוגד; 0 כריכות: [] ב- org.springframework.mock.jndi.SimpleNamingContext.lookup (SimpleNamingContext.java:140) ב- java.naming / javax.naming.InitialContext.lookup (InitialContext.java:409)

עלינו לשים לב שמעקב הערימה מכיל את כל האובייקטים המאוגדים, דבר שימושי למעקב אחר הסיבה להתרחשות החריג.

4.2. NoInitialContextException

כל אינטראקציה עם InitialContext יכול לזרוק NoInitialContextException:

assertThrows (NoInitialContextException.class, () -> {JndiTemplate jndiTemplate = new JndiTemplate (); InitialContext ctx = (InitialContext) jndiTemplate.getContext (); ctx.lookup ("java: comp / env / jdbc /) source" .printStackTrace ();

עלינו לציין כי שימוש זה ב- JNDI תקף, כפי שהשתמשנו בו קודם. עם זאת, הפעם אין ספק הקשר JNDI, ויוצא חריג:

javax.naming.NoInitialContextException: צריך לציין את שם המחלקה בסביבת המערכת או במאפיין המערכת, או בקובץ משאב יישום: java.naming.factory.initial ב- java.naming / javax.naming.spi.NamingManager.getInitialContext (NamingManager.java: 685)

5. תפקיד JNDI בארכיטקטורת יישומים מודרנית

בזמן JNDI ממלאת פחות תפקיד ביישומי Java קלים ומכולות כמו Spring Boot, ישנם שימושים אחרים. שלוש טכנולוגיות Java שעדיין משתמשות ב- JNDI הן JDBC, EJB ו- JMS. לכולם מגוון רחב של שימושים בכל יישומי הארגון של Java.

לדוגמא, צוות DevOps נפרד עשוי לנהל משתני סביבה כגון שם משתמש וסיסמא עבור חיבור בסיסי רגיש בכל הסביבות. ניתן ליצור משאב JNDI במיכל יישומי האינטרנט, כאשר JNDI משמש כשכבה של הפשטה עקבית הפועלת בכל הסביבות.

התקנה זו מאפשרת למפתחים ליצור ולשלוט בהגדרה מקומית למטרות פיתוח תוך התחברות למשאבים רגישים בסביבת ייצור באותו שם JNDI.

6. מסקנה

במדריך זה ראינו חיבור, קישור וחיפוש אובייקט באמצעות ממשק Java Naming and Directory. בדקנו גם את החריגים הנפוצים של JNDI.

לבסוף בדקנו כיצד JNDI משתלב בארכיטקטורת יישומים מודרנית.

כמו תמיד, הקוד זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found