Ein JEE 5 Webframework Jörg Wüthrich Infopoint, 4. Februar 2009 JBoss Seam Ein JEE 5 Webframework Jörg Wüthrich Infopoint, 4. Februar 2009
Infopoint - JBoss Seam - Jörg Wüthrich Inhalt Einführung Warum Seam? Zentrale Konzepte Demo Validierung Abschliessende Gedanken 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Einführung Positionierung 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Einführung Seam ist ein Applikations-Framework für Enterprise Java 5 Integriert Java Server Faces (JSF) Enterprise JavaBeans (EJB3) Asynchrones JavaScript und XML (AJAX) Java Persistence API (JPA) Business Process Management (BPM) Design-Fokus: Elimination von Komplexität auf Architektur- und API-Level 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Warum Seam? Ein einfacher Weg, um mit EJB 3.0 zu beginnen EJB 3.0 unterstützt die Entwicklung von transaktionalen Business Komponenten Seam liefert die Integration dieser Komponenten vom GUI bis zur Persistenz- Schicht 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Warum Seam? Der schnellste Weg um "rich" zu werden AJAX Clients kommunizieren mit vielen asynchronen, konkurrenzierenden Detail- Anfragen mit dem Server Seam wurde entwickelt mit guter Unterstützung für parallele Zugriffe und ausgereifter Zustands-Verwaltung Richfaces und ICEFaces sind integriert 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Warum Seam? Der beste Weg, JSF zum Fliegen zu bringen Ersatz der vielen XML-Konfiguration durch ein paar Annotationen Multi-Windowing Unterstützung Modell-basierte Validierung Saubere Integration von transaktionalen Ressourcen (JPA, JTA, EJB3) 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Warum Seam? Gute Integration von BPM Optimierung der Arbeits-Abläufe heute immer wichtiger Voraussetzung, um optimieren zu können, ist Messbarkeit Workflows verdeutlichen die Arbeits- Abläufe und ermöglichen Messungen Seam integrierts 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Warum Seam? Persistenz wird zum Kinderspiel Seam ist aus der Hibernate Community entstanden Seams Konversations-Modell löst diverse Probleme der traditionell zustandslosen Web Applikationen LazyInitializationExceptions sollen bei JSF und anderen Frameworks gefürchtet (gewesen) sein 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Warum Seam? Beste Unterstützung für CRUD Applikatikonen Seam zu gross für eine einfache Datenbank-Applikation? „seam-gen“ erstellt kleine Applikationen mit DB-Anbindung im Nu (vergleiche „ruby on rails“) 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Warum Seam? Automatisierte Integrations-Test Unittests können Interaktionen zwischen Komponenten nicht testen Seam bietet einen Ansatz, um User- Interaktionen zu simulieren und so von UI bis zur Persistenz durchgängig zu testen 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Zentrale Konzepte Komponente beliebige POJOs, EJB3s (Session, Entity, MDB) oder Spring Beans annotiert mit @Name(„...“) lebt immer in einem Kontext (-> zuständig für Lifecycle) Seam stellt spezialisierte Handler zur Verfügung, um die diversen Typen von Objekten einzubinden (Interceptor für EJB) 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Zentrale Konzepte Kontext Application Business-Process Session Session Conversation Conversation Conversation Page Page Page Page Event Event Event Event Event Event Event 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Zentrale Konzepte Kontext Event: entspricht einem JSF-Request Page: eine Instanz einer gerenderten Seite Conversation: Arbeitseinheit aus Sicht des Users (kann mehrere Server-Requests beinhalten) Session: Session-Scope des Servlet-APIs Business-Process: hält Zustand über länger dauernden Geschäftsprozess, in welchen mehrere Akteure involviert sein können Application: entspricht Application-Scope von JSF Kontext: verwaltet Lifecycle der Objekte Page: z.B. für klickbare Listen 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Zentrale Konzepte Bijection alle Seam Komponenten werden in einem Kontext gehalten Injection: eine Komponente wird einer anderen aus dem Kontext zur Verfügung gestellt Outjection: eine Komponente gibt eine andere nach Bearbeitung an den Kontext zurück Bijection: Kunstbegriff von Seam, um In- und Outjection in ein Wort zu fassen Injection: Sessionkontext in ein EJB3 (vorher Implementierung SessionBean Interface mit Callback Methoden) 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Bijection <<Seam Komponente>> todo:Todo @Entity @Name("todo") public class Todo implements Serializable { Seam Kontext 3. outject „todo“ 1. inject „todo“ <<Seam Komponente>> todoDao:TodoDao @Name("todoDao") public class TodoDao @In @Out private Todo todo; 2. modify „todo“ 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Beispiel-Anwendung Demo Start -> Edit (Validierung!!) Seam Debug Page edit.xhtml faces-config.xml navigation.xml components.xml 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Beispiel-Anwendung Seam 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Beispiel-Anwendung JSF 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Klasse TodoDao @Stateful @Name("todoDao") public class TodoDao implements TodoDaoInt { @In(required=false) @Out(required=false) private Todo todo; @PersistenceContext(type=EXTENDED) private EntityManager em; @DataModel private List<Todo> todos; @Factory("todos") @Begin(join=true) public void findTodos() { todos = em.createQuery("select t from Todo t").getResultList(); } … Bijection – DataModel – Factory - Begin 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Validierung 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Validierung @Entity @Name("todo") public class Todo implements Serializable { … private String description; public Todo () { description =""; } @NotNull @Length(min=2, max=250) public String getDescription() {return description;} Jeder Zugriff auf das Objekt ist geschützt; keine Verteilung der Validierung notwendig 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Validierung <tr> <td>Description:</td> <td> <h:inputTextarea id="description" value="#{todo.description}"> <s:validate /> </h:inputTextarea> <h:message for="description" /> </td> </tr> 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Validierung JSF <tr> <td>Description:</td> <td> <h:inputTextarea id="description" value="#{todoBean.todo.description}"> <f:validateLength minimum="2" maximum="250"/> </h:inputTextarea> <h:message for="description"> </td> </tr> 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Validierung erweitert <f:facet name="beforeInvalidField"> <h:graphicImage styleClass="errorImg" value="error.png"/></f:facet> <f:facet name="afterInvalidField"> <s:message styleClass="errorMsg" /></f:facet> <f:facet name="aroundInvalidField"> <s:div styleClass="error"/></f:facet> <s:validateAll> <tr><td>Description:</td> <td> <s:decorate> <h:inputTextarea id="description" value="#{todo.description}" cols="50" rows="10"/> </s:decorate> </td> </tr> 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Abschliessende Gedanken zu Seam Seam ist nicht alleine einsatzfähig – liefert Zusammenhalt für diverse Komponenten-Frameworks Setzt Kenntnis der zu integrierenden Technologien voraus Performance?? 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Referenzen Dokumentation zu Seam: http://www.seamframework.org/ Seam Referenz-Dokumentation: http://docs.jboss.com/seam/2.1.1.GA/referen ce/en-US/html/ Seam Tutorial mit JSF-Vergleich: http://www.redhat.com/docs/manuals/jboss/j boss-eap-4.2/doc/Getting_Started/index.html 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich
Infopoint - JBoss Seam - Jörg Wüthrich Referenzen JBoss Seam – die Webbeans Implementierung (http://www.webbeans.eu/ ISBN 978-3-446-41190-6) Seam in Action (http://www.manning.com/dallen/ ISBN 978-1-933988-40-1) 04.02.2009 Infopoint - JBoss Seam - Jörg Wüthrich