20. دراسة الحالة – الإصدار 2
نقدم الآن الإصدار النهائي لتطبيقنا:
![]() |
يتم إنشاء مشروع NetBeans الجديد [pam-02] عن طريق استنساخ مشروع [pam-01]:
![]() |
- في [1]، انسخ المشروع الجديد
- في [2]، قم بتسمية المشروع الجديد [pam-02] وحدد دليله
- في [3]، المشروع الجديد [pam-02]
لـ"ربط" طبقة [الأعمال] الحقيقية بطبقة الويب التي أنشأناها، نحتاج إلى القيام بثلاثة أمور:
- حذف طبقة [الأعمال] المحاكاة التي أنشأناها
- تكوين Spring لإنشاء مثيل للطبقة [الأعمال] الحقيقية الموجودة في أرشيف [pam-spring-metier-dao-jpa-hibernate.jar]
- إضافة جميع الأرشيفات الضرورية إلى المشروع (Spring، Hibernate، JPA، برنامج تشغيل MySQL JDBC).
يصبح ملف تكوين 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">
<!-- application layers -->
<!-- web -->
<bean id="config" class="web.Config" init-method="init">
<property name="metier" ref="metier"/>
</bean>
<!-- business -->
<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" />
<!-- configuration 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>
<!-- data source 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>
<!-- transaction manager -->
<tx:annotation-driven transaction-manager="txManager" />
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- translation of exceptions -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<!-- persistence -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
</beans>
تقوم الأسطر 36–41 بتكوين الوصول إلى قاعدة البيانات.
تتم إضافة مكتبات جديدة (Spring، Hibernate، JPA، برنامج تشغيل MySQL JDBC) من المجلد [lib] [2]. يتم تضمين المجلد بأكمله. هناك عدة عشرات من ملفات .jar لإضافتها [1]:
![]() |
كان تجميع هذه المكتبة صعبًا للغاية لأن هذه الأطر تستخدم أحيانًا نفس الأرشيفات. لذلك يجب إزالة التكرارات. تم تجميع هذه الملفات في المجلد [lib] [2] في أرشيف المثال الخاص بهذا المستند حتى لا يضطر القارئ إلى إعادة بناء هذه المكتبة بنفسه.
هذا كل شيء. سيعمل التطبيق الجديد [pam-02] الآن مع نظام إدارة قواعد البيانات (DBMS). فيما يلي لقطة شاشة لحساب الراتب:

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


