מבוא לחיפוש EJB JNDI בשרת היישומים WildFly

1. סקירה כללית

שעועית Java Enterprise (EJB) היא חלק הליבה במפרט Java EE, שמטרתה לפשט את הפיתוח של יישומים ברמה ארגונית מבוזרת. מחזור החיים של EJB מטופל על ידי שרת יישומים, כמו JBoss WildFly או Oracle GlassFish.

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

יתר על כן, כבר פרסמנו שני מאמרים המכסים את מושגי היסוד של EJB, אז אל תהסס לבדוק אותם כאן וכאן.

במדריך זה נראה כיצד ליישם מודול EJB בסיסי ב- WildFly ולקרוא ל- EJB מלקוח מרוחק באמצעות JNDI.

2. יישום מודול EJB

ההיגיון העסקי מיושם על ידי ממשק אחד או מספר ממשקים עסקיים מקומיים / מרוחקים (המכונים גם תצוגות מקומיות / מרוחקות) או ישירות באמצעות כיתות שאינן מיישמות ממשק כלשהו (ממשקים שאינם תצוגה).

ראוי לציין כי משתמשים בממשקים עסקיים מקומיים כאשר נגישים לשעועית מלקוחות השוכנים באותה סביבה, כלומר באותו קובץ EAR או WAR, בעוד שממשקים עסקיים מרוחקים נדרשים כאשר ניתן יהיה לגשת לשעועית מסביבה אחרת. כלומר JVM או שרת יישומים אחר.

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

2.1. הגדרת ממשק עסקי מרוחק

בואו נגדיר תחילה ממשק עסקי מרוחק אחד, מעוטר ב- @מְרוּחָק ביאור. זה חובה, על פי מפרט EJB 3.x, שכן ניתן יהיה לגשת לשעועית מלקוח מרוחק:

@Remote ממשק ציבורי TextProcessorRemote {String processText (טקסט מחרוזת); }

2.2. הגדרת שעועית חסרת סטטוס

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

@Stateless public class TextProcessorBean מיישם TextProcessorRemote {public String processText (String text) {return text.toUpperCase (); }}

ה TextProcessorBean מחלקה היא כיתת Java פשוטה, המעוטרת ב- @ סטטלס ביאור.

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

מכיוון שבמקרה זה למעמד הנ"ל אין מצב מופעי, ניתן להפוך אותו לחסר מדינה. במקרה שיש לה מדינה, השימוש בה בכל בקשות שונות של לקוחות לא יהיה הגיוני בכלל.

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

2.3. תלות Maven

לאחר מכן, עלינו להוסיף את javaee-api חפץ Maven למודול, המספק את כל ממשקי ה- API של Java EE 7 למפרט, כולל אלה הנדרשים ל- EJB:

 javax javaee-api 7.0 מסופק 

בשלב זה הצלחנו ליצור מודול EJB בסיסי אך פונקציונלי. כדי להפוך אותו לזמין לכל הלקוחות הפוטנציאליים, עלינו להוסיף את החפץ למאגר Maven המקומי שלנו כקובץ JAR.

2.4. התקנת מודול EJB במאגר המקומי

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

mvn נקי להתקין

פקודה זו מתקנת את מודול EJB כ- ejbmodule-1.0.jar (או כל מזהה חפץ שרירותי המצוין ב- pom.xml קובץ), למאגר המקומי שלנו. למידע נוסף על התקנת JAR מקומי עם Maven, עיין במאמר זה.

בהנחה שמודול EJB הותקן כראוי במאגר המקומי שלנו, השלב הבא הוא פיתוח יישום לקוח מרוחק שעושה שימוש במערכת שלנו TextProcessorBean ממשק API.

3. לקוח EJB מרוחק

אנו נשמור על ההיגיון העסקי של לקוח EJB המרוחק ביותר: ראשית, הוא מבצע בדיקת JNDI כדי להשיג TextProcessorBean פרוקסי. לאחר מכן, הוא מזמין את ה- proxy processText () שיטה.

3.1. תלות Maven

עלינו לכלול את ממצאי Maven הבאים כדי שלקוח EJB יעבוד כצפוי:

 javax javaee-api 7.0 סיפק org.wildfly wildfly-ejb-client-bom 10.1.0.Final com.beldung.ejbmodule ejbmodule 1.0 

