# Seam effektiv erlernen?



## Facelett (17. Dez 2011)

Hi,

schreibe eine Bachelorarbeit über die Struktur und die benötigten Komponenten von Seam. Daher will ich zur Zeit Seam erstmal erlernen.
Bis jetzt habe ich ein erstes Hello World geschrieben mit Seam-gen (Mit den Jboss-Tools schmiss der Jboss immer einen Fehler beim starten). Aufgrund der Empfehlung eines Kollegen verwende ich Seam 2.2.2 und nicht 3.

Wie / Wo kann ich mir jetzt am besten die Komponenten aneignen? Beherrschen tu ich bisher nur Java, HTML, XML und ein bisschen mit Beans habe ich auch gemacht.


----------



## bandy (18. Dez 2011)

Facelett hat gesagt.:


> Hi,
> 
> schreibe eine Bachelorarbeit über die Struktur und die benötigten Komponenten von Seam. Daher will ich zur Zeit Seam erstmal erlernen.
> Bis jetzt habe ich ein erstes Hello World geschrieben mit Seam-gen (Mit den Jboss-Tools schmiss der Jboss immer einen Fehler beim starten). Aufgrund der Empfehlung eines Kollegen verwende ich Seam 2.2.2 und nicht 3.
> ...




Naja, oben rechts in deinem Browser siehst du ein Buch "JBoss Seam" welches dich lediglich die Versandkosten kostet, ich habe es mir noch nicht besorgt und nicht gelesen, aber es wird dir sicherlich helfen wenn du sowieso keine Ahnung davon hast, oder?:bahnhof:


----------



## Facelett (18. Dez 2011)

danke für den Tipp. Hatte den Popupblocker an und mir wurde es daher nicht angezeigt. Konnte zwar keine Rezenzion spontan finden, habe es mir aber einfach mal bestellt. Für 4€ kann man ja nicht so viel falsch machen


----------



## JanHH (19. Dez 2011)

Dann schreib ich mal ne Runde..

- wichtig ist die Unterscheidung zwischen Seam 2 und 3: Seam 2 = JEE5, Seaem 3 = JEE6. Ausserdem ist eigentlich alles, was der "Witz" von Seam 2 war, mittlerweile JEE-Standard, so dass JEE6 auch ohne Seam eine weitgehend runde Sache ist. Die wesentlichen Kernbestandteile von seam sind bei Seam 3 nicht mehr Teil von Seam sondern von JEE, Seam an sich wird deutlich überflüssiger.

- Wichtigste Komponenten sind:

* JSF-Erweiterung um sinnige Tags und page actions und aufräumen mit den ganzen gruseligen XML-Dateien

* Rollen-/Rechte-System

* und gaaaaaaaaaanz wichtig und eigentlich des Pudels Kern: Der universelle kontextuelle Container, wichtigste beiden Punkte da: Das sehr flexible Dependency Injection, und die deutliche Vereinfachung beim Arbeiten mit EJBs (z.B. EJSs direkt aus JSF-Seiten anzusprechen usw.). Jede Komponente hat einen eindeutigen Namen und ist gleichberechtigt mit allen anderen an allen Stellen per Dependency Injection nutzbar und von JSF aus ansprechbar, egal ob JSF-managed-Bean, simple Java-POJO-Bean oder EJB.

* und dann natürlich die "nahtlose" Integration all dieser Technologien, so das man das Gefühl hat, mit "einer runden Sache" zu arbeiten, anstatt mit etlichen Einzelframeworks, die man mühsam selber konfigurieren muss (was "unter der Haube" ja der Fall ist).

Dann gibts noch eher Rand-Features wie seam mail und die pdf-Erzeugung, aber die sind eigentlich nur "nice to have". Die Punkte, die ich aufgeführt hab, sind das, worums in Kern geht.

Eigentlich war die Frage hier ja auch nicht nach "seam-Kurzbeschreibung" sondern "wie lernen", aber ich hab das geschrieben weil ich finde, dass die meisten Seam-Bücher eher doof sind und es nicht so richtig klar wird, was eigentlich die Schwerpunkte des ganzen sind. Wenn man praktisch damit arbeitet, merkt man das aber sehr deutlich. Darum dieser kurze Überblick.


----------



## Facelett (19. Dez 2011)

Danke für deine ausführliche Beschreibung. Besonders der erste Punkt scheint mir sehr interessant und ich werde überlegen diesen mit in meine Arbeit mit aufzunehmen.

Auch deine Schwerpunktbeschreibung wird mir denke im weiteren Verlauf weiterhelfen. Könntest du mir wohl noch sagen, ob die von dir genannten Punkte in Seam 3 auch noch die Hauptrolle spielen oder ob hier die Features von JEE6 übernommen wurden?

Momentan folge ich dieser Anleitung. Leider ist die Beschreibung auch nicht so optimal. Das Hotdeployment scheint bisher bei mir nicht zu funktionieren, sodass ich bei jeder Änderung "seam restart" ausführen muss. Mal schauen wie es in dem Buch nachher beschrieben ist


----------



## JanHH (19. Dez 2011)

