Skip to content

11. الإصدار 6 - دمج طبقة الويب في بنية ثلاثية الطبقات JSF / EJB

11.1. بنية التطبيق

كانت بنية تطبيق الويب السابق كما يلي:

نستبدل الطبقة [métier] المحاكاة، بالطبقات [métier, DAO, jpa] التي تم تنفيذها بواسطة EJB في الفقرة 7.1:

11.2. مشروع Netbeans للطبقة الويب

يتم الحصول على مشروع Netbeans للإصدار الويب رقم 2 عن طريق نسخ المشروع السابق:

  • [1]: ننسخ المشروع الجديد ونلصقه في علامة التبويب [Projects
  • [2]: نسميه ونحدد مجلده،
  • [3]: تم إنشاء المشروع،

يحمل المشروع الجديد نفس اسم المشروع القديم. نقوم بتغيير ذلك:

  • [4]: نقوم بتغيير اسم المشروع،
  • [5]: نغير اسمه وكذلك اسم artifactID.

لدينا القليل من التعديلات التي يجب إجراؤها لتكييف هذه الطبقة الويب مع بيئتها الجديدة: يجب استبدال الطبقة [metier] المحاكاة بالطبقة [metier, DAO, jpa] الخاصة بالخادم الذي تم إنشاؤه في الفقرة 7.1. وللقيام بذلك، نقوم بأمرين:

  • نحذف الحزم [exception, metier, jpa] التي كانت موجودة في المشروع السابق.
  • لتعويض هذا الحذف، نضيف إلى تبعيات مشروع الويب مشروع الخادم EJB الذي تم إنشاؤه في الفقرة 7.1.
  • في [1]، نضيف تبعية إلى المشروع،
  • في [2]، نختار مشروع Maven للطبقة [métier]. في [3]، نحدد نوعه وفي [4] نحدد نطاقه. وهي provided للإشارة إلى أنه سيتم توفيره (provided) للوحدة النمطية الويب من خلال بيئة عملها. سنرى قريبًا أنه سيتم توفيره من خلال تطبيق مؤسسي،
  • في [5]، تمت إضافة التبعية.

يكون ملف [pom.xml] كما يلي:


<dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>mv-pam-ejb-metier-dao-eclipselink</artifactId>
      <version>${project.version}</version>
      <scope>provided</scope>
      <type>ejb</type>
    </dependency>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-web-api</artifactId>
      <version>6.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

يمكننا الآن حذف الحزم من الطبقة [métier] التي لم تعد ضرورية:

  

علينا أيضًا تعديل كود bean [Form.java]:


public class Form {
  
  public Form() {
  }
  
  // couche métier
  private IMetierLocal metier=new Metier();
  
  // champs du formulaire
...

كانت السطر 7 تُنشئ الطبقة [métier] المُحاكاة. والآن يجب أن تشير إلى الطبقة [métier] الحقيقية. يصبح الكود السابق كما يلي:


public class Form {
  
  public Form() {
  }
  
  // couche métier
  @EJB
  private IMetierLocal metier;
  
  // champs du formulaire

في السطر 7، تشير التعليقات التوضيحية @EJB إلى حاوية السيرفلت التي ستقوم بتنفيذ الطبقة الويب، لإدخال EJB الذي ينفذ الواجهة المحلية IMetierLocal.

لماذا الواجهة المحلية IMetierLocal بدلاً من الواجهة IMetierRemote؟ لأن طبقة الويب وطبقة EJB يتم تنفيذهما في نفس JVM:

يمكن لفئات حاوية السيرفلتات الإشارة مباشرة إلى فئات EJB في الحاوية EJB.

هذا كل شيء. طبقتنا الويب جاهزة. كان التحويل بسيطًا لأننا حرصنا على محاكاة الطبقة [métier] بواسطة فئة تتوافق مع واجهة IMetierLocal التي تم تنفيذها بواسطة الطبقة الفعلية [métier].

11.3. مشروع Netbeans لتطبيق المؤسسة

يسمح تطبيق المؤسسة بالنشر المتزامن على خادم التطبيقات، لطبقة [web] وطبقة EJB لتطبيق ما، على التوالي في حاوية السيرفلتس وفي حاوية EJB.

ونقوم بذلك على النحو التالي:

  • في [1]، نقوم بإنشاء مشروع جديد
  • في [2]، نختار الفئة [Maven]
  • في [3]، نختار النوع [Enterprise Application]
  • في [4]، نسمي المشروع
  • في [5]، نختار Java EE 6
  • إلى [6]، يمكن أن يتضمن مشروع الشركة ما يصل إلى نوعين من الوحدات النمطية:
    • وحدة EJB
    • وحدة ويب

يمكن طلب إنشاء هذين النموذجين في نفس الوقت الذي يتم فيه إنشاء مشروع الشركة، وسيكونان فارغين في البداية. لا يخدم مشروع الشركة سوى نشر النماذج التي تشكل جزءًا منه. بخلاف ذلك، فهو مجرد هيكل فارغ. هنا، نريد نشر:

  • وحدة ويب موجودة [mv-pam-jsf2-alone]. لذلك لا داعي لإنشاء وحدة ويب جديدة.
  • وحدة EJB موجودة بالفعل [mv-pam-ejb-metier-dao-eclipselink]. وهنا أيضًا، لا داعي لإنشاء وحدة جديدة.

في [6]، نقوم بإنشاء مشروع مؤسسي بدون وحدات. سنقوم بإضافة وحدات الويب وejb إليه لاحقًا.

  • في [7]، تم إنشاء مشروعين Maven. مشروع المؤسسة هو الذي يحمل اللاحقة ear. المشروع الآخر هو مشروع Maven أبوي للمشروع السابق. لن نهتم به.

نضيف الوحدة النمطية للويب والوحدة النمطية EJB إلى مشروع المؤسسة:

  • في [1]، إضافة تبعية جديدة،
  • في [2]، إضافة المشروع EJB [mv-pam-ejb-metier-dao-eclipselink]. لاحظ نوعه ejb،
  • في [3]، إضافة مشروع الويب [mv-pam-jsf2-ejb]. تجدر الإشارة إلى نوعه war.

يصبح الملف [pom.xml] كما يلي:


<dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>mv-pam-ejb-metier-dao-eclipselink</artifactId>
            <version>${project.version}</version>
            <type>ejb</type>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>mv-pam-jsf2-ejb</artifactId>
            <version>${project.version}</version>
            <type>war</type>
        </dependency>
    </dependencies>

قبل نشر تطبيق المؤسسة [mv-pam-webapp-ear]، يجب التأكد من وجود قاعدة البيانات MySQL [dbpam_eclipselink] وتعبئتها. وبعد ذلك، يمكننا نشر تطبيق المؤسسة [mv-pam-webapp-ear]:

  • في [1]، تم نشر تطبيق المؤسسة
  • في [2]، تم نشر تطبيق المؤسسة [mv-pam-webapp-ear] بنجاح.

في المتصفح، تظهر الصفحة التالية:

  • في [1]، URL المطلوب
  • إلى [2]، تم ملء قائمة الموظفين بعناصر الجدول [Employes] من قاعدة البيانات dbpam.

يُطلب من القارئ إعادة إجراء اختبارات الإصدار رقم 1 من الويب. فيما يلي مثال على التنفيذ:

Image