نصائح التنفيذ

يتناول هذا القسم بعض النصائح التي ستساعدك في كتابة عمليات تنفيذ أكثر تعقيدًا للمكتبة:

استخدام صلصة العجينة الخاصة بك

تكتسِب أبسط عمليات تنفيذ مصدر البيانات من فئة DataSourceServlet في المكتبة. للتوريث من فئة أخرى غير DataSourceServlet، يمكنك تنفيذ مصدر بيانات على النحو التالي:

  1. تنفيذ الواجهة DataTableGenerator وإلغاء الترميزَين getCapabilities() وgenerateDataTable()
  2. استدعِ DataSourceHelper.executeDataSourceServletFlow() من داخل رمز serlet الخاص بك لتشغيل تدفق مصدر البيانات.تأخذ هذه الطريقة المَعلمات التالية:
    • عنصر HttpServletRequest
    • عنصر HttpServletResponse
    • طريقة تنفيذ واجهة DataTableGenerator في الخطوة 1 أعلاه
    • قيمة منطقية لتحديد وضع الوصول المقيّد أو غير المشروط.

على سبيل المثال، إذا كنت تريد أن ترث لغة serlet من فئة serlet أخرى تُسمى AuthServlet توفر مصادقة مدمَجة، يمكنك إعادة كتابة SimpleServletExample لكي يرث AuthServlet بدلاً من DataSourceServlet على النحو التالي:

  1. نفِّذ واجهة DataTableGenerator.
  2. يجب نقل generateDataTable() من عملية تنفيذ DataSourceServlet إلى عملية DataTableGenerator.
  3. يمكنك إلغاء getCapabilities() في تنفيذ DataTableGenerator لعرض Capabilities.None.
  4. يمكنك استدعاء DataSourceHelper.executeDataSourceServletFlow() من داخل رمز serlet (doGet() أو doPost())، واجتياز عملية تنفيذ DataTableGenerator. تقوم هذه الطريقة بتشغيل التدفق الكامل لمصدر البيانات، بما في ذلك عرض نتائج مصدر البيانات في استجابة serlet.

يمكنك استخدام نفس الأسلوب إذا كنت تستخدم إطار عمل Servicelet الذي ترث فيه عادةً فئة مجردة يوفرها إطار العمل. على سبيل المثال، إذا كنت تستخدم 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. بالنسبة لوضع الوصول المقيد فقط، تحقق من أن الطلب ينشأ من نفس النطاق مثل serlet.
  3. حلّل طلب إنشاء كائنَي استعلام: استعلام مصدر البيانات واستعلام الإكمال. مرِّر استعلام مصدر البيانات إلى عملية تنفيذ generateDataTable().
  4. يؤدي تنفيذ generateDataTable() إلى إنشاء جدول بيانات.
  5. نفِّذ استعلام الإكمال في جدول البيانات الذي تم إنشاؤه في الخطوة 5.
  6. اعرض جدول البيانات بالتنسيق المحدد من قبل التصور وتعيين استجابة serlet.

لتحديد تدفق الأحداث الخاص بك، يمكنك استدعاء الدوال المساعدة في datasource.DataSourceHelper. راجِع تحديد الإمكانات وتدفق الأحداث للاطّلاع على مثال حول عملية التنفيذ.

تمرير المَعلمات إلى DataTableGenerator.generateDataTable

ويمكنك استخدام HttpServletRequest.setAttribute لتمرير البيانات التي ليست جزءًا من طلب بحث أو كائن HttpServletRequest إلى DataTableGenerator.generateDataTable. تم توفير مثال التعليمة البرمجية أدناه.

في رمز serlet، ضع الكائن الذي تريد تمريره إلى 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 
} 

تنفيذ مصدر بيانات غير Servicelet

إذا قمت بتنفيذ المكتبة دون استخدام serlet، يمكنك استخدام تلك الفئات والدوال المساعدة فقط التي لا تتطلب بيئة serlet. وتشمل هذه الفئات الفئتَين Query وDataTable وبعض الدوال DataSourceHelper مثل parseQuery وapplyQuery وvalidateQuery وsplitQuery. يمكنك استخدام هذه الفئات والدوال لإجراء ما يلي:

  • قم بتحليل استعلام التصورات.
  • قسِّم الاستعلام إلى استعلام مصدر بيانات واستعلام إكمال.
  • قم بتشغيل استعلام الإكمال لإنشاء جدول بيانات.
  • اعرض جدول البيانات إلى العرض المرئي بتنسيق HTML أو CSV أو JSON.