20. Приклад із практики — версія 2
Тепер ми представляємо остаточну версію нашого додатка:
![]() |
Новий проєкт NetBeans [pam-02] отримано шляхом копіювання проєкту [pam-01]:
![]() |
- у [1], скопіюємо новий проєкт
- у [2], перейменовуємо новий проєкт на [pam-02] та вказуємо його папку
- у [3] — новий проєкт [pam-02]
Щоб «підключити» справжній шар [metier] до веб-шару, який ми створили, потрібно виконати три дії:
- видалити імітований шар [metier], який ми створили
- налаштувати Spring так, щоб він створював екземпляр справжнього шару [metier], який знаходиться в архіві [pam-spring-metier-dao-jpa-hibernate.jar].
- додати до проєкту всі необхідні архіви (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]. Береться вся папка. До [1] потрібно додати кілька десятків файлів .jar:
![]() |
Скласти цю бібліотеку було досить складно, оскільки ці фреймворки іноді використовують однакові архіви. Тому потрібно видалити дублікати. Ці файли було зібрано в папці [lib] [2] в архіві прикладів до цього документа, щоб читачеві не довелося самостійно відтворювати цю бібліотеку.
Ось і все. Новий додаток [pam-02] відтепер працюватиме разом із SGBD. Ось знімок екрана з розрахунком заробітної плати:
![]() |
Цього разу розрахована заробітна плата є реальною, а не фіктивною, як у версії 1. Пропоную читачеві випробувати нову програму.



