Skip to content

20. دراسة الحالة – الإصدار 2

نقدم الآن الإصدار النهائي لتطبيقنا:

يتم الحصول على مشروع NetBeans الجديد [pam-02] عن طريق نسخ مشروع [pam-01]:

  • في [1]، ننسخ المشروع الجديد
  • إلى [2]، ثم نسمي المشروع الجديد [pam-02] ونحدد مجلده
  • في [3]، المشروع الجديد [pam-02]

لـ«ربط» الطبقة الحقيقية [metier] بالطبقة الويب التي أنشأناها، يجب القيام بثلاثة أمور:

  1. حذف الطبقة المحاكاة [metier] التي أنشأناها
  2. تكوين Spring بحيث يقوم بإنشاء مثيل للطبقة الحقيقية [metier] الموجودة في الأرشيف [pam-spring-metier-dao-jpa-hibernate.jar].
  3. إضافة جميع الأرشيفات الضرورية إلى المشروع (Spring، Hibernate، JPA، برنامج تشغيل JDBC الخاص بـ MySQL).

يصبح ملف تكوين Spring [WEB-INF/applicationContext.xml] كما يلي:


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
  
  <!-- طبقات التطبيق -->
 
<!-- الويب -->
  <bean id="config" class="web.Config" init-method="init">
    <property name="metier" ref="metier"/>
  </bean>
  <!-- الأعمال -->
  <bean id="metier" class="metier.Metier">
    <property name="employeDao" ref="employeDao"/>
    <property name="cotisationDao" ref="cotisationDao"/>  
  </bean>
  <!-- DAO -->
  <bean id="employeDao" class="dao.EmployeDao" />
  <bean id="indemniteDao" class="dao.IndemniteDao" />
  <bean id="cotisationDao" class="dao.CotisationDao" />
  
  <!-- التكوين JPA -->
  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="jpaVendorAdapter">
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
      </bean>
    </property>
    <property name="loadTimeWeaver">
      <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
    </property>
  </bean>
  
  <!-- مصدر البيانات DBCP -->
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/dbpam_hibernate" />
    <property name="username" value="root" />
    <property name="password" value="" />
  </bean>
  
  <!-- مدير المعاملات -->
  <tx:annotation-driven transaction-manager="txManager" />
  <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
  </bean>
  
  <!-- ترجمة الاستثناءات -->
  <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
  
  <!-- الاستمرارية -->
  <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
  
</beans>

تقوم الأسطر من 36 إلى 41 بتكوين الوصول إلى قاعدة البيانات.

تتم إضافة المكتبات الجديدة (Spring، Hibernate، Jpa، برنامج تشغيل JDBC الخاص بـ MySQL) من المجلد [lib] [2]. يتم أخذ المجلد بالكامل. هناك عشرات الملفات .jar التي يجب إضافتها إلى [1]:

كان تكوين هذه المكتبة أمرًا صعبًا إلى حد ما لأن هذه الأطر تستخدم أحيانًا نفس الأرشيفات. لذا، يجب حذف التكرارات. تم تجميع هذه الملفات في المجلد [lib] [2] ضمن أرشيف الأمثلة الخاص بهذا المستند حتى لا يضطر القارئ إلى إعادة تكوين هذه المكتبة بنفسه.

هذا كل شيء. سيعمل التطبيق الجديد [pam-02] من الآن فصاعدًا مع SGBD. فيما يلي لقطة شاشة لحساب الراتب:

Image

هذه المرة، الراتب المحسوب هو الراتب الحقيقي وليس الراتب الوهمي الموجود في الإصدار 1. ندعو القارئ إلى تجربة التطبيق الجديد.