Hotdeploy geht wenn der JBoss genug Speicher hat. Ich mach das immer so..

seam setup
seam create-project
Projet in Eclipse öffnen
JBoss da als Server hinzufügen

fertisch.

Was die genannen Punkte angeht..

- der DI-Container heisst jetzt CDI/weld und ist Teil vom JEE-Standard geworden (hierzu siehe offizielle oracle-jee6-doku), das dürfte der wichtigste Punkte von allen sein
- JSF 2.0 ist um wesentliche Punkte, überwiegend von seam2 motiviert, erweitert worden, u.a. der Wegfall der xml-Konfigurationssachen (Annotationen statt XML)
- Rollen/Rechte fehlen in JEE6 genauso wie 5, hier seam 3 relevant, bzw JBoss rules/drools.

Aber seam 3 ist soweit ich weiss auch noch recht roh, alpha-Version, funktioniert noch nicht so richtig zuverlässig. Alles in allem.. seam 2 ist ein "Gesamtkunstwerk" aber auch sehr monolitisch, ein Projekt ist entweder ein seam-Projekt oder halt keins, aber da ist nicht mehr viel Variationsspielraum, während Seam3 eher modular ist (maven-module), eine lose Sammlung von Modulen rund um JEE6 herum. Eigentlich kann man beides kaum vergleichen.

Welche Seam2-Version benutzt Du eigentlich? 2.2.2 final?


----------



## Facelett (20. Dez 2011)

danke für deine Rückmeldung. Ja genau, derzeit verwende ich die 2.2.2 Final. Leider harkt es mal wieder. Der connect zur MySql Datenbank klappt noch nicht so recht. Ich warte zur Zeit auf das Buch und hoffe dort auf eine "einfache" Einführung. 
Derzeit werde ich noch ein bisschen erschlagen durch die ganzen "tags" die ich z.B. bei "new-form" erzeuge. Ändern hat auch noch nicht wie erhofft geklappt.



JanHH hat gesagt.:


> Hotdeploy geht wenn der JBoss genug Speicher hat. Ich mach das immer so..
> 
> seam setup
> seam create-project
> ...



Genau so habe ich es gemacht. Speicher sollte auch mehr als Genug da sein (4GB). Deployen tut er wie ich das sehe auch. Das Problem ist eher, dass er trotz deploy im Browser keine Änderungen anzeigt (erst nach Jboss restart)


----------



## JanHH (21. Dez 2011)

Mag jetzt etwas doof klingen, aber ich scheitere daran, mit seam 2.2.2 final ein projekt zu erzeugen, wo die java-Klassen auch mit zum JBoss deployed werden. Wärst Du bereit, mir ein blanko-Projekt von Dir zu schicken, wo das klappt, und die build.xml, auf der das basiert?

Ansonsten, diese ganzen weiteren Tools die seam-gen da bietet, zum Erzeugen von java-Klassen und so, benutz ich nie. Das wird dann alles per Hand programmiert.

Und was ist das Problem mit der Datenbank? Ist ja ein zusammenspiel aus der ...-ds.xml-Datei und der persistence.xml.


----------



## Facelett (21. Dez 2011)

JanHH hat gesagt.:


> Mag jetzt etwas doof klingen, aber ich scheitere daran, mit seam 2.2.2 final ein projekt zu erzeugen, wo die java-Klassen auch mit zum JBoss deployed werden. Wärst Du bereit, mir ein blanko-Projekt von Dir zu schicken, wo das klappt, und die build.xml, auf der das basiert?



Kann ich im Prinzip machen, wird dir aber vermutlich nichts bringen. Bei der Erstellung des Projektes Gibt man den Pfad zum Workspace und Jboss an. Auch wird direkt die Datenbankverbindung mit angegeben. Daher wäre meine Vermutung, dass auch das leere Projekt dir nicht weiterhilft. Woran scheitert es denn? Ich bin dieser Anleitung gefolgt. Und bis auf die Datenbankverbindung und dem Hotdeploy läuft es soweit ich es beurteilen kann.

Die Datenbankverbindung wird wie du schon sagst in der persistance und der components geregelt. Leider weiß ich nicht genau was ich dort eintragen muss. Zunächst war der Plan die Dateien aus einem Projekt zu übernehmen, welches ich mit den Jboss Tools erstellt habe (dort klappte ein Testconnect). Leider scheint es Unterschiede bei der Konfiguration bei Projekten die mit Seam gen und Jboss Tools erstellt wurden zu geben. Ich hoffe, dass in dem oben genannten Buch eine Erläuterung ist.


----------



## JanHH (21. Dez 2011)

ne nich components.. die datasource muss angepasst werden. Wenn Du in den deploy-Ordner vom JBoss schaust, ist dort eine <projektname>-ds.xml-Datei. Dort müssen die JDBC-Zugangsdaten zur Datenbank eingetragen werden. Auf die datasource, die in dieser Datei definiert wird, muss sich dann die persistence.xml beziehen.


----------



## Facelett (21. Dez 2011)

danke, werde ich mir morgen mal anschauen


----------

