Skip to content

20. Fallstudie – Version 2

Wir stellen nun die endgültige Version unserer Anwendung vor:

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

  • in [1], das neue Projekt wird kopiert
  • in [2], das neue Projekt wird in [pam-02] umbenannt und der Ordner angegeben
  • in [3], das neue Projekt [pam-02]

Um die echte Ebene [metier] mit der von uns erstellten Web-Ebene zu „verbinden“, müssen drei Schritte durchgeführt werden:

  1. die simulierte Schicht [metier] löschen, die wir erstellt hatten
  2. Spring so konfigurieren, dass es die echte Schicht [metier] instanziiert, die sich im Archiv [pam-spring-metier-dao-jpa-hibernate.jar] befindet.
  3. dem Projekt alle erforderlichen Archive hinzufügen (Spring, Hibernate, JPA, JDBC-Treiber von MySQL).

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">
  
  <!-- Anwendungsschichten -->
 
<!-- Web -->
  <bean id="config" class="web.Config" init-method="init">
    <property name="metier" ref="metier"/>
  </bean>
  <!-- Geschäftsprozess -->
  <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" />
  
  <!-- Konfiguration 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>
  
  <!-- die Datenquelle 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>
  
  <!-- der Transaktionsmanager -->
  <tx:annotation-driven transaction-manager="txManager" />
  <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
  </bean>
  
  <!-- Ausnahmebehandlung -->
  <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
  
  <!-- Persistenz -->
  <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
  
</beans>

Die Zeilen 36–41 konfigurieren den Zugriff auf die Datenbank.

Das Hinzufügen der neuen Bibliotheken (Spring, Hibernate, JPA, JDBC-Treiber von MySQL) erfolgt aus dem Ordner [lib] [2]. Der gesamte Ordner wird übernommen. Es sind mehrere Dutzend .jar-Dateien hinzuzufügen: [1]:

Es war ziemlich schwierig, diese Bibliothek zusammenzustellen, da diese Frameworks manchmal dieselben Archive verwenden. Daher müssen die Duplikate entfernt werden. Diese Dateien wurden im Ordner [lib] [2] im Beispielarchiv dieses Dokuments zusammengestellt, damit der Leser diese Bibliothek nicht selbst neu zusammenstellen muss.

Das war’s. Die neue Anwendung [pam-02] arbeitet nun mit SGBD zusammen. Hier ist ein Screenshot einer Gehaltsberechnung:

Image

Diesmal handelt es sich bei dem berechneten Gehalt um das tatsächliche Gehalt und nicht um das fiktive Gehalt aus Version 1. Der Leser ist eingeladen, die neue Anwendung zu testen.