Tutorial: Mit JBoss Seam und JEE5 unter Eclipse starten
Wer mit JBoss Seam eine Anwendung entwickeln möchte muss sich vor der eigentlichen Entwicklung erst die Entwicklungsumgebung einrichten. Und gerade diese ersten Schritte sind oft nicht ganz klar obwohl es hinterher eigentlich immer einfach erscheint. Aus diesem Grund möchte ich in diesem Artikel die einzelnen Schritte aufzeigen und beschreiben die notwendig sind um Eclipse mit dem JBoss Application Server (AS), JBoss Seam und als Datenbank die MySQL zu konfigurieren, so dass die eigentliche Entwicklung einer JBoss Seam JEE5 Anwendung starten kann. Ist die Umgebung einmal eingerichtet wird auch gleich ein “Hello World” Projekt erstellt und deployt.
Damit klar ist mit welchen Tools und deren Versionen in diesem Tutorial gearbeitet wird hier eine kurze Auflistung. Es wird später noch einmal darauf eingegangen wenn die Tools heruntergeladen werden müssen:
- Eclipse Ganymede – IDE for Java EE Developers
- JBoss Application Server Version 4.2.2.GA
- JBoss Seam Version 2.0.2
- JBoss Tools Version 3.0.0 Alpha 1
- MySQL Version 5.0.x
- MySQL GUI Tools für die Version 5.0
- MySQL Connector for Java 5.1
Sobald die Entwicklungsumgebung mit den eben aufgelisteten Tools eingerichtet ist soll noch ein kleines “Hello World Seam Projekt” mit Hilfe der JBoss Tools Plugins aus Eclipse heraus erstellt werden. Das Ergebnis wird wie folgt aussehen:
Das Tutorial ist in folgende Abschnitte unterteilt:
- Herunterladen der notwendigen Software und Tools
- Ordnerstruktur und Eclipse vorbereiten
- MySQL Datenbank installieren und konfigurieren
- Erstes Hello World Seam Projekt erstellen
- Erstes Deployment und das berühmte “Hello World”
- Fazit
Herunterladen der notwendigen Software und Tools
Ich möchte kurz erwähnen, dass die folgenden Beschreibungen sich auf Windows beziehen. Das ist zwar generell unabhängig, allerdings sind manche Angaben Pfadabhängig und gelten in diesem Fall für eine Windows Umgebung.
Als erstes muss Eclipse besorgt werden. Dazu auf eclipse.org gehen und im Menü auf Download klicken. Die einfachste Variante ist direkt das Eclipse für Java EE Developers Package herunterzuladen. Der Vorteil liegt darin, dass das Web Tools Projekt und andere notwendige Abhängigkeiten bereits vorinstalliert sind und mit dem angebotenen Eclipse zusammenspielen.
Weil JBoss Seam ein Framework für die einfache Verbindung zwischen EJB 3 und JSF ist sollten wir uns auch den passenden Application Server besorgen. JBoss Seam kann man auch auf einem Servlet Container, wie zum Beispiel Apache Tomcat, laufen lassen allerdings benötigt man dazu das Embedded JBoss Packet.
Den JBoss AS findet man auf seiner offiziellen Seite unter jboss.org und dort wieder auf den Button Download klicken. Für dieses Tutorial wird die letzte stabile Version 4.2.2.GA verwendet. Mit der zuletzt veröffentlichten Version 4.2.3.GA wird der Seam Phaselistener doppelt installiert, was zu einem fehlerhaften Zustand führt. Aus diesem Grund wird die vorherige Version 4.2.2.GA hier verwendet.
Und nun zu dem eigentlichen Framework um das es hier geht: JBoss Seam. Auch hier wird die letzte stabile Version 2.0.2 SP1 heruntergeladen.
Als Datenbank wird die MySQL verwendet. Dazu auch hier die letzte stabile Version 5.0 herunterladen.
Sehr nützlich für die Datenbankentwicklung mit der MySQL sind die MySQL Admin GUI Tools. Auch hier die letzte Version 5.0 herunterladen.
Um später von einer Java Anwendung aus auf die MySQL Datenbank zugreifen zu können müssen noch die Connector Treiber für Java “MySQL Connector/J” heruntergeladen werden.
Ordnerstruktur und Eclipse vorbereiten
Ich persönlich bevorzuge immer einen Projektordner der zu einem Thema ausgerichtet ist und alle für dieses Thema benötigten Tools enthält, sofern das möglich ist. In diesem Tutorial soll eine JBoss Seam Entwicklungsumgebung erstellt werden und dazu wurde der Ordner D:\Projekte\JBossSeam erstellt und sämtliche Tools darunter entpackt.
Gleich als erstes wird Eclipse Ganymede entpackt. Das heruntergeladene .zip einfach direkt im Projektordner entpacken. Anschließend sollte ein Verzeichnis eclipse vorhanden sein. Nun fehlt nur noch der Eclipse Workspace um eine glückliche Eclipse Installation fertigzustellen. Alle Eclipse Projekte in dieser Umgebung sollen im workspace Verzeichnis liegen. Dieses wird gleich neben dem eclipse Verzeichnis erstellt.
Für den JBoss AS und JBoss Seam wird ein Verzeichnis mit dem Namen jboss erstellt. Darin wird das JBoss AS und das JBoss Seam .zip entpackt. Anschließend sollte in dem Verzeichnis jboss die Ordner jboss-4.2.2.GA und jboss-seam-2.0.1.GA liegen.
Die fertige Verzeichnisstruktur sieht anschließend bei mir wie folgt aus:
Zum Starten von Eclipse habe verwende ich eine start_eclipse.bat Datei um Eclipse noch ein paar Startparameter wie den Workspace oder VM Speicherangaben mitzugeben:
Die Speicherangaben sind notwendig weil unter anderem der JBoss direkt aus Eclipse heraus gestartet werden soll und Eclipse somit genügend reservierten Arbeitsspeicher zur Verfügung hat. Ist eine solche .bat Datei oder eine Verknüpfung erstellt worden, sollte gleich getestet werden ob sich Eclipse auch starten lässt.
Ist dies der Fall fehlen noch die JBoss Tools Plugins in Eclipse und die Datenbank für das erste “Hello World” mit JBoss Seam.
Mit den JBoss Tools erhält man in Eclipse eine sehr gute Unterstützung für die Entwicklung mit den verschiedensten JBoss Elementen. Besonders schätze ich die Hibernate Tools, die Seam Tools und den RichFaces Visual Editor für die Syntax Unterstützung. Mit den Seam Tools wird später das Seam Projekt erstellt. Zuvor müssen diese allerdings erst installiert werden.
Bis vor kurzem mussten die einzelnen JBoss Tools Plugins noch als Nightly Build unter Eclipse Ganymede installiert werden. Seit ein paar Tagen ist allerdings die erste Version der JBoss Tools 3.0.0 (Alpha 1) veröffentlicht worden und man kann diese nun über den Eclipse Update Manager installieren.
Eclipse starten und im Hauptmenü unter “Help->Software Updates…->Available Software Tab->Add Site…” die JBoss Tools Development Update Seite http://download.jboss.org/jbosstools/updates/development hinzufügen.
Anschließend aufklappen und folgende im Screenshot sichtbar JBoss Tools Plugins selektieren:
Die Installation mit dem Button “Install…” starten, der Lizenz zustimmen und Eclipse nach der erfolgreichen Installation neu starten.
Wer eine ausführliche Beschreibung der Installation dieser 3.0.0 Alpha 1 Version sowie Schreenshots der neuen Features sehen möchte sollte sich den Artikel “JBoss Tools 3.0.0 Alpha1 – langsam geht es vorwärts” anschauen.
MySQL Datenbank installieren und konfigurieren
Die MySQL kann auf verschiedene Arten installiert werden. Ich verwende immer das Installationsprogramm und habe für meine Entwicklung eine MySQL Systemweit als Windows Dienst installiert. Den Dienst starte ich immer von Hand, wenn ich ihn benötige. Arbeitet man jeden Tag in dieser Umgebung kann man die Datenbank auch automatisch starten lassen.
Bei der Installation der Datenbank ist nichts zu beachten außer, dass man ein Passwort für seinen root User vergeben sollte an das man sich erinnert ;).
Anschließen noch die MySQL GUI Tools installieren. Ist beides Installiert kann man die Installation testen indem die Datenbank gestartet und sich über den MySQL Administrator (eines der GUI Tools) mit dem Benutzer root und dem vergebenen Passwort verbunden wird:
Es wird für das “Hello World Seam Projekt” eine Datenbank benötigt auf die wir vollen Zugriff haben. In MySQL muss dazu ein neues Schema erstellt werden. Am einfachsten und schnellsten geht das über das MySQL Administrator GUI Tool. Diesen also starten und sich als root auf localhost einloggen (Vorher natürlich noch MySQL starten).
Um ein neues Schema zu erstellen auf “Kataloge” klicken und anschließen darunter in der Liste der Schemata aus dem Context Menü (rechte Maustaste) “Neues Schema anlegen” selektieren.
Ich habe es seamprojekt genannt. Das neu erstellte Schema wird nun neben den anderen aufgelistet.
Nun fehlt noch der Benutzer für die Datenbankverbindung. Dazu auf den Punkt “Benutzerverwaltung” klicken und den Button “Neuen Nutzer anlegen” klicken (ist am unteren Rand zu finden). Username und Passwort vergeben – bei mir heißt hier seamdb mit dem Passwort seam – und den Button “Anwenden” drücken.
Als letztes müssen dem eben erstellten User noch die notwendigen Rechte vergeben werden. Dazu in dem User editieren Panel bleiben und das Tab “Schema-Berechtigungen” selektieren. Dort das zuvor erstellte Schema seamprojekt selektieren und sämtliche Rechte zuweisen. Das ganze mit dem Button “Anwenden” abschließen.
In einer Produktivumgebung vergibt man die Rechte natürlich selektiver – hier geht es lediglich um ein Testprojekt und erste Schritte mit Seam.
Damit der JBoss später von der deployten Anwendung aus auf die MySQL Datenbank zugreifen kann muss er den Datenbank Treiber im Classpath finden.
Dazu das heruntergeladene MySQL Connector/J Zip entpacken und das darin liegende mysql-connector-java-5.1.6-bin.jar in das lib Verzeichnis der JBoss Default Server Instanz legen (D:\Projekte\JBossSeam\jboss\jboss-4.2.2.GA\server\default\lib).
Nun ist die MySQL Datenbank und der JBoss soweit vorbereitet, dass es endlich an das erste Projekt gehen kann.
Erstes Hello World Seam Projekt erstellen
Nun gelangen wir endlich zu dem interessanten Teil: das “Hello World Seam Projekt” wird erstellt. Um ein solches Projekt zu erstellen bietet das JBoss Seam Framework uns die Möglichkeit das Grundgerüst eines Seam Projektes generieren zu lassen, was wir natürlich der Einfachheit halber ausnutzen wollen.
Seam liefert eine ziemlich coole Projektgenerierung mit dem Namen Seam Gen (seam-gen.bat) von Haus aus mit. In diesem Tutorial soll nicht mit Seam Gen ein Eclipse Projekt erstellt werden sondern mit den JBoss Tools Plugins, die einen Projekt Wizzard für Eclipse mitbringen. Wer einen Blick auf Seam Gen werfen möchte der kann dazu auch die ausführliche Anleitung aus der offiziellen Seam Dokumenation in Kapitel 2 lesen.
Noch ganz kurz zu dem elementaren Unterschied zwischen Seam Gen und den JBoss Tools Plugins: Mit Seam Gen wird ein einzelnes, erst einmal IDE unabhängiges, Projekt erstellt welches alle drei Teilbereiche (Web, EJB, EAR) sowie die Teststruktur in einem Ordner hält. Zusätzlich wird ein universelles Ant Build File für das Deployment, Erzeugung von neuen Seam Komponenten und Tests erstellt. Man kann später noch auswählen ob eine Projektstruktur für Eclipse oder Netbeans erstellt werden soll. Generell arbeitet man aber dennoch IDE unabhängig mit dem Ant Build File.
Das Utility “Seam Gen” befindet sich im Seam Verzeichnis unterhalb des Ordners seam-gen. Bei uns ist es somit im Verzeichnis “D:\Projekte\JBossSeam\jboss\jboss-seam-2.0.1.GA\seam-gen” zu finden.
Mit den Seam Tools Eclipse Plugin werden drei Einzelprojekte (Web, EJB, EAR) erstellt die zusammen ein ganzes ergeben. Das Testprojekt wird als viertes, auch separat liegendes Projekt, erzeugt, welches auf die anderen referenziert. Mehr zu dieser Projektstruktur sehen wir später noch. Arbeitet man also mit den Seam Tools legt man sich von vornherein auf die Eclipse als IDE fest und bekommt kein ANT Build File erstellt. Man deployt, erstellt und testet direkt aus Eclipse heraus.
Weil für die Projektgenerierung nicht das Batch File seam-gen.bat sondern das durch die Seam Tools verfügbare Eclipse Projekt Wizzard ist es wichtig, dass die JBoss Tools Plugins korrekt installiert wurden. Ist das der Fall kann eine JBoss Seam Perspektive in Eclipse ausgewählt werden.
In der Seam Perspektive stehen über das Hauptmenü (File->New) verschiedene Möglichkeiten für die Erstellung von Seam Komponenten (Action, Entity, Conversation, …) und einem Seam Web Projekt zur Verfügung. Wir selektieren natürlich die Auswahl “Seam Web Projekt“.
Es öffnet sich ein Projekt Wizzard mit dem ersten Dialog unter dem Namen “Seam Web Project” in dem schon einiges angegeben werden muss. Als erstes wird der Projektname vergeben – in diesem Beispiel soll das Projekt “HelloWorldSeamProjekt” benannt werden.
Als nächstes muss eine Server Runtime Target konfiguriert werden, wie auch im Dialog mit der Fehlermeldung “Target Runtime cannot be emtpy” angezeigt wird.
Um eine neue Server Runtime Target zu erstellen rechts neben der “Target Runtime” Auswahl auf den Button “New…” klicken um den JBoss AS 4.2 als Target Runtime zu selektieren.
In diesem Dialog werden unter zwei Ordnern JBoss AS Server Versionen angeboten. Wir verwenden “JBoss, a division of Red Hat” denn dieser wird durch die JBoss Tools mitgeliefert. Es muss natürlich die “JBoss 4.2 Runtime” selektiert werden und das Häckchen bei “Create a new local server” wird auch noch gesetzt. So ersparen wir uns später diesen Schritt.
Anschließend auf den Button “Next >” drücken. Im zweiten Schritt muss das Home Verzeichnis angegeben werden indem der JBoss AS liegt. Bei uns liegt er wie oben beschrieben unter “D:\Projekte\JBossSeam\jboss\jboss-4.2.2.GA”.
Button “Next >” drücken. Im letzten Schritt wird der Fehler “Deploy folder not specified” angeben, welcher ignoriert werden kann, denn das Deploy Directory ist ordentlich für die Default JBoss Server Instanz angegeben. Der Target Runtime Wizzard kann somit mit dem Button “Finish” beendet werden.
Man gelangt wieder in den ersten Dialog “New Seam Project” und die eben konfigurierte Target Runtime wurde angegeben. Auch der Target Server wurde durch das Setzen der Checkbox “Create a new local server” im Target Runtime Dialog unter dem Namen “JBoss 4.2 Server” erstellt und nun selektiert.
Als nächstes muss die “Dynamic Web Module version” ausgewählt werden. Wir verwenden die Version 2.5, welche wahrscheinlich auch schon vorselektiert wurde.
Die letzte wichtige Konfiguration auf diesem Dialog ist der letzte ganz unten unter “Configuration”. Dort muss “Dynamic Web Project with Seam 2.0″ selektiert sein.
Der fertig konfigurierte Dialog sieht anschließend wie folgt aus:
Mit dem Button “Next >” diesen ersten Dialog verlassen und in den nächsten Schritt gehen um das Web Modul zu konfigurieren.
In diesem zweiten Dialog “Web Module” kann angegeben werden unter welchem Context Root (Teil der Url: http://localhost:8080/
Die zweite Angabe ist das “Content Directory”. Die Default Angabe ist immer “WebContent” – ich änder das immer auf “web” ab. Aber das ist Geschmackssache. Das “Content Directory” ist im Web Projekt der Ordner unter dem die .xhtml Dateien, der /META-INF Ordner und die web.xml liegen.
Das “Java Source Directory” bleibt auf “src” und die Checkbox für “Generate deployment descriptor” ist selektiert.
Mit dem Button “Next >” diesen Dialog beenden und in den nächsten Schritt gehen um die JSF Einstellungen zu konfigurieren.
In diesem Dialog bleibt alles so wie vorgegeben.
Somit direkt mit dem Button “Next >” weitergehen um Seam zu konfigurieren.
In diesem Dialog “Seam Facet” muss die “Seam Runtime” angegeben werden wie auch die Fehlermeldung “Seam Runtime is not selected” aufzeigt.
Zuerst muss die Seam Runtime erstellt und konfiguriert werden.
Den Button “Add…” drücken um in einen Unterdialog für die Seam Runtime Konfiguration zu gelangen. In dem “Seam Runtime” Dialog den “Seam Home Folder”, also das Seam Verzeichnis, angeben. Bei uns liegt dieser neben dem JBoss AS unter “D:\Projekte\JBossSeam\jboss\jboss-seam-2.0.1.GA“.
Den Unterdialog mit dem Button “Finish” beenden.
Anschließend ist die “Seam Runtime” konfiguriert und da wir ein EAR Projekt erstellen wollen muss der EAR Radio Button noch selektiert werden.
Nachdem die Seam Runtime nun konfiguriert ist wird bemängelt, dass noch kein “Connection Profile” selektiert ist.
Um ein “Connection Profile” selektieren zu können muss erst einmal eines erstellt werden. Dazu zuerst unter “Database Type” die MySQL “MySQL 5 (InnoDB)” heraussuchen und selektieren. Anschließend neben der noch leeren “Connection Profile” Angabe den Button “New…” drücken. Es erscheint ein neuer Connection Profile Wizzard.
Darin den Connection Profile Type “MySQL” selektieren und einen Namen, z.B. “Lokale MySQL”, dafür vergeben.
Mit dem Button “Next >” in den nächsten Schritt gehen um den MySQL Treiber zu konfigurieren.
Es wird verlangt, dass man einen Treiber definiert und selektiert.
Dazu rechts neben der leeren Treiber Selektbox auf den Button (ist nur ein rundes gebliches Bild) “New Driver Definition” klicken. Anschließend im ersten Reiter “Name/Type” den Namen und Typ der MySQL angeben. Wir verwenden eine “MySQL 5.0″.
Im zweiten Reiter “Jar List” muss nun der MySQL Connector/J Treiber selektiert werden. Dazu erst den voreingetragenen Wert mit dem Button “Clear All” entfernen und anschließend mit dem Button “Add Jar/Zip” den im JBoss Default Server abgelegten MySQL Connector/J Treiber mysql-connector-java-5.1.6-bin.jar hinzufügen. Zur Erinnerung: der Treiber wurde im Projektordner im JBoss AS Verzeichnis abgelegt (D:\Projekte\JBossSeam\jboss\jboss-4.2.2.GA\server\default\lib).
Den Dialog mit “OK” beenden.
Anschließend können die Daten für die bereits eingerichtete Datenbank seamprojekt (url: jdbc:mysql://localhost:3306/seamprojekt ) angegeben (user: seamdb & pw: seam) werden.
Mit dem Button “Test Connection” kann die konfigurierte Verbindung getestet werden. Die Prüfung sollte positiv mit einer “Ping succeeded!” Meldung enden.
Wenn dem nicht so ist sollte überprüft werden ob die Datenbank generell läuft (MySQL Administrator), ob der User und das Passwort richtig vergeben sind (man kann sich z.B. mit dem MySQL Query Browser gegen die Datenbank mit dem User verbinden) und ob die Angaben in dem Dialog korrekt eingegeben wurden.
Funktioniert die Datenbankverbindung kann der Dialog mit “Finish” beendet werden.
Nun ist das Connection Profile eingerichtet und als letztes muss noch das Datenbank Schema angegeben werden. In unserem Fall heißt es wie die konfigurierte Datenbank selbst: “seamprojekt”.
Der letzte in diesem Dialog zu konfigurierende Punkt sind die Package Vorgaben für die Code Generation. Wenn das Projekt erstellt wird, werden initial einige Java Klassen erstellt. Die hier konfigurierten Package Namen werden dafür verwendet. Aber auch für die später über die verfügbaren Seam Dialoge (File->New…) erstellten Klassen werden diese Angaben hier verwendet. Aus diesem Grund sollten wir sie also richtig anpassen. Man kann als Package Namen verwenden was man möchte – ich nehme natürlich de.javathreads.helloworldseamprojekt (Java Packages sollten übrigens klein geschrieben werden).
Mein vollständiges Dialogfenster mit konfigurierter Seam Runtime, dem Connection Profile und den Package Angaben sieht nun wie folgt aus:
Den Projekt Wizzard mit dem Button “Finish” beenden.
Das “Hello Word Seam Projekt” EAR Projekt wird nun automatisch erstellt und mit allen Grundkonfigurationen versehen.
Es werden insgesamt vier Teilprojekte von den Seam Tools erstellt. Dabei sind drei für das EAR Projekt direkt relevant und das letzte ist ein Projekt für die Unit Tests.
Erstes Deployment und das berühmte “Hello World”
Nachdem nun die Entwicklungsumgebung eingerichtet ist und das Projekt scheinbar ordentlich erstellt wurde kann man es direkt auf den JBoss AS deployen. Es wurde ein lauffähiges EAR Projekt mit der Verwendung von Hibernate, Sun JSF-RI 1.2, RichFaces und Facelets erstellt und vorkonfiguriert. Das Projekt müsste eigentlich auch automatisch dem konfiguriertem JBoss Server für das Deployment hinzugefügt worden sein.
Aber es lohnt sich das noch einmal selbst kurz zu überprüfen. Um das Projekt auf dem JBoss zu deployen muss die JBoss Server View geöffnet werden. Diese sollte sogar schon sichtbar sein ansonsten über das Hauptmenü die JBoss Server View öffnen: “Windows->Show View->Other…->Server->JBoss Server View”. Um das Projekt dem Server für das Deployment bekannt zu machen mit der rechten Maustaste auf den Server klicken und “Add and Remove Projects…” selektieren.
Anschließend ist ein Dialog zu sehen in dem auf der linken Seite alle für ein Deployment verfügbaren Projekte und rechts alle Projekte die auf diesem JBoss deployt werden sollen zu sehen. In unserem Fall sieht man das HelloWorldSeamProjekt.ear und eine Datasource Konfiguration HelloWorldSeamProjekt-ds.xml. Diese Datei muss mit auf den JBoss deployt werden weil es die Datenkbankkonfiguration für unser Hello World Projekt enthält. Auf einem JBoss werden die Datenbankkonfigurationen in einem bestimmten XML Format in die Server Instanz gelegt und somit bekannt gemacht.
Der Dialog kann mit Finish beendet werden und anschließend ist das Projekt und die Datasource unter JBoss 4.2 sichtbar.
Der JBoss kann nun gestartet werden. Dazu mit der rechten Maustaste auf den JBoss 4.2 Server->Start oder den Server selektieren und den grünen runden Start Button in der Server View drücken. Unter Windows kann es passieren, dass man gefragt wird ob der Server oder Java weiterhin geblockt werden sollen aber wir erlauben natürlich die Ausführung dieser Programme.
Ist der Server einmal gestartet so steht als Status “Started”, was noch nicht bedeuten muss, dass dieser auch erfolgreich gestartet ist.
In der Console sind die Log Ausgaben des JBoss Servers zu sehen. Man sollte die Logausgaben des JBoss AS immer auf Fehler überprüfen. Dazu die Console View selektieren und einmal komplett nach oben scrollen um sich zu vergewissern, dass keine Exception während des Starts geworfen wurde.
Bei mir kam z.B. beim ersten Start folgende Exception:
org.jboss.util.NestedSQLException: Could not create connection; – nested throwable:
(java.sql.SQLException: Access denied for user ’seamdb’@'localhost’ (using password: YES));
Und Tatsächlich hatte sich in meiner Datasource Konfiguration in dem Passwort ein falsches Zeichen am Ende eingeschlichen (das PW lautet nur “seam” und nicht “seamd”). Die Datasource Konfiguration HelloWorldSeamProjekt-ds.xml befindet sich übrigens im EAR Projekt HelloWorldSeamProjekt-ear unterhalb des resources Ordner:
HelloWorldSeamProjektDatasource jdbc:mysql://localhost:3306/seamprojekt com.mysql.jdbc.Driver seamdb seamd
Das falsche Zeichen habe ich nun entfernt und den Server neu gestartet.
Nun ist dieser ohne Exceptions zu werfen, wie es auch sein sollte, hochgefahren und gestartet. Das korrekte Deployment kann in der Console nachgeprüft werden. Die letzte Zeilen sagen aus, dass das Projekt deployt wurde und der Server erfolgreich gestartet ist.
21:19:48,005 INFO [Http11Protocol] Starting Coyote HTTP/1.1 on http-localhost%2F127.0.0.1-8080
21:19:48,016 INFO [AjpProtocol] Starting Coyote AJP/1.3 on ajp-localhost%2F127.0.0.1-8009
21:19:48,022 INFO [Server] JBoss (MX MicroKernel) [4.2.2.GA (build: SVNTag=JBoss_4_2_2_GA date=200710221139)] Started in 24s:531ms
Alle deployten Anwendungen werden, wie weiter oben in dem Server Runtime Environment konfiguriert, in die JBoss Default Server Instanz deployt. Im Jboss liegen alle Anwendungen im Verzeichnis default unterhalb des JBoss Server Instanz Verzeichnisses. Unsere eben deployte Anwendung befindet sich somit im Verzeichnis D:\Projekte\JBossSeam\jboss\jboss-4.2.2.GA\server\default\deploy, wie auch der Screenshot zeigt:
Der lokale JBoss bzw. dessen Management Konsole ist per Default unter dem Port 8080 erreichbar. Mit der Adresse http://localhost:8080 gelangt man somit auf die Einstiegsseite des lokalen JBoss AS:
Und der Aufruf zu dem generierten “Hello World Seam Projekt” ist unter der URL http://localhost:8080/HelloWorldSeamProjekt erreichbar:
Als letztes fehlt uns noch zu unserem Glück der eigentliche “Hello World” Text. Dazu öffnen wir im Visual Page Editor, welcher per default für die Dateien mit der Endung .xhtml unter Eclipse verknüpft ist, die home.xhtml. Diese Datei befindet sich im Web Projekt, welches das einzige Projekt ohne Zusatz ist und als Icon eine Weltkugel über dem Ordner hat. Alternativ kann natürlich auch mit STRG-SHIFT-R der “Open Resource” Dialog geöffnet werden um die Datei zu öffnen.
Speichert man die Änderungen startet das Hot Deployment der geänderten Dateien auf den JBoss AS. Per default wird das Hot Deployment erst nach 15 Sekunden durchgeführt.
Anschließend im Browser F5 drücken oder in der Adressleiste noch einmal die URL aufrufen und das eben erstellte “Hello World” erscheint.
Fazit
Obwohl es viel und evtl. sogar kompliziert aussieht werden diejenigen, die ein solches Projekt schon einmal von Hand aufgesetzt und konfiguriert haben merken, dass es nun wesentlich schneller und einfacher ging. Vor allem für einen schnellen Einstieg in die Entwicklung eines JBoss Seam JEE5 Projektes aber auch für ein gewöhnliches Web Projekt ist dieser Weg sehr bequem.
Hat man diesen Projekt Wizzard erst einmal initial konfiguriert kann man bereits konfigurierte Teile für die Erstellung eines nächsten Projektes wiederverwenden.
Ist man erst einmal vertraut mit dem Projekt Wizzard erstellt man ein neues Projekt binnen ein paar Minuten.
Meiner Meinung nach ist der größte Vorteil der, dass verschiedenen Frameworks wie Facelets, JBoss RichFaces, JBoss Seam und JSF 1.2 RI bereits so konfiguriert sind, dass sie miteinander arbeiten. Unerfahrene Leute benötigen allein an der Konfiguration für das Zusammenspiel der einzelnen Frameworks sehr viel Zeit.
Wer mit JBoss Seam, JBoss RichFaces, Facelets oder gar JSF generell noch nicht vertraut ist sollte damit Anfangen das generierte Projekt zu erkunden und damit herumspielen. Das fängt bei der Verwendung von Facelets mit dem Template und Tags an, geht über die Verwendung der RichFaces Komponenten bis hin zu Ajax, dann kommt JBoss Seam mit seinen verschiedenen Komponenten (Authentifizierung, EntityQuery, EntityHome, Scopes) bis zuletzt zu der Verwendung von JEE 5 Technologien wie EJB 3.0 und JPA/Hibernate für die Persistierung.
Man kann allein bei dem generiertem Projekt viel lernen und ausprobieren. Viel kaputtmachen kann man nicht denn zur Not erstellt man sich das Projekt einfach schnell noch einmal neu.
Wer sich mit den Technologien auskennt sollte das Projekt nach seinem Geschmack anpassen wie z.b. das erstellen des Domänenmodells, Packages anpassen, Testprojekt aufsetzen usw..
Insgesamt sollte dieses Tutorial nur aufzeigen wie man in ein solches Projekt für JBoss Seam aufsetzen kann und mein Fazit darüber ist, dass es noch nie so einfach war ein solches Projekt zu starten bzw. sich zu erstellen.
Ich werde wohl in Zukunft noch des öfteren auf diese Tutorial Bezug nehmen – vor allem wenn ich einzelne Teile von Seam oder sonstiger JSF Entwicklung beschreiben werde.
Viel Spass 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:
- DB Schema aus JPA Entitäten mit Hilfe von Eclipse WTP und den Hibernate Tools generieren lassen
- JBoss Tools 3.0.0 GA für Eclipse Ganymede verfügbar
- Tutorial: Erstellung eines JBoss Seam Eclipse Projekt auf Tomcat Basis durch Import des JPA Beispiels
- Tutorial: Mit Java EE 6 unter Eclipse Helios und mit Maven Unterstützung starten
- JBoss Tools 3.0.0 Alpha1 – langsam geht es vorwärts
Kommentare
Hi Michael,
ich hatte erst noch einen vorletzten Abschnitt “Mögliche Fehler und deren Lösung” wo auch dieses Problem beschrieben wurde. Ich dachte aber, dass es dann doch zu viel würde.
Bei mir trat die von dir gezeigte IllegalStateException auf als ich den JBoss 4.2.3.GA (egal ob für JDK 6 oder nicht) verwendet habe. Ich nehme mal an, dass du auch den JBoss 4.2.3 verwendet hast.
In den Server Log Ausgaben müsste auch folgende Warning zu sehen sein:
Ich habe die Ursache leider bis jetzt auch nicht wirklich herausbekommen aber auch nicht weiter nachgeforscht. Es ist so, dass in dem jboss-seam.jar eine faces-config.xml besteht, die den SeamPhaseListener beschreibt und welche beim Starten deiner Seam Anwendung registriert wird.
Warum dieser aber scheinbar zweimal registriert wird ist mir auch nicht klar und konnte ich auf die Schnelle auch nicht lösen.
Ein sehr guter Artikel der beschreibt wie und was alles für eine Seam Anwendung beim Starten vom JBoss getan wird kannst du hier nachlesen – vielleicht hilft das für die Lösung.
Ich bin somit für das Tutorial auf dem JBoss 4.2.2.GA zurückgegangen, weil es mir aktuell nicht auf die JBoss Version ankam. Wenn ich Zeit habe werde ich das Problem in den nächsten Tagen noch einmal nachstellen und falls ich was herausfinde poste ich es hier auf javathreads.de.
Hallo,
erstmal Danke für Deine Anleitung! Hat alles wunderbar funktioniert.
Nun habe ich aber dennoch ein Problem: Wenn ich nun ein zweites Projekt anlegen möchte, so kann ich bei der Auswahl der Seam Runtime meine bereits angelegt Runtime nicht sehen / auswählen und ich kann auch keine neue Runtime anlegen, da die Version 2.0 nicht mehr auswählbar ist, sondern nur noch 1.2
Habt Ihr auch die selben Probleme?
Hi Sushi,
das hört sich stark danach an, dass du im ersten Wizzard Dialog “Seam Web Project” vergessen hast die gewünschte JBoss Seam “Configuration” zu selektieren. Erstellt man ein neues Projekt sind zwar der “Target Runtime”, “Dynamich Web Module version” und der “Target Server” so voreingestellt wie du das bei dem letzten Wizzard-Durchlauf selektiert hast aber leider gilt das nicht für die Seam “Configuration”. Diese ist wieder auf “Dynamich Web Project with Seam 1.2″ eingestellt. Und wenn dem so ist, kannst du später auch nur eine Seam 1.2 Runtime auswählen bzw. konfigurieren.
Du musst also im ersten Wizzard Dialog Seam Web Project” unter “Configuration” die richtige Seam Version selektieren und dann siehst du im späteren Schritt auch die bereits konfigurierte Seam Runtime für Seam 2.0.
Hoffe doch, dass das die Ursache war =)
Hallo Markus,
hab das jetzt mal de AS gewechselt. Hat wie beschrieben funktioniert. Ich hatte den 4.2.3 schon vorher installiert und bei solchen Fehlern geht man ja erst einmal eigenen Fehlern aus.
Hintergrund meiner Arbeit ist eine Diplomarbeit (evtl. Evaluation verschiedener Frameworks (Struts, Spring, Jsf, Seam, etc.))
Umsetzung eine Projektes soll dann im Framework erfolgen, welche am besten geeignet ist.
Also, ich bin für Tipps weiterhin zu haben.
Viele Grüße,
Michael
Mahlzeit,
ich danke auch für die detailreiche, gründliche Einführung. Ich hatte gerade begonnen mit mit Seam zu beschäftigen, diese Tutorial gibt einem einen guten Startpunkt.
Ich bin deinen Anweisungen ganz genau gefolgt, es trag dennoch ein Fehler auf: Deployment war okay, aber wenn man die Seite im Browser aufrief, kam die Seam-Fehlerseite mit einer Exception “Identity konnte nicht erzeugt werden” oder so ähnlich (sorry, hätte ich mir mal aufschreiben sollen). Es war dann ein Classpath-Problem mit der mvel.jar. Irgendwie wollte die nicht so wie ich :) Ich habe dann die mvel.jar aus dem seam/lib-Verzeichnis in das Deploy-Verzeichnis des Servers kopiert, dann ging es.
Und eine weitere Sache habe ich noch festgestellt: Es gibt beim Einrichten eines Servers unter Eclipse zwei Vorlagen für JBoss-Server, einmal von Eclipse selbst vorgegeben, einmal durch die Installation der JBoss-Tools. Wenn man die erste Vorlage nimmt, dann muss man die angelegte Datasource (die xxx-ds.xml) per Hand deployen.
Vielen Dank für deine Hinweise!
Das mit dem Deployen des mvel.jar war mir neu aber das mit der Datasource ist mir auch aufgefallen. Das die Datasource (xxx-ds.xml) nicht automatisch mit deployt wird kann auch mit der Server View aus den JBoss Tools vorkommen – zumindest war das bei den älteren Versionen so.
Aber man kann es relativ einfach beheben indem man die xxx-ds.xml Datei im Projektordner (HelloWorldSeamProjek-ear/resources) selektiert und aus dem Context Menü “Make Deployable” wählen. Dann wird sie beim nächsten mal mit deployt. Die Datei erscheint dann nebem dem EAR Projekt im “Add and Remove Projects” Dialog des Servers.
Man kann natürlich die DataSource auch manuell in den JBoss kopieren/deployen.
Hi,
klappt alles wunderbar, bis auf das Redeployen nach Änderungen. Wenn ich die home.xhtml ändere und nach dem Redeploy im Browser aufrufe bekomme ich folgenden Fehler in der Konsole:
14:38:23,788 INFO [Initialization] redeploying
14:38:23,788 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
at org.jboss.seam.init.Initialization.redeploy(Initialization.java:664)
at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:50)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Unknown Source)
???
Timo
Hi Timo,
leider kann ich dir da auch nicht weiterhelfen, denn ich sehe diese Exception gerade zum ersten mal. Ich hatte bisher kaum Probleme beim redeployen. Ab und an gab es zwar ein paar Probleme, diese sind allerdings nicht wiederholend aufgetreten. Diese Problem konnte ich alle durch ein neu Bauen des Projektes und das “Cleanen” des JBoss AS (aus dem Context Menü heraus aufrufen) lösen.
Vllt. hilft das ja bei auch dir.
Hallo,
danke für den ausführlichen Artikel, der ist für Anfänger wie mich eine große Hilfe! Leider konnte ich mit den Startparameter nichts anfangen. Nach Googlen weiß ich nun was die sind und was man damit steuern kann, aber leider weiß ich immer noch nicht, wie/wo ich die eingeben soll, die meisten Beschreibungen waren in Verbindung mit Linux oder ner VM, was ich nicht habe. Ich möchte das ganze auf Vista laufen lassen. Nun habe ich im C:\Projekte\JbossSeam die drei Verzeichnisse (eclipse, jboss, workspace)und die start_eclipse.bat Datei fehlt noch. Kann jemand mir dabei weiterhelfen, wie und wo die Startparameter eingeben soll?
Danke im Voraus
Hi Salsaid,
die Startparameter gibt man Eclipse (unter Windows der eclipse.exe) mit. Man könnte also auch Eclipse direkt aufrufen und die Parameter, wie z.B. die Workspace Angabe direkt mitgeben. Das sähe dann für deine Struktur wie folgt aus:
Da man nicht immer bei jedem Start von Eclipse alle Parameter händisch angeben möchte empfiehlt es sich den Aufrufe von Eclipse samt Startparameter in die start_eclipse.bat zu schreiben und diese wiederzuverwenden.
Das ganze geht aber auch relativ wenn deine start_eclipse.bat z.B. im Verzeichnis “C:\Projekte\JbossSeam\” liegt:
Setzt du noch unter Windows ein “START” vor die Zeile schließt sich auch die DOS-Box des Aufrufs direkt wieder:
Den Workspace könnte man auch noch ohne expliziten Startparameter angeben aber viel wichtiger sind die Angaben für den zu reservierenden Speicher. Ein generelles Problem bei dem “Hot Deployment”, also dem neuen Deployen eines WARs oder eines EARs in einen laufenden JBoss, ist, dass Eclipse nach mehrmaligem durchführen eines Hot Deployments nicht mehr genügend Speicher besitzt und mit einem “out of perm gen space” Fehler (OutOfMemoryException) abstürzt. Aus diesem Grund sollte man Eclipse direkt beim Start mit Hilfe von Startparametern eine Menge an Speicher reservieren:
Hat man nicht soviel Speicher zur Verfügung empfiehlt JBoss als Minimalkonfiguration folgende Angaben:
Lässt man diese Angaben weg soll man wiederkommen wenn man die erste OutOfMemoryException erhält, sagt die JBoss Doku ;).
Nachlesen kann man das auch in der offiziellen JBoss Seam Doku Kapitel 2.1 “Before you start”.
Das Problem ist kein spezielles Seam Problem sondern liegt wohl an der JVM und hat man auch bei anderen Hot Deployments, wie zum Beispiel eines WARs auf einen Tomcat. Es empfiehlt sich daher immer mit diesen Speicherangaben zu arbeiten.
Hoffe die Erklärung hilft.
Hallo Markus!
Ich habe dieses Tutorial befolgt und bleibe leider beim Punkt “Deployment Angaben für den JBoss überprüfen” stecken.
Die Datasource Konfiguration HelloWorldSeamProjekt-ds.xml ist bei mir nicht vorhanden. Diese xml-Datei ist zwar unter ressource im workspace drinnen aber unter dem deploy Ordner erscheint es nicht genauso wenig in der JBoss Server View.
Ich hab versucht die Applikation trotzdem zu starten jedoch kommt dann ein Fehler: “Could not instantiate Seam component: org.jboss.seam.security.identity”.
Könntest du mir dabei weiterhelfen?
Liebe Grüße und danke für dieses Tutorial!
Rejo
Ich habe das eben nochmal im Artikel überprüft und festgestellt, dass der Satz wie man die fehlende Datasource hinzufügen kann nicht mehr vorhanden ist. Ursprünglich hatte ich den mal drin – warum auch immer ich den damals wieder entfernt habe..
Also die Lösung ist relativ einfach: Selektiere die HelloWorldSeamProjekt-ds.xml mit der rechten Maustaste und selektiere “Make Deployable” aus dem Kontextmenü.
Leider ist es so, dass manchmal die Datasource nicht mit zu den zu deployenden Resourcen hinzugefügt wird. Aber mit Hilfe dieses dieses Kontextmenüeintrages kannst du jede beliebige Resource in den JBoss deploy Ordner von Eclipse aus direkt deployen.
Diese Funktion ist aber nicht zu verwechseln mit der “Redeploy” Funktionalität. Man kann damit keine Java, .xhtml oder sonstige Datei “Redeployen” oder “Hot-Deployen”.
Ich füge diesen Hinweis mit der fehlenden Datasource in den Abschnitt “Deployment Angaben für den JBoss überprüfen” hinzu. Vielen Dank für den Hinweis =)
Danke für die Anleitung – ich hab aber leider das Problem, dass ich einerseits, nachdem ich das Projekt generiert hab jede Menge Errors kriege, weil die seam libs fehlen – das lässt sich ja relativ leicht beheben, wenn ich dann aber das Projekt teste sieht es soweit ganz gut aus, nur wenn ich auf Login klicke, und versuche mich einzuloggen bekomme ich folgende Exception: “Target Unreachable, identifier ‘authenticator’ resolved to null”.
Dasselbe passiert auch, wenn ich versuche weitere EJB’s zu implementieren und verwenden …
Irgendeine Idee woran das liegen könnte??
Danke
Michael
Hi Michael,
Der fehler “Target Unreachable” ist ein genereller Fehler und hat nicht direkt etwas mit deinem Authenticator zu tun. Die Fehlermeldung
und bedeutet, dass unter dem Namen authenticator kein Objekt im Context gefunden wurde. Dass kann dir also auch passieren, wenn du z.B. eine Action Methode von einem Command Button aus aufrufen möchtest, aber die Komponente nicht im Context liegt und somit auch nicht gefunden wird:
<h:commandButton action="#{userHome.remove}" value="User löschen" />
Lässt sich keine userHome Seam Komponente finden schlägt genau dieser “Target Unreachable” Fehler auf.
Für deinen speziellen Fall, dem Authenticator, hast du in der components.xml konfiguriert wo die Methode zum authentifizieren zu finden ist:
<security:identity security-rules="#{securityRules}"
authenticate-method="#{authenticator.authenticate}" remember-me="true"/>
Und jetzt benötigst du noch eine Seam Komponente mit dem Namen “authenticator”:
@Name("authenticator")
public class Authenticator
{
...
public boolean authenticate() {
...
}
}
Und genau diese wird bei dir nicht gefunden. Entweder hast du keine solche Seam Komponente mit diesem Namen erstellt oder es ist dir ein Tippfehler im Namen passiert. Du solltest auch nochmal die Angaben in der components.xml überprüfen.
Bei einem generiertem Projekt sollte eine Klasse Authenticator.java im Package session vorhanden sein aber da scheint bei dir ja generell was schief gelaufen zu sein.
Hoffe, dass dir diese Hinweise helfen.
Danke für die rasche Antwort – hab jetzt nach einiger Herumsucherei – folgende Lösung gefunden:
Wenn man die EJBs mit
@Scope(ScopeType.SESSION)
annotiert funktioniert alles.
Michael
Es müsste allerdings auch ohne eine Scope Angabe funktionieren. Per Default sind alle Seam Komponenten ohne explizite Angabe im Event Scope.
Ich habe eben nochmal die Debug Seite für die “authenticator Komponente aufgerufen und mich vergewissert ob diese spezielle Komponente auch im Event Scope liegt und das wurde bestätigt.
Aufrufen kannst du diese Komponenteninformation mit dem Link:
http://localhost:8080/ProjektWebContextName/debug.seam?name=authenticator.component
Warum es somit bei dir nur mit dem Session Scope funktioniert ist mir nicht ganz klar.
Es dürfte doch nicht am Session-Scope gelegen sein, ich hab ihn nämlich jetzt wieder entfernt und zur Sicherheit auch ein neues Projekt ohne Scope angelegt – dort geht’s jetzt auch.
Kann es vielleicht an den Libs liegen?
Was ich auch noch geändert hatte, gegenüber meiner erfolglosen Versuche ist die Einbindung der SEAM Libs.
Im Tutorial scheint das ja nirgends auf, bei mir ist es aber so, dass ich, wenn ich ein neues Projekt wie oben beschrieben generiere, Fehler im generierten Authenticator habe, weil er “org.jboss.seam” nicht importieren kann.
Wenn ich dann alle “jboss-seam-xx.jar” – Dateien als User-Lib einbinde klappt es. Vorher hatte ich alle Seam – Libs als externe Jars eingebunden.
Gibts da irgendeinen Automatismus, so dass man die Libs nicht händisch hinzufügen muss??
Danke für das Tutorial – es hat mir wirklich schon viel geholfen!
lg
Michael
Irgendetwas läuft bei deiner Generierung grundsätzlich schief. Wenn du auf dem ersten Dialog des Projektwizzards bist musst du eine Konfiguration auswählen (siehe auch Erster Wizzard Dialog “Seam Web Project”->JBoss Seam Configuration selektieren). Wird eine Konfiguration gewählt, die das Seam Facet nicht selektiert hat kannst du eigentlich nicht weiter und der Fehler “Seam facet must be enabled” erscheint.
Durch diese Konfiguration musst du auf eine “Seam Runtime” verweisen aus der beim Generieren die Seam Libs in das Projekt kopiert werden. Das jboss-seam.jar wird somit in das EAR Projekt unter das Verzeichnis EarContent kopiert. Dort sollte es also automatisch nach dem Generieren liegen.
Ich habe eben mal schnell ein Testprojekt erstellt und hatte mit den SeamTools Nightly Build von vorgestern auch den gleichen Effekt, dass die “org.jboss.seam” nicht im Classpath gefunden werden.
Ob die notwendige Seam Lib (jboss-seam.jar) grundsätzlich im Classpath verfügbar sein sollte kannst du über die Eigenschaften des EJB Projektes erfahren. Dort auf “Java EE Module Dependencies” klicken und du müsstest das jboss-seam.jar selektiert sehen:
Ich hatte bei dem Test Projekt auch das Problem, dass alle Klassen im Package “org.jboss.seam” nicht gefunden wurden und es somit Compile Fehler gab.
Beheben konnte ich dieses Verhalten indem ich in den “Java EE Module Dependencies” das jboss-seam.jar deselektiert und anschließend das Eigenschaften Fenster verlassen habe. Das Projekt wird nach dem Schließen des Fensters neu gebaut/compiliert. Nun wieder in die Eigenschaften gehen und das jboss-seam.jar wieder selektieren. Nachdem erneuten Schließen der Eigenschaften und dem anschließendem neuem Compile-Vorgang waren sämtliche Compile Fehler verschwunden.
Ich habe gestern Abend auch an einer anderen Stelle (Konfigurieren der Datenbankverbindung für die Hibernate Tools) auch ein merkwürdiges Verhalten festgestellt und gehe davon aus, dass es an der aktuellen Beta/Nightly Build Version der JBoss Tools liegt.
Hallo Markus,
danke für das ausführliche Tutorial.
Ich habe leider an einer Stelle ein Problem, wobei ich glaube es liegt eher an meinem Eclipse. Ich konnte aber nirgendwo Hilfe dazu finden.
Also ich will diese HelloWorldProjekt erstellen, aber im Fenster ‘Seam Facet’ kann ich kein MySQL-Connection Profile erstellen, unter ‘New’ wird nur das ‘Generic JDBC’ angezeigt. Ich kann nicht MySQL oder noch was anderes anwählen.
Kannst du mir da weiterhelfen?
LG, Thomas
@Thomas: ja bei meinem ganymede war auch kein mysql treiber dabei. aber den hast du ja nach tutorial anleitung schon runtergeladen. du kannst einen neuen treiber bei dem wizard ja installieren. eclipse stellte sich bei mir da etwas komisch an, aber nachden ich den treiber ins eclipse/plugin verzeichnis kopiert hatte und es noch einmal probierte, konnte ich den treiber hinzufügen. falls dus nicht hinbekommst, versuch ich meine schritte noch einmal nachzuvollziehen..
Ich bekomme leider folgenden Fehler beim “Finish” im Projektwizard.
Failed while installing Dynamic Web Module 2.5
Reason:
Failed while installing Dynamic Web Module 2.5
Details:
java.lang.NullPointerException
Habe den Wizard genau so durchlaufen mit JBoss 4.2 Redhat Runtime. MySQL Connection läuft auch. Aber der Wizard kommt ja anscheinend garnicht soweit. Habe es ebenfalls mit jboss-seam-2.1 versucht aber mit dem selben Resultat. Hat jemand eine Idee?
Environment:
Windows XP SP2
eclipse-SDK-3.4.1-win32
JBossTools Developement Release 3.0.0.CR1
jboss-4.2.2.GA
jboss-seam-2.0.2.SP1
mysql-connector-java-5.1.7
Hallo Markus,
da Du letztes Mal auch sofort die richtige Antwort wusstest, dachte ich ich frage hier nochmal:
Habe mein System neu aufgesetzt und somit auch Eclipse und Co. Nun habe ich alles wie oben beschrieben installiert (nur mit dem Unterschied, dass ich Seam 2.1 verwendet habe) und meine alten Projekte die liefen in Eclips eimportiert. Will ich nun JBoss starten, so bekomme ich immer folgenden Fehler:
ERROR [SchemaValidator] could not get database metadata
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown table ’system_sequences’ in information_schema
Das hatte ich vorher nicht. Auch ein Wechsel auf Seam 2.0.2 brachte keinen Erfolg :-( Die Tabelle gibt es übrigens in der MySQL Instantz tatsächlich nicht, gab es vorher aber auch nicht….
Irgend eine Idee?
LG, Sushi
Hi Sushi,
den Fehler selbst hatte ich noch noch nicht aber das hört sich danach an, dass dein JBoss irgendwie auf eine HSQL DB zugreifen oder ein SQL Statement für die HSQL DB ausführen möchte.
Schau mal in deine Datasource Beschreibungen (*-ds.xml) die in deiner JBoss Server Instanz liegen ob dieses Element so konfiguriert ist:
Denn dieses Statement ist nur für eine HSQL gültig.
Für eine MySQL müsste die Zeile so heißen:
Vielleicht hilft dir diese Info… Ansonsten viel Erfolg beim suchen ;)
Hallo,
vielen Dank für das ausführliche Tutorial. Ich habe dieses mit dem neuestem Seam (2.1.0.SP1) ausprobiert und es funktioniert auch soweit – keine Fehler im Logfile und die Webseite erscheint erwartungsgemäß.
Wenn ich nun jedoch versuche “New->Generate Entities…” auszuführen, findet er scheinbar die DataSource nicht mehr.
Verwunderlich, da sonst alles funkionierte.
Klicke ich in dem Wizard auf Database schema->”refresh” erscheint die Meldung:
Hat jemand eine Ahnung woran das liegen kann ?
(die *ds-.xml Datei ist erfolgreich deployed)
Gruß,
Thorsten
sorry, die Fehlermeldung ist in obigen Text “verlorengegangen”.
Diese Meldung erscheint bei einem Database Schema-refresh:
“”
;-) – da sich der Fehler innerhalb von eckigen spitzen Klammern befunden hat wurde er während des Rendering scheinbar schon wieder “verschluckt” – also die Meldung heißt einfach “Couldn’t connect to database”. Sorry noch einmal für die Verwirrung !!!
Hi Thorsten,
Das mit der Verwirrung macht nichts. Ich sollte für die Kommentare mal eine “live Vorschau” einbauen, damit man sieht ob der Text den man eingibt auch ausgegeben wird. Nun zu deiner Frage:
Selbst habe ich das Generieren der Entitäten aus einer bestehenden DB noch nicht ausprobiert aber ein erster Blick auf diesen “Generate Seam Entities” zeigt mir, dass du hier nicht die *-ds.xml Datasource Beschreibung benötigst sondern eine gültige hibernate-console.properties Datei.
Diese muss im -ejb Projekt vorhanden und korrekt sein. Am besten du probierst deine Hibernate Konfiguration erst einmal mit dem Hibernate Tools aus denn so kannst du sicher sein, dass die Angaben darin auch stimmen. Ich würde mal vermuten, dass dort einfach die Datenbankkonfiguration nicht stimmt und du deswegen die Fehlermeldung “Couldn’t connect to database” erhälst.
Ich habe diesen Fehler übrigens auch eben bei meinem Test gesehen allerdings war mein MySQL Dienst noch nicht gestartet ;).
Wenn ich manuell einen Fehler (z.b. falsches Passwort) angegeben habe dann erhalte ich auch den “Couldn’t connect to Database”.
Meine hibernate-console.properties mit der das funktioniert hat sieht so aus (mit einer MySQL DB):
hibernate.connection.password=mypw
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
hibernate.connection.url=jdbc:mysql://localhost:3306/dbschema
hibernate.connection.provider_class=org.hibernate.connection.DriverManagerConnectionProvider
Viel Erfolg!
Hallo Markus,
das mit der Hibernate Konfiguration war ein guter Tipp. Beim Wechsel in die Hibernate Perspektive bekam ich eine Fehlermeldung, daß der Datenbank Treiber nicht geladen werden konnte.
Ein kurzer Blick in die log Datei genügte um zu sehen, daß er mit dem Pfad nicht zurechtkam. Der Pfad enthielt Leerzeichen. Ein Ändern des Pfades (jetzt ohne Leerzeichen) löste das Problem…
Vielen Dank!!
Hallo,
ich hänge gerade an folgender Fehlermeldung:
— MBeans waiting for other MBeans —
ObjectName: jboss.j2ee:service=EJB3,module=HelloWorldSeamProjekt-ejb.jar
State: FAILED
Reason: java.lang.RuntimeException: Interceptor class not found: org.jboss.seam.ejb.SeamInterceptor
— MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM —
ObjectName: jboss.j2ee:service=EJB3,module=HelloWorldSeamProjekt-ejb.jar
State: FAILED
Reason: java.lang.RuntimeException: Interceptor class not found: org.jboss.seam.ejb.SeamInterceptor
Muss ich noch was einbinden?
Vielen Dank
Hi,
die Klasse ist im jboss-seam.jar, welches du in dein Projekt eingebunden haben solltest. Das jar liegt im ear Projekt im Ordner “EarContent” und sollte, wenn du auf die Eigenschaften deines EJB-Projektes gehst unter “Java EE Module Dependencies” gelistet und selektiert sein. Schau dir dazu auch mal die Erklärung und den Screenshot aus dem Kommentar vom 22.10. an – vielleicht löst sich dein Problem ja auch dadurch.
Hi,
I also had the exception: “Unknown table ’system_sequences’ in information_schema”. The problem is the selected Hibernate dialect: is using “org.hibernate.dialect.HSQLDialect” instead of “org.hibernate.dialect.MySQL5InnoDBDialect”. Look to the persistence.xml file in your META-INF folder.
This is a “bug” of the Seam Wizard: when you choose a “Connection profile” you must also choose a matching “Database Type”.
I had exactly the same problem an this was caused in the misconfigured database type (see chapter Vierter Wizzard Dialog “Seam Facet” – part “Connection Profile”. In this wizzard step you have to configure the right database. Otherwise the wizzard will generate the wrong database type an your described exception “Unknown table ’system_sequences’ in information_schema” will be thrown.
Thank you very much for this hint!
Hallo Markus,
vielen Dank für das gute Tutorial. Bei mir traten keinerlei Fehler auf. Muss auch mal gesagt werden :-)
Grüße
Benedikt
Was mich auch sehr freut zu hören – im Normalfall sollte es ja auch ohne Probleme laufen. Daher habe ich ja versucht das so ausführlich wie möglich zu erläutern.
Aber dennoch schön das mal zu lesen =).
Hallo gabel:
Auch bekomme nach Abschluß des Wizards eine ähnliche Meldung wie du:
Failed while installing JavaServer Faces 1.2
Reason:
Failed while installing JavaServer Faces 1.2
Details:
java.lang.NullPointerException
Die gleiche Meldung kommt, wenn ich danach versuche über
Project->Properties->Project Facets “Dynamic Web Project with Seam 2.1″ aauswähle.
Kann jemand helfen?
[...] habe ich das ganze Geraffel unter Mac OS-X Leopard installiert und mich dabei von dieser Anleitung hier inspirieren [...]
Vielen Dank für das Tutorial. Ich bin totaler Seam-Newcomer und habe es auch gleich einmal ausprobiert. Nun wollte ich einmal im Eclipse im WebContent eine neue “test.xhtml” anlegen und mittels den navigation-rules aus der pages.xml darauf umleiten, das endete in Fehlermeldungen.
…woran liegt das…oder bin ich nur zu blöd?
@Hamza:
Man kann Seam auch ohne einen Application Server (JBoss) verwenden. Empfohlen wird dabei JBoss Embedded zu verwenden. In der Referenzdokumentation wird beschrieben wie man die Beispiele auf dem Tomcat zum laufen bekommen aber auch wie man den Embedded JBoss installiert (http://docs.jboss.com/seam/2.1.1.GA/reference/en-US/html/configuration.html#d0e23941).
@Thommy:
Eine Fehlermeldung wäre nicht schlecht. Die Frage ist auch von wo du “umleiten” möchtest. In JSF (und Seam) basiert alles auf Actions die du definierst. Hast du zum Beispiel in der home.xhtml einen <s:link action=”myActionEvent” .. definiert kannst du in der pages.xml die Navigationsregel wie folgt konfigurieren:
<page view-id="/home.xhtml">
<navigation from-action="myActionEvent">
<redirect view-id="/test.xhtml"/>
</navigation>
</page>
Hi,
bis zum letzten schritt funktioniert alles einwandfrei.
Wenn ich jedoch
http://localhost:8080/HelloWorldSeamProjekt/
aufrufe kommt folgende exception
java.lang.NullPointerException
at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25)
at com.sun.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:95)
at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:524)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:567)
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:68)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
COMPONENT TREE
kann mir hier jemand weiter helfen?
habe ich etwas übersehen?
Mir sagt die Exception nicht wirklich was. Startet denn der JBoss vor dieser Exception ohne Probleme? Schau dir mal den Console Log an und schau ob vorher schon Exceptions auftreten.
[...] Mein Beispielprojekt ist in der für Eclipse normalen JEE Projektstruktur erstellt worden (mit dem Seam Web Project Wizzard): [...]
Das tutorial fand ich toll, nur eine Frage. Wie mache ich es, wenn ich ejb verwenden möchte. Weil nach dem ich alles geniert habe und dann ein session Bean im entsprechende package implementiere. Bekomme ich einen Fehlermeldung beim Starten von Jboss. Ich würde mich sehr freuen, wenn jemad einen Vorschlag für mich hätte.
Ohne eine genauere Fehlermeldung kann man nur raten wo das Problem liegt. Generell brauchst du für deine EJB Session Bean auch ein Local oder Remote Interface (@Local oder @Remote. An die Bean selbst muss dann natürlich auch @Stateless. Jetzt hast du schon deine Stateless Session Bean. Auch dein Projekt sollte ohne Probleme im JBoss starten. Soll diese EJB als Seam Komponente bekannt gemacht werden muss nun nur noch @Name zusätzlichen neben @Stateless verwendet werden.
All das sollte ohne Probleme funktionieren und du verwendest eine Session Bean.
Falls das nicht hilft wäre die Fehlermeldung hilfreich.
Gruß
Markus
Hallo,
also was ich mache ist das in diesem Tutorial erzeugte Projekt ein bisschen zu ändern und zwar ändere ich die Klasse Athetificator, indem ich die Annotationen @Stateless und @Remote einfüge und dann eine interface IAthetificator dann bekomme ich das hier:
ERROR [MainDeployer] Could not initialise deployment: file:/C:/Users/Rodo/workspace/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_4.2_Server/deploy/hallowelt-ear.ear/
org.jboss.deployment.DeploymentException: No META-INF/application.xml found
at org.jboss.deployment.EARDeployer.init(EARDeployer.java:146)
at org.jboss.deployment.MainDeployer.init(MainDeployer.java:872)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:809)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
at $Proxy9.deploy(Unknown Source)
at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634)
at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)
at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:274)
at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:225)
Diese Meldung muss nicht zwingend etwas mit deinen Änderungen zu tun haben. Ab und an erscheint die Meldung bei mir auch – vor allem wenn ich Eclipse neu gestartet habe. In diesem Fall entferne ich die EAR Projekte aus dem JBoss Deploy Verzeichnis, fahre den JBoss “leer” hoch (es sollten keine Fehlermeldungen auftreten), baue dann meine Projekte neu und deploy diese wieder in dem JBoss.
Ansonsten solltest du natürlich sicher gehen, dass die application.xml auch wirklich in deinem EAR Projekt (..-ear) unter /EarContent/META-INF/ zu finden ist.
Startet denn der JBoss ohne Probleme wenn du die EJB Annotationen weglässt?
Hallo Markus,
dein Tutorial ist echt gut. Ich habe nun probiert, das ganze mit ICEfaces zu erstellen, aber das scheint mir extrem schwer zu sein. Habe auch schon die verschiedensten Variationen getestet. Bin ganz schön am verzweifeln. Es wäre super wenn du mir einen Tipp geben könntest!
Gruß Ralph
Halllo Ralph,
leider kann ich dir im Bezug auf die ICEfaces nicht weiterhelfen. Ich habe sie 2007 mal ausprobiert aber damals auch nicht wirklich zum laufen gebracht. Allerdings sollte die Integration heute doch wesentlich einfacher sein.
Seam bietet doch an die ICEfaces anstatt RichFaces zu verwenden. Sind denn in diesem Fall die ICEfaces nicht schon fertig vorkonfiguriert und können einfach verwendet werden?
Weiterhin viel Erfolg!
Gruß Markus
Hallo,
tolle Tutorial.. Ich habe jetzt geschafft, ein Seam Portlet in JBoss zu zeigen.. Danke..
Aber leider habe ich komischer noch nicht geschafft, Connection mit locale MySQL zu machen.
Ping failed !!!
so zeigt es.
Woran liegt es?
Es können mehrere Gründe dafür verantwortlich sein: MySQL läuft generell nicht, Datenbank nicht erstellt, Username oder PW falsch oder noch gar nicht eingerichtet, zu wenig Rechte vergeben oder falschen MySQL Treiber angegeben/verwendet.
Der Ping im Eclipse Dialog sollte auf alle Fälle gehen – ganz unabhängig vom JBoss.
Alternativ kannst du auch erst einmal versuchen dich mit den MySQL GUI Tools (Administrator, Query Browser, ..) zu verbinden um sicherzustellen, dass die DB läuft und du dich mit dem gewünschten Benutzer anmelden kannst.
Hallo,
super Tutorial, funktioniert auch wunderbar mit JBoss 5 und Seam 2.1 ! Würde mich auch über weitere Tutorials freuen, z.b. Seam Grundlagen, Nutzen der DB , EJB usw .. bzw. hast du evtl weiterführende Links zum Thema ?
Hallo Stefan,
danke für die Info mit dem JBoss 5.
Ich habe damals mit den von JBoss Seam mitgelieferten Beispielen angefangen zu lernen die erstaunlicherweise recht gut gemacht und dokumentiert sind. Schau dir dazu mal Kapitel 1 der Referenzdokumentation an. Vor allem das Hotel Booking Beispiel, welches man wie alle anderen auch deployen und sich anschauen kann.
Zu weiteren Tutorials: ich habe sogar schon weitere angefangen diese aber bisher noch nicht ganz fertig gestellt. Folgende Titel habe zur Auswahl:
- Einfache CRUD Anwendung mit JBoss Seam
- Authentifizierung mit JBoss Seam
- Internationalisierung in JBoss Seam
- JSF Converter und Validierer unter JBoss Seam
- @Factory und kontextuelle Injection mit JBoss Seam
Diese habe ich eben auf die Schnelle unter meinen Entwürfen gefunden. Ich sollte mich wirklich mal dran machen und das ein oder andere Tutorial fertigstellen..
Wenn dich eins besonders interessiert hast du die Chance, dass dieses demnächst tatsächlich online geht =). Ansonsten muss ich schauen wie es die Zeit hergibt.
Hallo Markus,
Danke für den Link der ist sehr gut. Aber leider habe ich schon Probleme beim testen der mitgelieferten Beispiele. Wenn ich das Hotel booking Bsp. deploye ist noch alles ok, beim Versuch mich dann unter http://localhost:8080/seam-booking/home.seam einzuloggen bekomme ich: ERROR [SeamLoginModule] Error invoking login method org.jboss.seam.InstantiationException: Could not instantiate Seam component: authenticator
Caused by: javax.naming.NameNotFoundException: AuthenticatorAction not bound at org.jnp.server.NamingServer.getBinding(NamingServer.java:529) ….
Habe verschiedene JBoss Versionen getestet (4.2.3 und 5.0), hast du eine Idee warum er die Seam Komponente nicht findet? An dem Beispiel habe ich nichts verändert ..
Hallo Markus,
ich habe große Probleme beim Installieren der JBoss Tools in die Eclipse. Es dauert ungewöhnlich lange, ohne dass der Fortschrittsbalken sich bewegt, und zu guter Letzt kriege ich diesen Fehler:
An error occurred while collecting items to be installed
Error closing the output stream for org.mozilla.xulrunner.win32.win32.x86/osgi.bundle/1.8.1.3-20070904 on repository file:/C:/JBossSeam/eclipse/.
Error unzipping C:\DOKUME~1\R002375\LOKALE~1\Temp\org.mozilla.xulrunner.win32.win32.x86_1.8.1.3-200709044300710104039104010.jar: Invalid zip file format
Wenn ich in diesem Temp-Verzeichnis nachschaue, hat die angemeckerte jar-Datei eine Größe von 4kB, lässt sich aber nicht mit Winzip öffnen. Das Verzeichnis enthält auch noch zahlreiche andere jar-Dateien, deren Name mit “org.jboss.tools” beginnt und die leer sind.
Hast Du eine leise Ahnung, was bei mir schief läuft?
Danke und Gruß
Christian
Ich habe dieses Problem in der Console gefunden:
Kann mir nicht erklären was das bedeutet.b Muss etwas nachinstalliert werden?
…
[ServletContextListener] Welcome to Seam 2.2.0.GA
01:11:08,497 WARN [PersistentPermissionResolver] no permission store available – please install a PermissionStore with the name ‘org.jboss.seam.security.jpaPermissionStore’ if persistent permissions are required.
01:11:08,591 WARN [HDScanner] Failed to process changes
org.jboss.deployers.client.spi.IncompleteDeploymentException: Summary of incomplete deployments (SEE PREVIOUS ERRORS FOR DETAILS):
Super Tutorial, mit gefällt der Schreibstil als auch die
detaillierte Beschreibung mit Hilfe von Screenshots :-)
Allerdings landet bei mir das deployte Projekt nicht unter
…/server/default/deploy/
sondern unter
…/server/default/tmp/5c4o1b-ppm668-g1l0i7si-1-g1l0k0hd-9o
Kann das daran liegen, dass ich neuere Versionen der
diversen Programme installiert habe (JBoss, JBoss-Seam,
MySQL usw…)?
Und ich habe auch das gleiche WARNING wie metron:
WARN [PersistentPermissionResolver] no permission store available – please install a PermissionStore with the name ‘org.jboss.seam.security.jpaPermissionStore’ if persistent permissions are required.
@metron & @egal:
In meinem Log steht auch die Warning “WARN [PersistentPermissionResolver] no permission store available” und sofern man einfach nur die normale rollenbasierte Security verwendet kann man die Warnung ignorieren. Ich habe versucht sie mal auszublenden aber wenn man in den Seam Code an die entsprechenden Stellen schaut wird man merken, dass man nicht um die Warnung herum kommt. Also einfach ignorieren – ist zwar unschön aber geht wohl (vorerst) nicht anders.
@metron:
Deine zweite Warnung muss sich auf etwas anderes beziehen. Du solltest in deinem kompletten Log mal schauen ob noch etwas anderes außer der PersistentPermissionResolver Meldung als WARN oder ERROR ausgegeben wurde.
@egal:
Der JBoss kopiert sich die deployte Anwendung in den tmp Ordner. Normalerweise sollte einen das nicht weiter interessieren und es ist normal, dass man seine eigene Anwendung dort noch einmal wiederfindet. Ich schätze mal, dass du aus deinen JBoss aus Eclipse heraus gestartet hast. In diesem Fall ist die Default Einstellung, dass Eclipse deine Anwendung nicht in das deploy Verzeichnis deployt/kopiert sondern ein Verzeichnis unterhalb des Eclipse Plugin Verzeichnis verwendet. Du bekommst heraus wohin deployt wird wenn du dir in der Server View mit einem Doppelklick auf die Server Runtime schaust was unter “Deployment” eingestellt ist. Dort kannst du auch konfigurieren, dass in das “/server/default/deploy/” Verzeichnis deployt werden soll.
@Markus
Ok danke ich hab in der “JBoss Server View” Doppelklick
auf “JBoss 5.1 Runtime Server” gemacht. Es öffnet sich
folgendes Fenster:
Irgendwie finde ich dort aber leider nicht die
Einstellung für das deploy Verzeichnis =/
Und dann habe ich noch ein anderes Problem,
ich habe mit “ant explode” mal zwei der
Beispiele aus jboss-seam-2.2.0.GA\examples
ausprobiert, die starten auch einwandfrei am
Ende über den localhost Aufruf im Browser.
Komischerweise deployt jetzt aber mein SeamTest
Projekt nicht mehr, obwohl ich daran gar nichts
geändert habe :(
Selbst wenn ich das Projekt komplett lösche und
wieder neu erstelle bekomme ich folgenden Fehler,
mit dem ich leider gar nichts anfangen kann :(
Kann es sein das das deployen der zwei Beispielprojekte
irgenwas im JBoss Server umkonfiguriert hat, sodass
ein Start aus Eclipse heraus jetzt nicht mehr
funktioniert?
20:26:17,883 INFO [TomcatDeployment] deploy, ctxPath=/SeamTest
20:26:17,943 INFO [config] Initializing Mojarra (1.2_12-b01-FCS) for context ‘/SeamTest’
20:26:19,995 INFO [ServletContextListener] Welcome to Seam 2.2.0.GA
20:26:22,565 ERROR [[/SeamTest]] Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener
java.lang.RuntimeException: error while reading /WEB-INF/components.xml
at org.jboss.seam.init.Initialization.initComponentsFromXmlDocument(Initialization.java:232)
at org.jboss.seam.init.Initialization.create(Initialization.java:134)
at org.jboss.seam.servlet.SeamListener.contextInitialized(SeamListener.java:36)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3910)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4393)
at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:310)
at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142)
at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461)
at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118)
at org.jboss.web.deployers.WebModule.start(WebModule.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)
at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206)
at $Proxy38.start(Unknown Source)
at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:42)
at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:37)
at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.system.microcontainer.ServiceControllerContext.install(ServiceControllerContext.java:286)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
at org.jboss.system.ServiceController.doChange(ServiceController.java:688)
at org.jboss.system.ServiceController.start(ServiceController.java:460)
at org.jboss.system.deployers.ServiceDeployer.start(ServiceDeployer.java:163)
at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:99)
at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:46)
at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62)
at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1178)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1210)
at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781)
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702)
at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)
at org.jboss.system.server.profileservice.hotdeploy.HDScanner.scan(HDScanner.java:362)
at org.jboss.system.server.profileservice.hotdeploy.HDScanner.run(HDScanner.java:255)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source)
at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Exception setting property org.jboss.seam.core.init.jndiPattern on component org.jboss.seam.core.init. Expression @jndiPattern@ evaluated to null.
at org.jboss.seam.init.Initialization.installComponentFromXmlElement(Initialization.java:533)
at org.jboss.seam.init.Initialization.installComponentsFromXmlElements(Initialization.java:369)
at org.jboss.seam.init.Initialization.initComponentsFromXmlDocument(Initialization.java:228)
… 67 more
Caused by: java.lang.IllegalArgumentException: null value
at org.jboss.seam.util.Conversions$FlatPropertyValue.(Conversions.java:291)
at org.jboss.seam.init.Initialization.getPropertyValue(Initialization.java:610)
at org.jboss.seam.init.Initialization.installComponentFromXmlElement(Initialization.java:528)
… 69 more
20:26:22,567 ERROR [StandardContext] Error listenerStart
20:26:22,567 ERROR [StandardContext] Context [/SeamTest] startup failed due to previous errors
20:26:22,580 ERROR [AbstractKernelController] Error installing to Start: name=jboss.web.deployment:war=/SeamTest state=Create mode=Manual requiredState=Installed
org.jboss.deployers.spi.DeploymentException: URL file:/C:/Users/Chris/Dateien/Projekte/Active/WorkspaceEclipse/TU-Berlin/Diplom/jboss/jboss-5.1.0.GA/server/default/tmp/5c4o1a-s16wcl-g1s724yd-1-g1s732zs-9w/SeamTest-ear.ear/SeamTest.war/ deployment failed
at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:331)
at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142)
at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461)
at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118)
at org.jboss.web.deployers.WebModule.start(WebModule.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)
at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206)
at $Proxy38.start(Unknown Source)
at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:42)
at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:37)
at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.system.microcontainer.ServiceControllerContext.install(ServiceControllerContext.java:286)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
at org.jboss.system.ServiceController.doChange(ServiceController.java:688)
at org.jboss.system.ServiceController.start(ServiceController.java:460)
at org.jboss.system.deployers.ServiceDeployer.start(ServiceDeployer.java:163)
at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:99)
at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:46)
at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62)
at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1178)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1210)
at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781)
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702)
at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)
at org.jboss.system.server.profileservice.hotdeploy.HDScanner.scan(HDScanner.java:362)
at org.jboss.system.server.profileservice.hotdeploy.HDScanner.run(HDScanner.java:255)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source)
at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Ach ja noch was vergessen, wenn diese Beispielprojekte
wirklich etwas umkonfiguriert haben (anders kann ich
mir nicht erklären wieso das SeamTest Projekt nicht
mehr deployt).
Wie kann ich diese Änderung rückgängig machen?
Hast du dan nen Tipp? Oder muss ich den JBoss
Server komplett neu entpacken?
Danke!!
Eigentlich dürften die Seam Beispiele mit ant explode nichts im JBoss anrichten. Wenn man ganz sicher sein möchte würde ich den JBoss einfach neu entpacken.
Die Exception sagt, dass die components.properties Datei, welche die Variable @jndiPattern@ konfiguriert, nicht im Classpath gefunden wird.
Und noch ein zweiter Hinweis zu deinem Server Screenshot: Du verwendest in Eclipse den JBoss Server der mit Eclipse WTP bereits mitgebracht wird. Besser ist es den JBoss Server zu konfigurieren der mit den JBoss Tools ausgeliefert wird. Dazu einen neuen Server hinzufügen und den JBoss 4.x oder JBoss 5 aus dem “JBoss Community” Ordner wählen. Mit diesem Server hast du dann ein wenig mehr Konfigurationsmöglichkeiten.
Ok ich hab den JBoss und Seam neu entpackt und jetzt geht
wieder alles ;)
Zu deinem Tipp:
Da ich bei mir keinen Eintrag “JBoss, a division of Red Hat”
gefunden habe (siehe Screenshot), bin ich davon ausgegangen,
dass ich den JBoss 5.1 Runtime aus dem “JBoss Community”
Ordner nehmen muss?
Screenshot: http://tinyurl.com/y8orwny
Ich verstehe nicht, wieso das jetzt ein von Eclipse WTP
mitgelieferter JBoss Server ist? =/ Eigentlich führt der
Pfad von diesem Community Server zu meinem entpackten
JBoss Ordner. Trotzdem habe ich bei einem Doppelklick
nur diese begrenzten Konfigurationsmöglichkeiten aus
meinem alten Screenshot. Irgendwie merkwürdig.
nettes tutorial. danke dafür! bin noch ein ziemlicher noob was richfaces und so angeht :( hab auch schon ne frage, wollte ein kleines beispiel in dem hier generierten projekt nachbauen und dafür in der login.xhtml das durch ein ersetzen.
bekomme dann allerdings nur die fehlermeldung im browser:
HTTP Status 404 – /ccwebapp/debug.seam
mein tag namespace für a4j ist:
xmlns:a4j=”http://richfaces.org/a4j”
aber eigentlich sind a4j components doch bestandteil der richfaces library, oder muss ich noch irgendwas anderes beachten, wenn ich a4j benutzen möchte?
hab erhlich gesagt auch noch nicht so wirklich verstanden, wann man nun a4j:commandButton nimmt und wann einfach h:commandButton.
würd mich freuen wenn mir jemand den unterschied erklären könnte und vielleicht sogar warum jetzt in meinem beispiel das offenbar nicht funktioniert. danke :)
sorry nochmal:
…dafür in der login.xhtml das <h:commandButton durch ein <a4j:commandButton ersetzen…
Hi Steve,
es wird im RichFaces Projekt zwischen Ajax4Jsf für allgemeine Ajax Aktionen und “richtigen” RichFaces Komponenten unterschieden. RichFaces basiert allerdings auf Ajax4Jsf. So kann man Ajax4Jsf auch eher als Framework sehen und die RichFaces Komponenten als Komponentenbibliothek. Vor ein paar Jahren waren das noch zwei getrennte Projekte.
Zum Unterschied zwischen h:commandButton und a4j:commandButton kannst du eigentlich an folgende Regel halten: Möchtest du ein normales Formular submitten und auf eine neue Seite navigieren verwende den h:commandButton. Damit löst man einen ganz normalen Formular Submit aus und der Browser bekommt diese Aktion mit.
Möchtest du eine Eingabe submitten und das Ergebnis auf der gleichen Seite dynamisch mit Ajax anzeigen verwendest du den a4j:commandButten und setzt dabei das reRender Attribut um zu konfigurieren welche Bereiche/Komponenten neu gerendert werden sollen.
Regel:
Formular submit mit komplett neuem Seitenaufbau -> h:commandButton
Formular submit mit dynamischen Austauschen von Seitenteilen mit Ajax -> a4j:commandButton
Wenn dir Ajax noch nichts sagt dann solltest du dich erst einmal mit Ajax vertraut machen.
alles klar danke für die erklärung! ja ajax ist mir bekannt,
nur der unterschied zwischen h:commandButton und a4j:commandButton war mir nicht klar.
hier mal was ich in der zwischenzeit noch so rausgefunden habe:
o a4j: page centric AJAX controls
o rich: self contained, ready to use components
a4j wird also benutzt um wie du schon sagst nur spezielle seitenelemente neu zu generieren wärend bei rich alles eher component intern geregelt wird.
achso, in deinem tutorial steht ja am ende man soll ein bischen mit der anwenung rumspielen. daher hab ich mal eine neue xhtml datei angelegt die folgenden inhalt hat:
<ui:composition xmlns=”http://www.w3.org/1999/xhtml”
xmlns:s=”http://jboss.com/products/seam/taglib”
xmlns:ui=”http://java.sun.com/jsf/facelets”
xmlns:f=”http://java.sun.com/jsf/core”
xmlns:h=”http://java.sun.com/jsf/html”
xmlns:rich=”http://richfaces.org/rich”
template=”layout/template.xhtml”>
<ui:param name=”mytitle” value=”MEIN TITEL”/>
</ui:composition>
und in der template.xhtml habe ich hinzugefügt:
<head>
[...]
<title>#{mytitle}</title>
[...]
ich möchte also global einen titel für die web applikation definieren und den dann z.B. da im template benutzen. aber irgendwie ignoriert er meine mytitle definition und der titel bleibt leer.
wenn ich mytitle aber in der home.xhtml definiere, dann funktioniert es. jetzt meine frage, muss ich eine neue xhtml datei irgendwo noch registrieren (z.B. in der pages.xml?) oder woran kann es liegen das mein vorhaben nicht gelingt?
danke!!! und sorry das ich hier deinen blog so mit kommentaren flute ^^
Ein super Tutorial. Habe es mit JBoss 5.1 und Seam 2.2 durchgetestet.
Habe selbst schon per Hand eine ähnliche Config aufgesetzt und etliche Stunden dadurch verloren.
Schön wäre gewesen, wenn abschließend noch die Generierung einer Domänenklasse inkl. GUI-Generierung durchgeführt worden wäre.
@Dirk:
Danke für deinen Kommentar. Ich glaube es ist wirklich ganz nützlich ein kleines CRUD Beispiel noch als Tutorial zu erstellen. Vielleicht mache ich das die Tage noch und verweise dann hier darauf.
hey,
erst einmal danke für das tutorial, ist etwas einfacher zu verfolgen als die beschreibung der offiziellen doku.
sobald ich das seam-projekt angelegt habe und es starten möchte bekomme ich nur einen “HTTP Status 404″ angezeigt. habe ich etwas vergessen? ich habe alles so gemacht wie oben beschrieben.
viele grüße
hi!
Super Tutorium.
Ich habe nur ein Porblem:
Bei der Auswahl der Datenbank im Connection Profil sehe ich nicht die MySql Datenbank? (nur Generic JDBC) Kannst du mir einen Tipp geben?
Gruß Peter
mit ein paar mal anecken hat das super funktioniert! werd ich in meinem blog auf jeden fall ein paar worte drüber verlieren!
cheerio
HTTP 404:
Habe genau das gleiche wie zenni (ein paar Kommentare vor mir…). Ich verstehe das einfach nicht:
- habe alles mehrfach ausprobiert
- nach diesem Tutorial hier
- benutze JBoss 5.1 und Seam 2.2, MySQL 5.1
- JBoss Tools Version 2.1 stable
- die seam-examples laufen mit dem ant skript
Habe auch schon in der Server view/Server Einstellungen/Deployment von “Use workspace metadata (..)” zu “Use the JBoss deploy folder” gewechselt… aber nix. Wenn ich das einfache generierte Beispiel deploye (Full oder incremental, als WAR oder EAR Projekt) wird gar nichts in “server/default/deploy” deployed. Wenn ich per Browser drauf zugreife erhalte ich nur einen HTTP 404 error.
Ich neige sogar dazu zu sagen, das die JBoss Tools sehr sehr buggy sind!
Mein Komolitone probiert es auch gerade und hat genau den gleichen Fehler…. was ist da los?
Danke euch!
Fehler für HTTP 404 gefunden:
Windows kann nicht mehr als 256 Zeichen in der Pfadlänge benutzen…. daher workspace, seam dir und JBoss AS dir in keine tiefe Verzeichnisstruktur entpacken!
Gruß!
Hi Maddin,
ich wäre wahrscheinlich nicht auf diese Ursache anhand deiner Beschreibung gekommen aber ich kenne das Problem sehr gut.. Genau aus diesem Grund habe ich meine Workspaces sowie Eclipse Ordner nicht in meinem Home Dir oder sonst wie sehr tief sondern direkt in “D:\Projects\
Das ist bei Windows schon echt mies.
Viel Erfolg weiterhin!
Salü Markus
Vielen Dank! Es ist wirklich grosse Klasse dieses Tutorial.
Sehr einfach und super gut erklärt. Für mich als greenhorn ausserordnetlich wichtig. Danke.
Grüsse Rinaldo
Tolles Tutorial, vielen Dank, es hat mir sehr geholfen und ich konnte das direkt in ein Projekt umsetzen. Danke vielmals!
super tutorial hat mir sehr weitergeholfen funktioniert auch mit neuesten versionen jboss as 6 seam 2.2 final usw.
danke dir!
Hallo Markus
das tutorial ist spitze. ich kriege aber einen fehler, wenn ich den serveruu starten versuche. in meinem eclipse gibt es eher jboss community und nicxht red hat. der fehler lautet: server 4.2 runtime failed to start. dann kommt ein classdefnotfounderror in der console





















Hallo Markus,
tolles Tutorial.
Ich habe allerdings ein paar Probleme beim Aufruf der Seite.
Der Server liefert mir folgende Exception:
java.lang.IllegalStateException: No phase id bound to current thread (make sure you do not have two SeamPhaseListener instances installed)
Kann mir diesbezüglich jemand einen Tip geben.
Vielen Dank und beste Grüße,
Michael