Skip to content

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

11.1. Anwendungsarchitektur

Die Architektur der vorherigen Webanwendung sah wie folgt aus:

Wir ersetzen die simulierte [Business]-Schicht durch die in Abschnitt 7.1 durch EJBs implementierten [Business-, DAO- und JPA]-Schichten:

11.2. Das NetBeans-Projekt für die Web-Schicht

Das NetBeans-Projekt für die Web-Version 2 wird durch Kopieren des vorherigen Projekts erstellt:

  • [1]: Kopieren Sie das neue Projekt und fügen Sie es in die Registerkarte [Projekte] ein,
  • [2]: Geben Sie ihm einen Namen und legen Sie den Ordner fest,
  • [3]: Das Projekt wird erstellt,

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

  • [4]: Benennen Sie das Projekt um,
  • [5]: Ändern Sie sowohl den Namen als auch die artifactID.

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

  • Wir entfernen die Pakete [exception, business, jpa], die im vorherigen Projekt vorhanden waren.
  • Um diese Entfernung auszugleichen, fügen wir das in Abschnitt 7.1 erstellte EJB-Server-Projekt zu den Abhängigkeiten des Webprojekts hinzu.
  • In [1] fügen wir dem Projekt eine Abhängigkeit hinzu,
  • In [2] wählen wir das Maven-Projekt für die [Business]-Schicht aus. In [3] geben wir dessen Typ an, und in [4] dessen Geltungsbereich. Der Geltungsbereich wird auf `provided` gesetzt, um anzugeben, dass es dem Webmodul von seiner Laufzeitumgebung bereitgestellt wird. Wir werden gleich sehen, dass es von einer Unternehmensanwendung bereitgestellt wird,
  • in [5] wurde die Abhängigkeit hinzugefügt.

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


  private boolean viewInfosIsRendered;

Wir können nun die Pakete aus der [business]-Schicht entfernen, die nicht mehr benötigt werden:

  

Außerdem müssen wir den Code in der Bean [Form.java] ändern:


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

In Zeile 7 wurde die simulierte [business]-Schicht instanziiert. Nun muss sie auf die tatsächliche [business]-Schicht verweisen. Der vorherige Code sieht nun wie folgt aus:


public class Form {
 
  public Form() {
  }
 
  // business layer
  private IMetierLocal metier=new Metier();
 
  // form fields
...

Zeile 7: Die Annotation @EJB weist den Servlet-Container – der die Webschicht ausführt – an, das EJB, das die lokale Schnittstelle IMetierLocal implementiert, in das Geschäftsfeld in Zeile 8 einzubinden.

Warum die lokale Schnittstelle IMetierLocal und nicht die Schnittstelle IMetierRemote? Weil die Webschicht und die EJB-Schicht in derselben JVM laufen:

Klassen im Servlet-Container können direkt auf EJB-Klassen im EJB-Container verweisen.

Das war’s. Unsere Webschicht ist fertig. Die Umstellung war einfach, da wir darauf geachtet hatten, die [Business-]Schicht mithilfe einer Klasse zu simulieren, die der Schnittstelle IMetierLocal entsprach, die von der eigentlichen [Business-]Schicht implementiert wurde.

11.3. Das NetBeans-Projekt für die Unternehmensanwendung

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

Wir gehen wie folgt vor:

  • In [1] erstellen wir ein neues Projekt
  • In [2] wählen wir die Kategorie [Maven] aus
  • in [3] wählen wir den Typ [Enterprise Application]
  • in [4] benennen wir das Projekt
  • In [5] wählen wir Java EE 6
  • In [6] kann ein Unternehmensprojekt bis zu zwei Arten von Modulen enthalten:
    • ein EJB-Modul
    • ein Web-Modul

Beim Erstellen des Unternehmensprojekts können Sie die Erstellung dieser beiden Module anfordern, die zunächst leer sind. Ein Unternehmensprojekt dient ausschließlich der Bereitstellung der darin enthaltenen Module. Darüber hinaus ist es eine leere Hülle. Hier möchten wir Folgendes bereitstellen:

  • ein bestehendes Webmodul [mv-pam-jsf2-alone]. Daher ist es nicht erforderlich, ein neues Webmodul zu erstellen.
  • ein bestehendes EJB-Modul [mv-pam-ejb-metier-dao-eclipselink]. Auch hier ist es nicht erforderlich, ein neues zu erstellen.

In [6] erstellen wir ein Unternehmensprojekt ohne Module. Wir werden seine Web- und EJB-Module später 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. Wir werden uns damit nicht befassen.

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

  • Fügen Sie in [1] eine neue Abhängigkeit hinzu,
  • fügen Sie in [2] das EJB-Projekt [mv-pam-ejb-metier-dao-eclipselink] hinzu. Beachten Sie dessen EJB-Typ,
  • fügen Sie unter [3] das Web-Projekt [mv-pam-jsf2-ejb] hinzu. Beachten Sie, dass dessen Typ „war“ ist.

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


public class Form {
 
  public Form() {
  }
 
  // business layer
  @EJB
  private IMetierLocal metier;
 
  // form fields

Stellen Sie vor der Bereitstellung der Unternehmensanwendung [mv-pam-webapp-ear] sicher, dass die MySQL-Datenbank [dbpam_eclipselink] vorhanden und gefüllt ist. Sobald dies erledigt ist, können wir die Unternehmensanwendung [mv-pam-webapp-ear] bereitstellen:

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

Im Browser wird die folgende Seite angezeigt:

  • in [1] wurde die angeforderte URL
  • in [2] wurde die Liste der Mitarbeiter mit den Einträgen aus der Tabelle [Employees] in der Datenbank dbpam gefüllt.

Der Leser ist eingeladen, die Tests aus der Web-Version 1 zu wiederholen. Hier ist ein Beispiel für die Ausführung:

Image