Blog

Konfigurieren eines Seam EJB-Projekts für die Entwicklung mit Maven und JBoss Tools

Maarten Winkels

Aktualisiert Oktober 23, 2025
8 Minuten

Angenommen, Sie möchten eine Webanwendung erstellen und Seam für die Integration von Standardtechnologien wie JSF und EJB verwenden. Außerdem möchten Sie die Leistungsfähigkeit von Maven nutzen, um Ihr Projekt für verschiedene Umgebungen und Systeme zu erstellen (z.B. Ihr Continuous-Build-System) und die umfangreichen Berichtsfunktionen nutzen, um einen Überblick über die Codequalität Ihres Projekts zu erhalten. Und natürlich möchten Sie eine gute IDE wie Eclipse mit JBoss-Tools verwenden, die Sie bei der Entwicklung unterstützen. Wie kann man all diese Dinge einrichten?

Maven - Projektstruktur Modul-AbhängigkeitenAls erstes müssen wir uns darüber klar werden, wie wir die Maven-Projektstruktur für dieses Projekt einrichten. Um ein Seam-Projekt zu entwickeln, das EJBs (und JSF) verwendet, benötigen wir ein ejb-Archiv und ein Web-Archiv. Diese sollten in einem ear-Archiv zusammengefasst werden. Für Maven bedeutet dies, dass wir mindestens drei Projekte benötigen, eines für jedes Artefakt und vorzugsweise eines mehr, um die anderen leicht erstellen zu können. Das Bild zeigt, wie diese Projekte miteinander verbunden sind:

  1. Das BLD (Build)-Projekt ist das übergeordnete Projekt für alle anderen Projekte, die wiederum Module des BLD-Projekts sind. Der Hauptzweck dieses Projekts besteht darin, einen Ort für die gemeinsame Konfiguration und einen gemeinsamen Build für alle Module zu schaffen.
  2. Das WAR-Projekt hängt von dem EJB-Projekt ab, da es einige der Dienste nutzen wird.
  3. Das EAR-Projekt hängt sowohl vom WAR- als auch vom EJB-Projekt ab, da diese in das Ohr gepackt werden sollten.

Maven - Abhängigkeiten Bei Maven dreht sich alles um Abhängigkeiten. Glücklicherweise sind die Seam-Bibliotheken in den Repositories verfügbar, sowohl in den speziellen Repositories, die von JBoss gehostet werden, als auch im zentralen Repository. Und es gibt noch mehr: Seam stellt ein sehr nützliches Maven-Projekt zur Verfügung, das als Elternprojekt für unser eigenes Projekt verwendet werden kann: org.jboss.seam:root. Dieses Projekt enthält die JBoss Repositories und einen Abschnitt zur Verwaltung von Abhängigkeiten, der sicherstellt, dass kompatible Versionen aller Bibliotheken referenziert werden. Der erste Schritt besteht also darin, unser BLD-Projekt zu einem Kind des org.jboss.seam:root-Projekts zu machen. Dann müssen wir die notwendigen Abhängigkeiten für Seam hinzufügen.

  • Das EJB-Projekt hängt von org.jboss.seam:jboss-seam:ejb und von org.hibernate:hibernate-entitymanager ab, da wir Hibernate für die Persistenz verwenden werden.
  • Das WAR-Projekt hängt von org.jboss.seam:jboss-seam-ui ab. Je nachdem, welche Frontend-Technologie Sie bevorzugen, müssen weitere Abhängigkeiten hinzugefügt werden, aber dazu kommen wir später.

