Skip to content

20. Fallstudie – Version 2

Wir präsentieren nun die endgültige Version unserer Anwendung:

Das neue NetBeans-Projekt [pam-02] wird durch Klonen des Projekts [pam-01] erstellt:

  • Kopieren Sie in [1] das neue Projekt
  • in [2] benennen Sie das neue Projekt [pam-02] und geben Sie dessen Verzeichnis an
  • in [3] das neue Projekt [pam-02]

Um die eigentliche [Business]-Schicht mit der von uns erstellten Web-Schicht zu „verbinden“, müssen wir drei Dinge tun:

  1. die von uns erstellte simulierte [Business]-Schicht löschen
  2. Spring so konfigurieren, dass die echte [Business]-Schicht aus dem Archiv [pam-spring-metier-dao-jpa-hibernate.jar] instanziiert wird
  3. alle erforderlichen Archive zum Projekt hinzufügen (Spring, Hibernate, JPA, MySQL-JDBC-Treiber).

Die Spring-Konfigurationsdatei [WEB-INF/applicationContext.xml] sieht nun wie folgt aus:


<?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>

Die Zeilen 36–41 konfigurieren den Datenbankzugriff.

Neue Bibliotheken (Spring, Hibernate, JPA, MySQL-JDBC-Treiber) werden aus dem Ordner [lib] hinzugefügt [2]. Der gesamte Ordner wird einbezogen. Es sind mehrere Dutzend .jar-Dateien hinzuzufügen [1]:

Es war ziemlich schwierig, diese Bibliothek zusammenzustellen, da diese Frameworks manchmal dieselben Archive verwenden. Duplikate müssen daher entfernt werden. Diese Dateien wurden im Beispielarchiv zu diesem Dokument im Ordner [lib] [2] zusammengestellt, damit der Leser diese Bibliothek nicht selbst neu erstellen muss.

Das war’s. Die neue Anwendung [pam-02] funktioniert nun mit dem DBMS. Hier ist ein Screenshot einer Gehaltsberechnung:

Image

Diesmal entspricht das berechnete Gehalt dem tatsächlichen Gehalt und nicht dem fiktiven Gehalt aus Version 1. Der Leser ist eingeladen, die neue Anwendung zu testen.