אמנם זה די ברור למה אנו כוללים את ה- javaee-api חפץ, הכללת wildfly-ejb-client-bom לא. החפץ נדרש לביצוע הפעלות EJB מרוחקות על WildFly.

אחרון חביב, עלינו להנגיש את מודול ה- EJB הקודם ללקוח, ולכן הוספנו את ה- מודול ejb גם תלות.

3.2. מחלקת לקוחות EJB

בהתחשב בכך שלקוח EJB מתקשר לפרוקסי של TextProcessorBean, נהיה מאוד פרגמטיים ונקרא את שם מחלקת הלקוחות יישום טקסט:

מחלקה ציבורית TextApplication {public static void main (String [] args) זורק NamingException {TextProcessorRemote textProcessor = EJBFactory .createTextProcessorBeanFromJNDI ("ejb:"); System.out.print (textProcessor.processText ("טקסט לדוגמא")); } מחלקה סטטית פרטית EJBFactory {פרטי סטטית TextProcessorRemote createTextProcessorBeanFromJNDI (מרחב שמות מחרוזת) זורק NamingException {return lookupTextProcessorBean (מרחב שמות); } פרטי סטטי TextProcessorRemote LookupTextProcessorBean (מרחב שמות מחרוזת) זורק NamingException {Context ctx = createInitialContext (); מחרוזת appName = ""; String moduleName = "EJBModule"; מחרוזת distinctName = ""; מחרוזת שעועית = TextProcessorBean.class.getSimpleName (); מחרוזת viewClassName = TextProcessorRemote.class.getName (); החזר (TextProcessorRemote) ctx.lookup (מרחב שמות + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName); } הקשר סטטי פרטי createInitialContext () זורק NamingException {Properties jndiProperties = מאפיינים חדשים (); jndiProperties.put (Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); jndiProperties.put (Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); jndiProperties.put (Context.PROVIDER_URL, "http-remoting: // localhost: 8080"); jndiProperties.put ("jboss.naming.client.ejb.context", נכון); להחזיר InitialContext חדש (jndiProperties); }}}

במילים פשוטות, כל זה יישום טקסטclass עושה הוא לאחזר את ה- Proxy שעועית ולקרוא לו processText () שיטה עם מחרוזת לדוגמא.

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

שימו לב כי החיפוש מתבצע באמצעות מרחב השמות הקנייני "ejb:" של WildFly. זה מייעל את תהליך החיפוש, מכיוון שהלקוח מפנה את החיבור לשרת עד שהפרוקסי מופעל במפורש.

ראוי לציין גם כי ניתן לחפש את פרוקסי השעועית מבלי לפנות כלל למרחב השמות "ejb". למרות זאת, היינו חסרים את כל היתרונות הנוספים של חיבורי רשת עצלים, ובכך הופכים את הלקוח להרבה פחות ביצועי.

3.3. הגדרת הקשר EJB

הלקוח צריך לדעת עם איזה מארח ויציאה ליצור קשר כדי לבצע את בדיקת השעועית. במידה זו, הלקוח דורש הגדרת ההקשר הקנייני של WildFly EJB, המוגדר באמצעות ה- jboss-ejb-client.properties קוֹבֶץ ממוקמת בשביל הכיתות שלה, בדרך כלל מתחת ל src / main / resources תיקיה:

endpoint.name = client-endpoint remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED = false.connections שקרי = remote.connection.default.host ברירת מחדל = 127.0.0.1 remote.connection.default.port = 8080 מרחוק .connection.default.connect.options.org.xnio.Options .SASL_POLICY_NOANONYMOUS = שקר remote.connection.default.username = שם המשתמש שלי remote.connection.default.password = mypassword

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

הדבר האחרון שיש לקחת בחשבון הוא זה אם החיבור דורש אימות, יש צורך להוסיף משתמש ל- WildFly דרך ה- add-user.sh/add-user.bat תוֹעֶלֶת.

4. מסקנה

ביצוע בדיקות EJB ב- WildFly הוא פשוט, כל עוד אנו מקפידים על התהליך המתואר.

כרגיל, כל הדוגמאות הכלולות במאמר זה זמינות ב- GitHub כאן וכאן.


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