Das Gute daran ist, dass wir, da wir org.jboss.seam:root als übergeordnetes System verwenden, keine Versionen angeben müssen, da dies von der Abhängigkeitsverwaltung übernommen wird. Die Maven-Struktur und Abhängigkeiten (und einige weitere Unterstützungsdateien wie web.xml und ejb-jar.xml) können in einem Maven-Archetyp verpackt werden. Im Anhang zu diesem Blog finden Sie den Archetyp, den wir gerade erstellen. Sie finden ihn auch in Xebias Opensource Maven Repository oder im Snapshot Repository. Eclipse jboss-projectNachdem wir uns mit Maven beschäftigt haben, wollen wir uns nun diesem Eclipse-Biest zuwenden. Wir möchten gerne einen einfachen Weg vom Maven-Projekt zur Eclipse-Entwicklungsumgebung finden. Schließlich möchten wir, dass die JBoss Tools ausgehend von einem einfachen Maven-Projekt sofort einsatzbereit sind. Werfen wir zunächst einen Blick auf ein JBoss Tools Seam-Projekt. Das Bild links zeigt den Umriss eines Seam-Projekts, wie es von JBoss Tools erstellt wurde. Es gibt 4 Projekte: test (WAR), test-ejb, test-ear und test-test. Das letzte Projekt enthält die Tests, die in einem Maven-Projekt Teil desselben Projekts sind, so dass wir nicht weiter darauf eingehen werden. Die anderen drei Projekte sind WTP-fähige Projekte. Wenn wir uns die Konfigurationsdateien (.settings/org.eclipse.wst.common.component in jedem Projekt) ansehen, stellen wir fest, dass WTP Version 1.5 verwendet wird. Versuchen wir nun, eine ähnliche Konfiguration ausgehend vom Maven-Projekt zu erstellen. Eclipse - WTP-Unterstützung Maven verfügt über ein maven-eclipse-plugin, dessen einziger Zweck es ist, ein Maven-Projekt in eine funktionierende Eclipse-Projektkonfiguration zu verwandeln. Leider ist die WTP-Unterstützung des Plugins sehr lückenhaft. Um das Plugin zu konfigurieren, verwenden wir diesen XML-Ausschnitt, der aus der offiziellen Dokumentation stammt.

    

  maven-eclipse-plugin

  true
  true
  true
  1.5
  ${basedir}/src/main/resources/META-INF/MANIFEST.MF

