20. Casestudy – versie 2
We presenteren nu de definitieve versie van onze applicatie:
![]() |
Het nieuwe NetBeans-project [pam-02] is verkregen door het project [pam-01] te kopiëren:
![]() |
- naar [1], het nieuwe project wordt gekopieerd
- naar [2], het nieuwe project wordt [pam-02] genoemd en de map wordt gespecificeerd
- in [3], het nieuwe project [pam-02]
Om de echte laag [metier] aan de door ons gebouwde weblaag te ‘koppelen’, moeten we drie dingen doen:
- de gesimuleerde laag [metier] verwijderen die we hadden aangemaakt
- Spring zo configureren dat het de echte [metier]-laag instantiëert die zich in het archief [pam-spring-metier-dao-jpa-hibernate.jar] bevindt.
- alle benodigde archieven aan het project toevoegen (Spring, Hibernate, JPA, de JDBC-driver van MySQL).
Het Spring-configuratiebestand [WEB-INF/applicationContext.xml] ziet er nu als volgt uit:
<?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">
<!-- toepassingslagen -->
<!-- web -->
<bean id="config" class="web.Config" init-method="init">
<property name="metier" ref="metier"/>
</bean>
<!-- bedrijfsspecifiek -->
<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" />
<!-- configuratie 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>
<!-- de gegevensbron 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>
<!-- de transactiebeheerder -->
<tx:annotation-driven transaction-manager="txManager" />
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- vertaling van uitzonderingen -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<!-- persistentie -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
</beans>
De regels 36-41 configureren de toegang tot de database.
De nieuwe bibliotheken (Spring, Hibernate, JPA, JDBC-driver van MySQL) worden toegevoegd vanuit de map [lib] [2]. De volledige map wordt overgenomen. Er moeten tientallen .jar-bestanden worden toegevoegd aan [1]:
![]() |
Het was vrij lastig om deze bibliotheek samen te stellen, omdat deze frameworks soms dezelfde archieven gebruiken. De dubbele bestanden moeten dan worden verwijderd. Deze bestanden zijn verzameld in de map [lib] [2] in het voorbeeldarchief van dit document, zodat de lezer deze bibliotheek niet zelf hoeft samen te stellen.
Dat is alles. De nieuwe applicatie [pam-02] werkt voortaan samen met de SGBD. Hier is een schermafbeelding van een salarisberekening:
![]() |
Dit keer is het berekende salaris het echte salaris en niet het fictieve salaris uit versie 1. De lezer wordt uitgenodigd om de nieuwe applicatie te testen.



