Tutorial: Erstellung eines JBoss Seam Eclipse Projekt auf Tomcat Basis durch Import des JPA Beispiels
JBoss Seam rühmt sich auch ohne den JBoss aber insbesondere auch ohne einen JEE Application Server laufen zu können. Obwohl Seam auf JEE basiert und eine Schnittstelle zwischen JEE Komponenten und der Web-Welt sein möchte erleichtert Seam auch ohne einen Java EE Application Server die Entwicklung einer Web-Anwendung vor allem durch die Verwendung als Context Controller.
Im Folgenden soll gezeigt werden wie der einfachste Einstieg mit Hilfe des Seam JPA Beispiels gelingt um ein Seam Projekt inklusive JPA Persistenz durch Hibernate auf Tomcat Basis in Eclipse erstellen kann. In diesem Tutorial wird in erster Linie nicht auf die einzelnen Konfigurationsdateien eingegangen, das wird in einem extra Artikel gemacht, sondern lediglich auf das Ziel hingearbeitet ein Seam Projekt in Eclipse zu erstellen und auf den Tomcat laufen zu lassen. Es bestehen zwei Möglichkeiten Seam auf dem Tomcat laufen zu lassen. Zum Einen die Verwendung eines JEE Microcontainer mit JBoss Embedded und zum anderen gänzlich ohne JEE Microcontainer. In diesem Tutorial wird kein JEE Mircrocontainer verwendet.
Vorbereitungen
Verwendete Tools und Versionen
- Eclipse Gallileo (3.5) – IDE for Java EE Developers
- Apache Tomcat Version 6.0.20
- JBoss Seam Version 2.2.0
- JBoss Tools Version 3.1.0
- MySQL Version 5.0.x (oder DB der Wahl)
Es wird in diesem Tutorial nicht auf das Herunterladen der Software und Tools, der Verzeichnisstruktur und Eclipse sowie die Konfiguration von MySQL eingegangen. Benötigt man eine genaue Anleitung für diese Punkte sollte man sich das äquivalente Tutorial “Tutorial: Mit JBoss Seam und JEE5 unter Eclipse starten” genauer ansehen. Diese Punkte verhalten sich aktuell immer noch gleich bis auf die Verwendung des JBoss AS der jetzt durch den Apache Tomcat ausgetauscht wird.
Es wird also ein Eclipse JEE Bundle (WTP inklusive), ein entpackter/installierter Tomcat 6 und eine vorhandene Datenbank vorausgesetzt.
Tomcat Server Runtime in Eclipse konfigurieren
Weil das Seam Projekt direkt aus Eclipse heraus in den Tomcat deployt und gestartet werden soll muss als erstes der Tomcat als Server Runtime installiert werden. Dazu im Hauptmenü unter Window->Preferences->Server->Runtime Environment den Button “Add” klicken.
Anschließend Apache Tomcat v6.0 und weiter unten “Create a new local server” auswählen und den Button “Next” klicken:
Auf dem letzten Dialog den Tomcat Installationspfad angeben. Ich verwende für meine Projekte immer den Tomcat den man einfach als ZIP herunterladen und anschließend an einer bestimmten Stelle entpacken kann. Den letzten Dialog des Wizzards mit dem Button “Finish” beenden:
Der Tomcat sollte nun in Eclipse konfiguriert sein:
Die Preferences verlassen und die Server View “Hauptmenü->Windows->Show View->Servers” öffnen. Es sollte der eben konfigurierte Tomcat, sofern das Häkchen bei “Create a new local server” gesetzt wurde, zu sehen sein:
Der Server sollte sich auch ohne Probleme starten lassen:
Vom Prinzip ist das Einrichten einer Server Runtime nichts neues aber ich wollte die Schritte wenigstens einmal kurz zeigen =).
Seam JPA Beispiel für Tomcat bauen und testen
JPA Beispiel mit ANT für Tomcat 6 bauen
Die wohl schnellste Variante ein Seam Projekt inklusive Persistierung via JPA für Tomcat als Eclipse Projekt zu erstellen ist das Importieren des mit vom Seam ausgelieferten JPA Beispiels. Seam liefert eine beachtliche Menge an Beispielen aus, welche alle gebaut und deployt werden können. Darunter befindet sich eben auch das JPA Beispiel welches im entpackten Seam Verzeichnis unter examples/jpa liegt und man für Tomcat 5 und Tomcat 6 bauen lassen kann.
Um sich ein WAR File für Tomcat 6 zu erstellen muss zum einen ANT im Pfad (Umgebungsvariable PATH) konfiguriert sein und zum anderen die Umgebungsvariable JAVA_HOME auf ein JDK 6 zeigen. Ist beides konfiguriert die Eingabeaufforderung im Seam examples Ordner öffnen. An dieser Stelle in kleiner Tipp für alle Windows Vista Benutzer: hält man die Schift-Taste gedrückt und öffnet das Kontextmenü auf einem Ordner so erscheint eine zusätzliche Auswahl “Eingabeaufforderung hier öffnen”:
Alle anderen müssen sich durchhangeln ;). Hat man die Eingabeaufforderung im gewünschten Order kann man noch einmal die beiden notwendigen Umgebungsvariablen PATH und JAVA_HOME überprüfen und anschließend den build für Tomcat 6 mit “ant tomcat6” gestartet werden:
D:\Projekte\JBossSeamTomcat\jboss-seam-2.2.0.GA\examples\jpa>echo %PATH%
C:\Windows\system32;...;D:\Development\apache-ant-1.7.1/bin
D:\Projekte\JBossSeamTomcat\jboss-seam-2.2.0.GA\examples\jpa>echo %JAVA_HOME%
D:\Projekte\JBossSeamTomcat\jdk-1.6
D:\Projekte\JBossSeamTomcat\jboss-seam-2.2.0.GA\examples\jpa>ant tomcat6
Buildfile: build.xml
...
init:
[echo] Building The JPA Example for plain Tomcat 6.0 2.2
...
noejb.archive:
[jar] Building jar: D:\Projekte\JBossSeamTomcat\jboss-seam-2.2.0.GA\examples\jpa\dist-tomcat6\jboss-seam-jpa.war
BUILD SUCCESSFUL
Total time: 4 seconds
Die interessante Zeile ist die letzte, denn da steht dass die jboss-seam-jpa.war Datei im Ordner “..\examples\jpa\dis-tomcat6\” abgelegt wurde.
JPA WAR im Tomcat testen
Die einfachste Variante zu testen ob das erzeugte war erst einmal überhaupt funktioniert ist ein Test direkt im Tomcat. Dazu die WAR Datei jboss-seam-jpa.war kopieren und im Tomcat Verzeichnis in den Unterorder “webapps” kopieren:
Startet man anschließend den Tomcat (<TomcatDir>/bin/startup.bat) erscheint sehr wahrscheinlich die Fehlermeldung, dass der HSQL DB Treiber "" nicht gefunden wurde:
20:34:06,520 INFO [DatasourceConnectionProvider] Using datasource: java:comp/env/jdbc/TestDB
20:34:06,522 WARN [SettingsFactory] Could not obtain connection metadata
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.hsqldb.jdbcDriver'
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1136)
...
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver
...
27.09.2009 20:34:06 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Mojarra (1.2_12-b01-FCS) for context '/jboss-seam-jpa'
27.09.2009 20:34:07 org.apache.catalina.core.StandardContext start
SCHWERWIEGEND: Error listenerStart
Dazu muss man wissen, dass das Seam JPA Beispiel intern mit einer HSQL DB arbeitet und den Treiber im Tomcat lib Verzeichnis voraussetzt. Am Einfachsten ist es wenn der HSQL DB Treiber von Sourceforge heruntergeladen wird. Zum aktuellen Zeitpunkt ist die Version 1.8.1 (Direktlink) die aktuellste. Das herunterladene Zip entpacken und aus dem Unterordner lib das hsqld.jar kopieren und im Tomcat lib Verzeichnis einfügen. Anschließend den Tomcat neu starten - dieser sollte nun ohne Fehler neu starten:
27.09.2009 20:42:17 com.sun.faces.config.ConfigureListener contextInitialized INFO: Initializing Mojarra (1.2_12-b01-FCS) for context '/jboss-seam-jpa' ... 27.09.2009 20:42:19 org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-8080 27.09.2009 20:42:19 org.apache.jk.common.ChannelSocket init INFO: JK: ajp13 listening on /0.0.0.0:8009 27.09.2009 20:42:19 org.apache.jk.server.JkMain start INFO: Jk running ID=0 time=0/13 config=null 27.09.2009 20:42:19 org.apache.catalina.startup.Catalina start INFO: Server startup in 4348 ms
Nun kann die JPA Beispielanwendung mit der URL http://localhost:8080/jboss-seam-jpa aufgerufen werden:
Der Deploymenttest hat gezeigt, dass sich das erstellte WAR ohne Probleme im Tomcat deployen und aufrufen lässt.
Eclipse Projekt erstellen
Projekt durch WAR Import erstellen
Als letzten Schritt fehlt nur noch der Import des WARs als Eclipse Projekt.
Dazu den eben gestarteten Tomcat wieder stoppen und das jboss-seam-jpa.war wieder aus dem webapps Verzeichnis entfernen. In Eclipse den Import Dialog öffnen: "Hauptmenü->File->Import->Web->WAR file" und den zu importierenden Typ WAR wählen:
Button "Next" drücken. Im folgenden Dialog muss das zu importierende WAR File im Filesystem selektiert werden. Im "Browse" Dialog zu dem Seam examples/jpa/dist/tomcat6 Verzeichnis wechseln und das jboss-seam-jpa.war auswählen. Der Web Projekt Name wird automatisch gewählt und sollte erst einmal so gelassen werden. Die Target Server Runtime "Apache Tomcat v6" wurde schon in den Vorbereitungen konfiguriert, so dass dieser auch automatisch vorausgewählt wird. Ist keine Server Runtime verfügbar sollte sie spätestens jetzt konfiguriert werden.
Man kann den Dialog eigentlich schon mit dem Button "Finish" beenden. Falls man doch noch mit "Next" weitergeht dann in dem nächsten Dialog kein JAR selektieren und spätestens dann mit dem Button "Finish" den Import Wizzard beenden und den eigentlichen Import starten:
Den Dialog mit dem Button "Finish" beenden. Anschließend wird das Eclipse Projekt erstellt und erscheint im Package Explorer wie folgt:
Projekt aus Eclispe heraus im Tomcat deployen
Nun kommt der letzte entscheidende Test ob sich dieses importierte Projekt auch aus Eclipse heraus deployen und aufrufen lässt. Dazu in der Server View dem Tomcat Server das Projekt zum deployen hinzufügen: rechte Maustaste auf den Server->Add and Remove...->"jboss-seam-jpa" Projekt mit Doppelklick hinzufügen:
Mit dem Button "Finish" den Dialog verlassen und den Tomcat Server aus Eclipse heraus starten. In der Console View darf, wie auch vorhin in der Eingabeaufforderung, keine Exception zu sehen sein:
Der letzte Test ist natürlich wieder der Aufruf der Webanwendung im Browser unter der URL "http://localhost:8080/jboss-seam-jpa". Und weil wir uns ja gerade so schön in Eclipse bewegen machen wir dies auch direkt im Eclipse eingebetteten Browser. Diesen findet man in der Toolbar als Weltkugel oder über das Hauptmenü->Window->Show View->Other...->General->Internal Web Browser.
Auch das hat ohne weiter Probleme funktioniert und nun steht dem erkunden und erweitern des Projekts nichts mehr im Wege.
Ausblick
In diesem Tutorial wurde nicht auf das Projekt selbst und auf die verschiedenen Dateien für die Konfiguration eingegangen. Das ist nochmal ein eigener Artikel in der nahen Zukunft der beschreiben wird wie man ein Seam Projekt für den Tomcat in Eclipse aufsetzt wenn man die Schritte der Konfiguration alle von Hand selbst macht bzw. den Seam Projekt Wizzard verwendet.
Mit diesem Tutorial sollte gezeigt werden wie man relativ einfach an eine funktionierendes Projekt für ersten Start mit Seam und JPA unter Tomcat haben kann. Wer sich schon besser mit den einzelnen Frameworks (JPA, Seam, Facelets, JSF, RichFaces, ...) auskennt wird auch einigermaßen schnell die Struktur durchblicken und loslegen können. Ansonsten eignet sich dieses Projekt auch sehr gut um einfach mal herumzuprobieren und die verschiedenen Technologien kennenzulernen. Auch Tests an den Konfigurationen kann man hier einfach machen denn wer das WAR erst einmal hat und den Import Dialog kennt kann sich das funktionierende Projekt in wenigen Sekunden wiederherstellen.
Viel Spaß beim ausprobieren!
Wenn du Fragen oder Anregungen zum Post hast, dann hinterlasse doch einen Kommentar oder wenn du weiterhin Artikel von Javathreads lesen möchtest, dann abonniere den RSS Feed und sehe direkt in deinem Feed Reader die nächsten Artikel.
Ähnliche Artikel, die dich interessieren könnten:
Kommentare
Stimmt, ich habe das Thema in diesem Artikel nicht explizit behandelt habe es aber eigentlich auf der Liste der zu veröffentlichenden Artikel.
Falls du noch gar keinen Ansatz hast dann hier die einfachste Variante: verwende die persistence.xml um darin direkt die Datenbankverbindung zu konfigurieren. Das funktioniert auf alle Fälle. Für eine MySQL DB sieht die persistence.xml dann z.B. wie folgt aus:
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="myPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/dbname?autoReconnect=true" /> <property name="hibernate.connection.username" value="username" /> <property name="hibernate.connection.password" value="pw" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/> <property name="hibernate.hbm2ddl.auto" value="validate"/> <property name="hibernate.show_sql" value="false"/> <property name="hibernate.format_sql" value="false"/> </properties> </persistence-unit> </persistence>
Ich schreibe vielleicht in den nächsten Tagen mal kurz die zwei Möglichkeiten auf wie man im Tomcat die Datenbankverbindung konfigurieren kann. Aber das wird wahrscheinich erst nächste Woche bzw. nächstes Wochenende.
Gruß
Markus
[...] http://javathreads.de/2009/10/tutorial-erstellung-eines-jboss-seam-eclipse-projekt-auf-tomcat-basis-... This entry was posted in Uncategorized. Bookmark the permalink. ← Small Aperture…? [...]
hallo Markus,
dein Tutorial hat uns nach langer Suche und Lektüre vieler Anleitung zum thema, ein seam project mit Tomcat und mysql laufen zu lassen, sehr geholfen. Wir bedanken uns dafür.
Esin Tulun














Hi Markus,
Danke für die Anleitung.
Das es mit
” … ein Seam Projekt inklusive JPA Persistenz durch Hibernate auf Tomcat Basis in Eclipse … ”
angefangen hat dachte ich, irgendwann kommt es zur Hibernate Konfiguration mit ein beispiele dazu. Leider nicht der Fall. Die Datenbank wird hier nicht behandelt.
Hast Du es dem Nächst vor oder kennst Du andere Ressources (außer JBoss Docs :) )?
Danke!