Skip to content

11. Version 6 – Integration der Webschicht in eine 3-Schichten-Architektur JSF / EJB

11.1. Anwendungsarchitektur

Die Architektur der bisherigen Webanwendung sah wie folgt aus:

Wir ersetzen die simulierte Schicht [métier] durch die Schichten [métier, DAO, jpa], die in Abschnitt 7.1 durch EJB implementiert wurden:

11.2. Das NetBeans-Projekt der Web-Schicht

Das NetBeans-Projekt der Webversion Nr. 2 wird durch Kopieren des vorherigen Projekts erstellt:

  • [1]: Das neue Projekt wird kopiert und in die Registerkarte [Projects] eingefügt,
  • [2]: Man gibt ihm einen Namen und legt seinen Ordner fest,
  • [3]: Das Projekt wurde erstellt,

Das neue Projekt hat denselben Namen wie das alte. Das ändern wir:

  • [4]: Wir benennen das Projekt um,
  • [5]: Wir ändern dessen Namen sowie den des artifactID.

Wir müssen nur wenige Änderungen vornehmen, um diese Webschicht an ihre neue Umgebung anzupassen: Die simulierte Schicht [metier] muss durch die Schicht [metier, DAO, jpa] des in Abschnitt 7.1 erstellten Servers ersetzt werden. Dazu führen wir zwei Schritte durch:

  • Wir entfernen die Pakete [exception, metier, jpa], die im vorherigen Projekt vorhanden waren.
  • Um diese Entfernung auszugleichen, fügen wir den Abhängigkeiten des Webprojekts das in Abschnitt 7.1 erstellte Serverprojekt EJB hinzu.
  • In [1] fügen wir eine Abhängigkeit zum Projekt hinzu,
  • In [2] wählen wir das Maven-Projekt der Schicht [métier] aus. In [3] legen wir dessen Typ fest und in [4] dessen Geltungsbereich. Dieser lautet provided, um anzugeben, dass dieses (provided) dem Webmodul von seiner Arbeitsumgebung bereitgestellt wird. Wir werden in Kürze sehen, dass es ihm von einer Unternehmensanwendung bereitgestellt wird,
  • in [5] wurde die Abhängigkeit hinzugefügt.

Die Datei [pom.xml] sieht dann wie folgt aus:


<dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>mv-pam-ejb-metier-dao-eclipselink</artifactId>
      <version>${project.version}</version>
      <scope>provided</scope>
      <type>ejb</type>
    </dependency>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-web-api</artifactId>
      <version>6.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

Wir können nun die nicht mehr benötigten Pakete der Ebene [métier] entfernen:

  

Außerdem müssen wir den Code des Beans [Form.java] ändern:


public class Form {
  
  public Form() {
  }
  
  // Geschäftsschicht
  private IMetierLocal metier=new Metier();
  
  // Formularfelder
...

In Zeile 7 wurde die simulierte Schicht [métier] instanziiert. Nun muss sie auf die tatsächliche Schicht [métier] verweisen. Der bisherige Code lautet nun wie folgt:


public class Form {
  
  public Form() {
  }
  
  // Geschäftsschicht
  @EJB
  private IMetierLocal metier;
  
  // Formularfelder

In Zeile 7 weist die Anmerkung @EJB den Servlet-Container, der die Webschicht ausführt, an, in das Feld metier der Schicht 8 die Schnittstelle EJB einzufügen, die die lokale Schnittstelle IMetierLocal implementiert.

Warum die lokale Schnittstelle IMetierLocal und nicht die Schnittstelle IMetierRemote? Weil die Webschicht und die Schicht EJB in derselben JVM ausgeführt werden:

Die Klassen des Servlet-Containers können direkt auf die Klassen EJB des Containers EJB verweisen.

Das war’s. Unsere Webschicht ist fertig. Die Umstellung war einfach, da wir darauf geachtet hatten, die Schicht [métier] durch eine Klasse zu simulieren, die die Schnittstelle IMetierLocal implementierte, die wiederum von der eigentlichen Schicht [métier] implementiert wurde.

11.3. Das NetBeans-Projekt der Unternehmensanwendung

Eine Unternehmensanwendung ermöglicht die gleichzeitige Bereitstellung der Schichten [web] und EJB einer Anwendung auf einem Anwendungsserver, und zwar jeweils im Servlet-Container und im EJB-Container.

Wir gehen wie folgt vor:

  • in [1] erstellen wir ein neues Projekt
  • in [2] wählen wir die Kategorie [Maven]
  • in [3] wählen wir den Typ [Enterprise Application]
  • In [4] geben wir dem Projekt einen Namen
  • In [5] wählen wir Java EE 6
  • in [6]; ein Unternehmensprojekt kann bis zu zwei Modultypen umfassen:
    • ein Modul EJB
    • ein Webmodul

Gleichzeitig mit der Erstellung des Unternehmensprojekts kann die Erstellung dieser beiden Module beantragt werden, die zu Beginn leer sind. Ein Unternehmensprojekt dient ausschließlich der Bereitstellung der Module, die Teil davon sind. Abgesehen davon ist es eine leere Hülle. Hier möchten wir Folgendes bereitstellen:

  • ein bestehendes Webmodul [mv-pam-jsf2-alone]. Es ist daher nicht notwendig, ein neues Webmodul anzulegen.
  • ein bestehendes Modul EJB ([mv-pam-ejb-metier-dao-eclipselink]). Auch hier ist es nicht notwendig, ein neues Modul anzulegen.

In [6] erstellen wir ein Unternehmensprojekt ohne Module. Wir werden ihm später seine Web- und EJB-Module hinzufügen.

  • In [7] wurden zwei Maven-Projekte erstellt. Das Unternehmensprojekt ist dasjenige mit der Endung „ear“. Das andere Projekt ist ein übergeordnetes Maven-Projekt des erstgenannten. Damit werden wir uns nicht befassen.

Wir fügen das Web-Modul und das Modul EJB zum Unternehmensprojekt hinzu:

  • in [1]: Hinzufügen einer neuen Abhängigkeit,
  • in [2]: Hinzufügen des Projekts EJB [mv-pam-ejb-metier-dao-eclipselink]. Beachten Sie dessen Typ ejb,
  • in [3]: Hinzufügen des Webprojekts [mv-pam-jsf2-ejb]. Zu beachten ist dessen Typ war.

Die Datei [pom.xml] sieht dann wie folgt aus:


<dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>mv-pam-ejb-metier-dao-eclipselink</artifactId>
            <version>${project.version}</version>
            <type>ejb</type>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>mv-pam-jsf2-ejb</artifactId>
            <version>${project.version}</version>
            <type>war</type>
        </dependency>
    </dependencies>

Vor der Bereitstellung der Unternehmensanwendung [mv-pam-webapp-ear] muss sichergestellt werden, dass die Datenbank MySQL [dbpam_eclipselink] vorhanden und gefüllt ist. Sobald dies geschehen ist, können wir die Unternehmensanwendung [mv-pam-webapp-ear] bereitstellen:

  • In [1] ist die Unternehmensanwendung bereitgestellt
  • in [2]; die Unternehmensanwendung [mv-pam-webapp-ear] wurde erfolgreich bereitgestellt.

Im Browser wird folgende Seite angezeigt:

  • In , der angeforderten URL
  • in [2] wurde die Mitarbeiterliste mit den Elementen aus der Tabelle [Employes] der Datenbank dbpam gefüllt.

Der Leser wird gebeten, die Tests der Webversion Nr. 1 erneut durchzuführen. Hier ein Ausführungsbeispiel:

Image