JBoss SEAM AGENDA

tastelessbeachInternet και Εφαρμογές Web

12 Νοε 2013 (πριν από 3 χρόνια και 11 μήνες)

170 εμφανίσεις

1
© Andy Bosch, www.jsf-forum.de
- Einführung und Überblick
JBoss SEAM
Andy Bosch
IT-Berater und Trainer
Buchautor „JavaServer Faces“ und „Portlets und JavaServer Faces“
Betreiber von www.jsf-forum.de und www.jsf-portlets.net
Mitglied der Expertengruppe des JSR 301 (Portlet Bridge Specification for JSF)
SENS-Experte (www.SoftwareExperts.de)
© Andy Bosch, www.jsf-forum.de
AGENDA
1) Über JSF, EJB und Ajax zu SEAM
1) JSF, EJB und Ajax
2) Was ist SEAM?
3) Features
2) Arbeiten mit Seam
3) Fazit
2
© Andy Bosch, www.jsf-forum.de
AGENDA
1) Über JSF, EJB und Ajax zu SEAM
1) JSF, EJB und Ajax
2) Was ist SEAM?
3) Features
2) Arbeiten mit Seam
3) Fazit
© Andy Bosch, www.jsf-forum.de
JavaServer Faces
￿ JavaServer Faces ist ein User Interface Framework zur Erstellung
von Oberflächen für Webanwendungen
￿ JavaServer Faces ist ein Standard. Die erste Version wurde im
März 2004 als JSR 128 freigegeben.
￿ Mit Java EE 5 gehört JSF 1.2 nun auch zum EE-Umfang.
￿ Aus meiner (subjektiven) Sicht hat sich JSF als Standard-UI-
Framework mittlerweile etabliert, viele Firmen und Projekte setzen
darauf.
3
© Andy Bosch, www.jsf-forum.de
EJB3
￿ Zentrales Element innerhalb der Java Enterprise Edition
￿ Basis für unternehmenskritische Softwarekomponenten, da auf
Transaktions-, Persistenz- und Sicherheitsaspekte eines Java EE-
Containers zugegriffen werden kann.
￿ EJB3 bietet starke Vereinfachung hinsichtlich Verwendbarkeit und
Entwicklungsgeschwindigkeit gegenüber EJB2.x
￿ “Detail” am Rande: Annotationen statt Konfigurationsdateien
© Andy Bosch, www.jsf-forum.de
Ajax, PPR, Remoting, ...
￿ Ajax ist eine (wenn nicht sogar die wichtigste) Säule von Web 2.0
￿ Mit Ajax können asynchron aus dem Browser Funktionen des Servers
aufgerufen werden.
￿ Mit Ajax ist es möglich, nur Teile einer Webseite zu verändern (Partial
Page Rendering) anstatt die komplette Seite neu zu laden (Full Page
Reload)
￿ Mit Ajax können coole, moderne und extrem benutzerfreundliche
Oberflächen (auch für den Browser) geschrieben werden.
4
© Andy Bosch, www.jsf-forum.de
Alle Zutaten zusammen ergeben ...
￿ Jede der genannten Technologien funktioniert für sich alleine
genommen sehr gut.
￿ Schwierig wird es, wenn die Technologien miteinander kombiniert
werden müssen.
￿Mitunter ist dann sehr viel Gluecode notwendig
￿ Eine andere Möglichkeit, alle genannten Technologien “aus einer
Hand” zu bekommen und zu nutzen: SEAM
© Andy Bosch, www.jsf-forum.de
Was ist SEAM?
• Seam ist ein Application Framework, das speziell EJB3 und JSF näher
zusammenbringt.
• Aber nicht nur JSF und EJB3 werden zusammengeschweißt, auch
weitere Technologien wie Ajax, Pdf-Generierung, BPM uvm werden
integriert.
• Seam hat viele Features / Konzepte, die eine Anwendungsentwicklung
basierend auf JSF stark vereinfachen (Preactions, Button-Back-
Behandlung, …)
• Seam ist somit viel mehr ein Integrationsframework !!!
5
© Andy Bosch, www.jsf-forum.de
Ein paar Worte zu SEAM und JBoss
￿ SEAM wurde unter der Führung von JBoss entwickelt
(Gavin King)￿
￿ Natürlich läßt sich SEAM ideal mit anderen Produkten der
JBoss-Familie verbinden.
￿ Allerdings läuft SEAM auch in anderen Application Servern.
Vielmehr ist es sogar möglich, mit Hilfe des Microcontainers
SEAM auch in einem Webcontainer laufen zu lassen.
￿ JBoss hat SEAM zur Standardisierung eingereicht. Der JSR-299
(Webbeans) ist aktuell in Bearbeitung.
© Andy Bosch, www.jsf-forum.de
Cool stuff
• SEAM führt Bijection ein (Kombination aus Injection und Outjection)
• SEAM führt neue Kontexte ein: Conversation Scope und Business
Process Scope.
• SEAM löst das „Open-in-new-window“-Problem
• SEAM basiert standardmässig auf Facelets
• SEAM bietet einen Generator, um sehr schnell neue Projekte und
Artefakte aufzusetzen.
6
© Andy Bosch, www.jsf-forum.de
AGENDA
1) Über JSF, EJB und Ajax zu SEAM
1) JSF, EJB und Ajax
2) Was ist SEAM?
3) Features
2) Arbeiten mit Seam
3) Fazit
© Andy Bosch, www.jsf-forum.de
Hinein in die Praxis: Ein erstes Beispiel ...
￿Unser Ziel:
￿Aufbau einer Shopanwendung. Der Benutzer soll
aus einer Liste von Produkten eines auswählen und
den Bestellvorgang starten.
Am Beispiel der Shopanwendungen sollen die verschiedenen
Konzepte und Features von Seam demonstriert werden.
7
© Andy Bosch, www.jsf-forum.de