Dieser Ausschnitt sollte in die pom.xml des BLD-Projekts eingefügt werden, damit er auf alle Projekte angewendet wird. Wenn Sie nun das Maven-Ziel eclipse:eclipse auf dem BLD-Projekt ausführen, wird die Eclipse-Konfiguration (.project, .classpath und WTP-Dateien) für alle Projekte generiert. Die Version der JEE-Spezifikationen wird vom maven-eclipse-Plugin anhand der Maven-Abhängigkeiten für die jeweiligen Spezifikationen abgeleitet. Um sicherzustellen, dass das Plugin die richtige WTP-Konfiguration generiert, müssen wir die Abhängigkeit javax.ejb:ejb-api:3.0 zum EJB-Projekt und die Abhängigkeit javax.serlet:servlet-api:2.5 zum WAR-Projekt hinzufügen. Damit funktioniert die Konfiguration für diese beiden Projekte einwandfrei. Leider funktioniert das EAR-Projekt nicht und kann nicht bereitgestellt werden. Aus irgendeinem Grund erkennt WTP die Module für dieses Projekt nicht und bei dem Versuch, es zu verteilen, wird eine ClassCastException ausgelöst. So viel zum maven-eclipse-plugin... eclipse:m2eclipse ...oder nicht? Das Plugin bietet ein weiteres Ziel, das hier nützlich sein könnte: eclipse:m2eclipse. Damit wird die Eclipse-Konfiguration auf die gleiche Weise erstellt, aber das M2Eclipse-Plugin wird zu den Projekten hinzugefügt. Dieses Plugin hat eine Menge nützlicher Funktionen: Es macht die Synchronisierung der Eclipse-Konfiguration mit der Maven-Konfiguration zu einem Kinderspiel. Es fügt zum Beispiel die Maven-Abhängigkeiten zum Eclipse-Klassenpfad hinzu, synchronisiert aber auch andere Eigenschaften, wie die Java-Version. Darüber hinaus wird das Hinzufügen von Abhängigkeiten und das Ändern der POM im Allgemeinen sehr einfach und schließlich wird auch das Erstellen neuer Maven-Projekte oder -Module aus Eclipse heraus sehr einfach. Diese Art der Einrichtung des Eclipse-Projekts unterscheidet sich etwas von der vorherigen: Anstatt alle Konfigurationsdateien korrekt zu generieren, arbeitet das M2Eclipse-Plugin innerhalb von eclipse, um die Konfiguration von eclipse und WTP zu synchronisieren. Das Ziel eclipse:m2eclipse funktioniert nicht gut mit der Konfiguration, die oben für das Ziel eclipse:eclipse angegeben wurde, insbesondere bei EAR-Projekten. Es ist besser, alle Konfigurationen aus der maven-eclipse-plugin Konfiguration zu entfernen und das Plugin seine Arbeit machen zu lassen. Das bedeutet, dass Sie nach der Erstellung der Eclipse-Projektdateien den Eclipse-Arbeitsbereich öffnen und den Synchronisierungsprozess manuell starten müssen. Weitere Informationen hierzu finden Sie auf der Maven-Website für den Archetyp. JBoss Tools-Unterstützung JBoss Tools ist eine Eclipse-Funktion, die für ein Projekt aktiviert werden kann, indem einige Konfigurationen (JSF- und Seam-Facetten, der SeamBuilder und SeamNature) zum Eclipse-Projekt hinzugefügt werden. JBoss Tools verwaltet zwei Projekte: das WAR- und das EJB-Projekt, wobei das WAR-Projekt die Hauptquelle für die Konfiguration ist. Wenn Sie der maven-eclipse-plugin-Konfiguration für dieses Projekt die erforderlichen Elemente hinzufügen und außerdem eine spezielle Seam-Konfigurationsdatei in das Verzeichnis .settings einfügen, wird das Projekt von JBoss Tools korrekt erkannt. Aus irgendeinem Grund speichert JBoss Tools auch einige Konfigurationen in der Workspace-Konfiguration. Diese kann nicht über den Maven Archetype konfiguriert werden, so dass die Konfiguration der JBoss Tools nicht vollständig ist. Aus diesem Grund wird die Verbindung zwischen dem WAR- und dem EJB-Projekt von JBoss Tools nicht über das EJB-Projekt gefunden. Wenn ein neues Seam-Artefakt (Action, Entity, Form oder Conversation) aus dem Kontextmenü des EJB-Projekts hinzugefügt wird, werden die im WAR-Projekt vorgenommenen Konfigurationen nicht übernommen. Beim Hinzufügen aus dem WAR-Projekt werden sie übernommen und einige Quellen werden auch in die EJB-Projekte geschrieben, sofern erforderlich. JBoss Tools - JSF-Vorlagen JBoss Tools generiert Java-Quellen und JSF-Seiten, wenn eine neue Komponente hinzugefügt wird. Die JSF-Seiten erwarten, dass bestimmte Vorlagen im Seam-Projekt vorhanden sind und funktionieren nicht korrekt, wenn sie nicht gefunden werden. Durch das Hinzufügen dieser Dateien zum Maven Archetype funktioniert das generierte JBoss Tools-Projekt korrekt. Außerdem benötigen die Maven-Projekte zusätzliche Abhängigkeiten von RichFaces und Facelets in einer bestimmten Konfiguration (einige Jars sollten in der WEB-INF/lib, andere in der EAR/lib abgelegt werden), damit die bereitgestellte Anwendung korrekt funktioniert. Das vom (aktuellen) Archetype generierte JBoss Tools-Projekt ist bis auf die Sicherheitskonfiguration genau dasselbe wie ein von JBoss Tools aus erstelltes Projekt. Bereitstellung auf JBoss - Probleme mit der application.xml Ein letztes Problem tritt auf, wenn Sie versuchen, die generierte Anwendung auf JBoss AS 4.2 bereitzustellen: Sie beschwert sich über die fehlende META-INF/application.xml. Gemäß der neuesten JEE-Spezifikation ist die application.xml nicht mehr zwingend erforderlich, aber JBoss AS 4.2 handhabt dies nicht korrekt. Damit es mit WTP auf JBoss und auch mit den von Maven erstellten Artefakten funktioniert, müssen wir einige Tricks anwenden, damit alles funktioniert:

  1. Wir müssen eine 'leere' Datei application.xml im META-INF-Verzeichnis in src/main/application des EAR-Projekts hinzufügen. Diese Datei wird vom M2Eclipse-Plugin geändert und von WTP verwendet, damit die Bereitstellung auf JBoss AS funktioniert.
  2. Wir lassen Maven während des Builds eine application.xml-Datei generieren, indem wir die Eigenschaft generateApplicationXml auf dem ear-Plugin setzen. Die Datei wird im normalen bulid-Verzeichnis generiert und nicht im gleichen wie im vorherigen.
  3. Wir schließen die erste Datei aus der maven-bulid EAR-Datei aus, indem wir die Eigenschaft earSourceExcludes des ear-Plugins verwenden (Wert:META-INF/application.xml). auf diese Weise wird die erste Datei ignoriert und die zweite wird im Maven-Build verwendet.

Et voila! An diesem Punkt haben wir unser Ziel erreicht, ein Seam-Projekt mit Maven zu erstellen und gleichzeitig JBoss Tools, Eclipse und WTP für die Entwicklung zu verwenden. Viel Spaß beim Programmieren!

Verfasst von

Maarten Winkels

Contact

Let’s discuss how we can support your journey.