نکات اجرایی

این بخش نکاتی را پوشش می دهد که به شما در نوشتن پیاده سازی های پیچیده تری از کتابخانه کمک می کند:

استفاده از Servlet خودتان

ساده ترین پیاده سازی های منبع داده از کلاس DataSourceServlet کتابخانه به ارث می برند. برای ارث بردن از کلاسی غیر از DataSourceServlet ، یک منبع داده را به صورت زیر پیاده سازی کنید:

  1. رابط DataTableGenerator را پیاده سازی کنید و getCapabilities() و generateDataTable() را لغو کنید.
  2. برای اجرای جریان منبع داده، DataSourceHelper.executeDataSourceServletFlow() را از داخل کد servlet خود فراخوانی کنید. این روش پارامترهای زیر را می گیرد:
    • یک شی HttpServletRequest .
    • یک شی HttpServletResponse .
    • پیاده سازی رابط DataTableGenerator از مرحله 1 بالا.
    • یک بولی برای تعیین حالت دسترسی محدود یا نامحدود.

به عنوان مثال، اگر می‌خواهید سرولت خود را از کلاس سرولت دیگری به نام AuthServlet که احراز هویت داخلی ارائه می‌کند، به ارث ببرید، می‌توانید SimpleServletExample را برای ارث بردن AuthServlet به جای DataSourceServlet به صورت زیر بازنویسی کنید:

  1. رابط DataTableGenerator را پیاده سازی کنید.
  2. generateDataTable() generatorDataTable را از اجرای DataSourceServlet به پیاده سازی DataTableGenerator خود منتقل کنید.
  3. برای بازگشت Capabilities.None ، getCapabilities() را در اجرای DataTableGenerator خود لغو کنید.
  4. DataSourceHelper.executeDataSourceServletFlow() را از داخل کد servlet خود ( doGet() یا doPost() ) فراخوانی کنید و اجرای DataTableGenerator خود را ارسال کنید. این روش کل جریان منبع داده را اجرا می کند، از جمله رندر کردن نتایج منبع داده در پاسخ سرولت.

اگر از یک فریمورک servlet استفاده می کنید که در آن معمولاً یک کلاس انتزاعی ارائه شده توسط فریم ورک را به ارث می برید، می توانید از همین تکنیک استفاده کنید. برای مثال، اگر از 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() geneDataTable خود ارسال کنید.
  4. پیاده سازی شما از generateDataTable() geneDataTable یک جدول داده تولید می کند.
  5. پرس و جو تکمیل را روی جدول داده تولید شده در مرحله 5 اجرا کنید.
  6. جدول داده ها را به فرمت مشخص شده توسط تجسم ارائه دهید و پاسخ servlet را تنظیم کنید.

برای مشخص کردن جریان رویدادهای خود، توابع کمکی را در datasource.DataSourceHelper فراخوانی کنید. برای اجرای نمونه به تعریف قابلیت ها و جریان رویدادها مراجعه کنید.

ارسال پارامترها به DataTableGenerator.generateDataTable

می‌توانید از HttpServletRequest.setAttribute برای ارسال داده‌هایی که بخشی از کوئری نیستند یا شی HttpServletRequest به DataTableGenerator.generateDataTable استفاده کنید. کد نمونه در زیر ارائه شده است.

در کد servlet خود، شیء مورد نظر خود را به صورت زیر در 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 
} 

پیاده سازی منبع داده غیر سرورلت

اگر کتابخانه را بدون استفاده از servlet پیاده سازی کنید، فقط می توانید از کلاس ها و توابع کمکی استفاده کنید که به محیط servlet نیاز ندارند. اینها شامل کلاس‌های Query و DataTable و برخی از توابع DataSourceHelper مانند parseQuery ، applyQuery ، validateQuery و splitQuery هستند. برای انجام کارهای زیر می توانید از این کلاس ها و توابع استفاده کنید:

  • یک جستار تجسمی را تجزیه کنید.
  • پرس و جو را به یک پرس و جو منبع داده و یک پرس و جو تکمیل تقسیم کنید.
  • برای ایجاد جدول داده، کوئری تکمیل را اجرا کنید.
  • جدول داده ها را با فرمت HTML ، CSV ، یا JSON به تصویرسازی برگردانید.