טיפים להטמעה

בקטע הזה תמצאו כמה טיפים שיעזרו לכם לכתוב הטמעות מורכבות יותר של הספרייה:

שימוש בהצגה משלכם

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

  1. מטמיעים את הממשק DataTableGenerator ומבטלים את getCapabilities() ואת generateDataTable().
  2. יש להפעיל את DataSourceHelper.executeDataSourceServletFlow() בקוד של השרת כדי להריץ את מקור הנתונים.שיטה זו כוללת את הפרמטרים הבאים:
    • אובייקט HttpServletRequest.
    • אובייקט HttpServletResponse.
    • הטמעת הממשק של DataTableGenerator משלב 1 שלמעלה.
    • ערך בוליאני שמציין גישה מוגבלת או בלתי מוגבלת.

לדוגמה, אם אתם רוצים לרשת את השירות שלכם משיעור שירות אחר, שנקרא AuthServlet, שמספק אימות מובנה, אפשר לשכתב את SimpleServletExample כך שירשת את AuthServlet במקום את DataSourceServlet באופן הבא:

  1. מטמיעים את הממשק של DataTableGenerator.
  2. העברת generateDataTable() מההטמעה של DataSourceServlet להטמעה של DataTableGenerator.
  3. מבטלים את getCapabilities() בהטמעה של DataTableGenerator כדי להחזיר את Capabilities.None.
  4. ניתן להתקשר למספר DataSourceHelper.executeDataSourceServletFlow() (באמצעות קוד השירות (doGet() או doPost()) ולעבור את ההטמעה של DataTableGenerator. השיטה הזו מריצה את כל הזרימה של מקור הנתונים, כולל רינדור התוצאות של מקור הנתונים בתגובת שרת הנתונים.

ניתן להשתמש באותה טכניקה אם משתמשים במסגרת שרת תמונות, שבה בדרך כלל יורשים שיעור מופשט של המסגרת. למשל, אם משתמשים ב-WebWork, אפשר לרשת את הכיתה ActionSupport.

הגדרת יכולות

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

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

  • NONE: ברירת המחדל היא שהקוד לא מבצע פעולות שאילתה.
  • SQL: הקוד שלכם מספק פעולות של שאילתת SQL.
  • SORT_AND_PAGINATION: הקוד שלכם מאפשר לבצע גם פעולות מיון וגם חלוקה לדפים.
  • SELECT: הקוד שלך מספק פעולה נבחרת.
  • ALL: הקוד מספק פעולות SQL, SORT_AND_PAGINATION ו-SELECT.

הערה: בכל המקרים, הספרייה מטפלת בפעולות שאילתה שלא סופקו על ידי הקוד.

כדי להטמיע יכולת שונה מ-NONE, צריך לבטל את Capabilities.getCapabilities() ולהטמיע את DataTable.generateDataTable() כדי להריץ שאילתה על מאגר הנתונים ולהחזיר טבלת נתונים.

שלוש הדוגמאות ממחישות כיצד ניתן להטמיע יכולות: AdvancedExampleServlet, AdvancedExampleServlet2 ו-SqlDataSourceServlet. כולם כלולים בחבילה של example. דיון בנושא AdvancedExampleServlet2 מופיע במאמר הגדרה של יכולות וזרימת אירועים.

התאמה אישית של זרימת האירועים

זרימת האירועים המוגדרת כברירת מחדל היא DataSourceHelper.executeDataSourceServletFlow. אלה שלבי ברירת המחדל:

  1. חילוץ וניתוח של פרמטרים של שאילתות.
  2. עבור גישה מוגבלת בלבד, מוודאים שהבקשה הגיעה מאותו דומיין כמו השרת.
  3. נתחו את הבקשה ליצירת שני אובייקטים של שאילתה: השאילתה של מקור הנתונים ושאילתת ההשלמה. להעביר את השאילתה של מקור הנתונים להטמעה של generateDataTable().
  4. ההטמעה של generateDataTable() יוצרת טבלת נתונים.
  5. מריצים את שאילתת ההשלמה בטבלת הנתונים שנוצרה בשלב 5.
  6. רינדור את טבלת הנתונים לפורמט שצוין על ידי התצוגה החזותית והגדרת התגובה להגשה.

כדי לציין זרימת אירועים משלכם, התקשרו לפונקציות העזרה ב-datasource.DataSourceHelper. במאמר לדוגמה, הגדרת יכולות וזרימת אירועים.

העברת פרמטרים אל DataTableGenerator.generateDataTable

תוכלו להשתמש בפונקציה HttpServletRequest.setAttribute כדי להעביר ל-DataTableGenerator.generateDataTable נתונים שאינם חלק משאילתה או מאובייקט HttpServletRequest. הקוד לדוגמה מופיע למטה.

בקוד של השרת, מוסיפים את האובייקט שרוצים להעביר אל HttpServletRequest באופן הבא:

request.setAttribute("my_object_name", myObject);
DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);

בהטמעת הממשק של dataTableGenerator, יש לקבל את האובייקט מה-HttpServletRequest באופן הבא:

public DataTable generateDataTable(Query query, HttpServletRequest request){
  Object myObject = request.getAttribute("my_object_name"); 
  // Add your code to manipulate myObject here 
} 

הטמעת מקור נתונים שאינו שרת

אם אתם מטמיעים את הספרייה בלי להשתמש בשרת, תוכלו להשתמש רק במחלקות האלה ובפונקציות עזר שלא מחייבות סביבת שרת. בכך נכללות המחלקות Query ו-DataTable וחלק מפונקציות DataSourceHelper, כמו parseQuery, applyQuery, validateQuery ו-splitQuery. תוכלו להשתמש בכיתות ובפונקציות האלה כדי:

  • נתחו שאילתת המחשה.
  • פצל את השאילתה לשאילתה של מקור נתונים ולשאילתת השלמה.
  • מריצים את שאילתת ההשלמה כדי ליצור טבלת נתונים.
  • מחזירים את טבלת הנתונים לוויזואליזציה בפורמט HTML, CSV או JSON.