Anlegen eines Projekts mittels Seam-Gen
• Anlegen von Entities
• Anlegen der JSF-Seiten
• Anlegen von UI-Controllern
• Navigationsregeln
• Validierung
• Conversations
• Remoting / Ajax
•...
Arbeitsschritte
© Andy Bosch, www.jsf-forum.de
Was ist der Seam-Gen?
Definition gemäß Gavin King (frei übersetzt):
Seam-Gen ist die Antwort auf Ruby on Rails …
Etwas ausführlicher:
Mit Seam-Gen steht dem Entwickler ein Kommandozeilen-Programm
zur Verfügung, mit dem sehr schnell und eingermaßen komfortabel
Seam-Artefakte erzeugt werden können.
Aus der Doku:
„Seam-gen is basically just a big ugly Ant script wrapped around
Hibernate Tools, together with some templates. “
8
© Andy Bosch, www.jsf-forum.de
• Anlegen eines Projekts mittels Seam-Gen

Anlegen von Entities
• Anlegen der JSF-Seiten
• Anlegen von UI-Controllern
• Navigationsregeln
• Validierung
• Conversations
• Remoting / Ajax
•...
Arbeitsschritte
© Andy Bosch, www.jsf-forum.de
@Name("ProductBean")
@Entity
@Scope(ScopeType.SESSION)
@Table(name="product")
public class ProductBean {
@Id @GeneratedValue
private long id;
private String name;
private int price;
private String description;
...
}
@Name
￿SEAM-Komponente
@Entity
￿EJB Entity
Ein erstes Entity
9
© Andy Bosch, www.jsf-forum.de
@Name(“OrderBean")
@Entity
@Scope(ScopeType.SESSION)
@Table(name=“order")
public class OrderBean {
@Id @GeneratedValue
private long id;
private String customer;
private int productId;
...
}
@Name
￿SEAM-Komponente
@Entity
￿EJB Entity
Ein zweites Entity
© Andy Bosch, www.jsf-forum.de
Erzeugung eines Entities
• Mittels @Name wird ein Pojo zu einer Seam-Komponente
• In Seam gibt es keine Unterscheidung von JSF-Managed-
Beans und Enterprise Java Beans
• Seam-Komponenten sind “überall” bekannt
• Seam-Komponenten müssen daher nicht separat in der
faces-config.xml hinterlegt werden.
10
© Andy Bosch, www.jsf-forum.de
• Anlegen eines Projekts mittels Seam-Gen
• Anlegen von Entities

Anlegen der JSF-Seiten
• Anlegen von UI-Controllern
• Navigationsregeln
• Validierung
• Conversations
• Remoting / Ajax
•...
Arbeitsschritte
© Andy Bosch, www.jsf-forum.de
Binding an die Oberfläche (1)￿
...
<h:outputText value="#{ProductBean.name}" />
<h:inputText value="#{ProductBean.price}" />
...
11
© Andy Bosch, www.jsf-forum.de
Binding an die Oberfläche (2)￿
...
<h:dataTable var="current"
value="#{ProductContainer.products}">
<h:column>
<h:outputText value="#{current.name}" />
</h:column>
<h:column>
<h:commandButton value="Kaufen"
action="#{ShopController.orderProduct(current)}" />
</h:column>
...
</h:dataTable>
...
© Andy Bosch, www.jsf-forum.de
• Anlegen eines Projekts mittels Seam-Gen
• Anlegen von Entities
• Anlegen der JSF-Seiten

Anlegen von UI-Controllern
• Navigationsregeln
• Validierung
• Conversations
• Remoting / Ajax
•...
Arbeitsschritte
12
© Andy Bosch, www.jsf-forum.de
Controller-Logik: Session Beans
@Name("ShopController")
@Scope(ScopeType.SESSION)
public class ShopController
implements ShopControllerItf {
@In(value="OrderBean",create=true)
private OrderBean orderBean;
public String orderProduct( ProductBean aProduct ) {
orderBean.setProductId( aProduct.getId() );
return"/shop/order.xhtml";
}
...
}
@Name
￿SEAM-Komponente
@In
￿Injection
Navigation
direkt auf View
© Andy Bosch, www.jsf-forum.de
Injection (in Controllern)￿
• In Standard-JSF müsste über createValueExpression etc. der
Wert einer anderen Managed Bean geholt werden.
• In Seam kann eine andere Seam-Komponente einfach injeziert
werden.
•Da hier der Container die “Versorgung” mit Beans übernimmt,
spricht man an der Stelle von IoC (Inversion of Control)￿
• Syntax: @In(value=“Komponentenname”)￿
• Ist der Variablenname gleich dem Komponentenname, kann
das Attribut “value” entfallen.
13
© Andy Bosch, www.jsf-forum.de
Outjection und Bijection
• Seam kennt nicht nur Injection, sondern auch Outjection !
• Per Outjection können Objekte wieder zurück in den Kontext
der Komponente gegeben werden.
• Syntax analog zu Injection: @Out(value=“CmpName”)￿
• Die Kombination in Injection und Outjection wird Bijection
genannt.
© Andy Bosch, www.jsf-forum.de
Erweiterung der EL am Beispiel
<h:column>
<h:commandButton value="Kaufen"
action="#{ShopController.orderProduct(current)}" />
</h:column>
14
© Andy Bosch, www.jsf-forum.de
Arbeitsschritte
• Anlegen eines Projekts mittels Seam-Gen
• Anlegen von Entities
• Anlegen der JSF-Seiten
• Anlegen von UI-Controllern

Navigationsregeln
• Validierung
• Conversations
• Remoting / Ajax
•...
© Andy Bosch, www.jsf-forum.de
Navigationsregeln in Seam
- In Seam können die üblichen (JSF-) Navigationsregeln
weiter verwendet werden.
- Zusätzlich bietet Seam mittels einer pages.xml ein
erweitertes Navigationskonzept an.
- Als dritte Möglichkeit kann der Pageflow auch über jBPM
(BPM-Engine) erfolgen.
15
© Andy Bosch, www.jsf-forum.de
<page ...>
<navigation from-
action="#{startSeite.update}"
evaluate="#{controller.errors.size}">
<rule if-outcome="0">
<redirect view-id="/ergebnisSeite.xhtml"/>
</rule>
</navigation>
</page>
Es können zusätzlich Expressions in den Regeln verwendet werden:
Navigationsregeln
© Andy Bosch, www.jsf-forum.de
Preactions und Request-Parameter
Bei Verwendung der pages.xml ist es möglich,
Preactions zu definieren oder Request-Parameter
einzulesen.
<page view-id="/hello.jsp"
action="#{helloWorld.preparePage}"> ...
<page view-id="/hello.jsp">
<param name="vorname" value="#{person.firstName}"/>
..
16
© Andy Bosch, www.jsf-forum.de
• Anlegen eines Projekts mittels Seam-Gen
• Anlegen von Entities
• Anlegen der JSF-Seiten
• Anlegen von UI-Controllern
• Navigationsregeln

Validierung
• Conversations
• Remoting / Ajax
•...
Arbeitsschritte
© Andy Bosch, www.jsf-forum.de
Wie funktioniert Validierung in Seam?
• Validierung in Seam funktioniert zunächst einmal genauso
wie in Standard-JSF (required-Attribut, length-Validator, ...)￿
• Zusätzlich können in Seam-Komponenten per Annotation
zusätzliche Prüfungen angegeben werden.
• Es kommt hierbei das Hibernate Validator Framework zum
Einsatz.
• Soll gegen diese Prüfungen gecheckt werden, muss das Tag
validateAll verwendet werden.
17
© Andy Bosch, www.jsf-forum.de
Beispiel Validierung: Annotation im
Modell
public class ShoppingCart {
private ProductBean product;
@Length(min=3)￿
private String ordername;
...
© Andy Bosch, www.jsf-forum.de
Häufig verwendete Validierungs-
Annotations
• @Length(min=3, max=4)￿
• @Max(value=3)￿
• @Min(value=2)￿
• @NotNull
• @Past / @Future
• @Pattern(regex=„####“)￿
• @Range(min=2, max=4)￿
• @Email
•...
18
© Andy Bosch, www.jsf-forum.de
• Anlegen eines Projekts mittels Seam-Gen
• Anlegen von Entities
• Anlegen der JSF-Seiten
• Anlegen von UI-Controllern
• Navigationsregeln
• Validierung

Conversations
• Remoting / Ajax
•...
Arbeitsschritte
© Andy Bosch, www.jsf-forum.de
Was ist eine Conversation?
Ausgangslage:
Daten können in Webanwendungen in
verschiedenen Kontexten gespeichert werden. Häufig werden der
Application Context und der Session Context verwendet.
Seam führt u.a. den Conversation-Context ein.
Eine Conversation ist ein Abschnitt einer Session. Ein Conversation
Scope umfasst eine Folge von Arbeitsschritten innerhalb einer
Session.
Mittels Conversations ist es möglich, mehrere unterschiedliche
Pageflows simultan in der gleichen Session zu verwalten.
19
© Andy Bosch, www.jsf-forum.de
Starten und Beenden einer Conversation
@Begin
public String selectProduct( ProductBean prod
) {
...
}
@End
public String backToChoice() {
...
}
© Andy Bosch, www.jsf-forum.de
Open-in-new-window
• Ein Benutzer kann ein Link auch in einem neuen Fenster öffen
(bzw. in einem neuen Tab)￿
• In JSF liegen hinter Links oder Buttons fast immer
Aktionsmethoden, die beim POST angestossen werden, zudem
wird für das POST JavaScript verwendet.
• Wird ein Link in einem neuen Fenster geöffnet, wird kein POST
ausgeführt und damit auch keine Aktionsmethode.
￿ Um eine Aktionsmethode in einem neuen Fenster ausführen zu
können, gibt es in Seam die s:link- (oder s:button)-Komponente.
20
© Andy Bosch, www.jsf-forum.de
Open-in-new-window und Conversations
• Das s:link-Tag bzw. das s:button-Tag bietet im Zusammenspiel
mit Conversations die Möglichkeit, ein Master-Detail-Konstrukt auf
mehrere Reiterseiten abzubilden.
• Es kann sowohl eine Aktionsmethode ausgeführt werden wie
auch eine eigene Conversation in einem eigenen Window / Tab
gestartet werden.
• Die Komponenten müssen im Conversation-Scope liegen.
© Andy Bosch, www.jsf-forum.de
• Anlegen eines Projekts mittels Seam-Gen
• Anlegen von Entities
• Anlegen der JSF-Seiten
• Anlegen von UI-Controllern
• Navigationsregeln
• Validierung
• Conversations

Remoting / Ajax
•...
Arbeitsschritte
21
© Andy Bosch, www.jsf-forum.de
￿
Seam bietet die Möglichkeit, EJB-Funktionalitäten asynchron
direkt aus der Html-Schicht aufzurufen (Ajax).
￿
Dazu müssen die Methoden einer Session Bean mit der
Annotation @WebRemote versehen werden.
￿
Zusätzlich müssen zwei JavaScript-Dateien in die JSF-Seite
eingefügt werden sowie das dazu passende JavaScript samt
Callback-Methode programmiert werden.
Grundsätzliches zu Remoting (Ajax)￿
Insgesamt ist dieser Weg nicht
zu empfehlen. Es gibt bessere
Möglichkeiten, Ajax in JSF zu verwenden. Daher sollte das Seam
Remoting nicht
eingesetzt werden.
© Andy Bosch, www.jsf-forum.de
Wie ist der empfohlene Ajax-Weg?
• Ajax4Jsf ist komplett in Seam integriert
• Ajax4Jsf / Richfaces gehört mittlerweile ebenfalls zu JBoss
/ RedHat
• Ajax4Jsf ist komplett in den JSF-Lifecycle integriert
• Bei Ajax4Jsf wird keinerlei JavaScript benötigt, es werden
lediglich Tags verwendet.
22
© Andy Bosch, www.jsf-forum.de
War das alles?
• E-Mail Unterstützung
• PDF-Generierung
• Rules-Integration
•...
Nein, natürlich nicht. Seam hat noch viele viele weitere nette
Features, die eine Anwendungsentwicklung stark vereinfachen.
Hier ein kleiner Auszug:
© Andy Bosch, www.jsf-forum.de
Fazit
• Seam bietet durchaus einige sehr nützliche und wertvolle
Erweiterung für eine Webanwendungsentwicklung
• Seam bietet dem JSF-Entwickler viele nützliche Erweiterungen
• Seam funktioniert ☺
• Aufhebung der strengen Schichtentrennung ist Ansichtssache
• Die Sache mit dem JSR-299 ist so eine Sache …
23
© Andy Bosch, www.jsf-forum.de
© Andy Bosch, www.jsf-forum.de
Fragen ???
Gerne auch:
andy.bosch@jsf-forum.de
Weitere Tutorials und
viel Material unter:
www.jsf-forum.de