Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX...

40
1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de [email protected] JAX Reloaded JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork © 2007 Orientation in Objects GmbH JBoss Seam 2 Papick Garcia Taboada Software Architekt Technologie-Scout Beratung Projekte Training

Transcript of Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX...

Page 1: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

1

Orientation in Objects GmbH

Weinheimer Str. 6868309 Mannheim

[email protected] Reloaded

JBoss Seam

Seam – oder wie Nähe ich ein Java EE Patchwork

© 2007 Orientation in Objects GmbHJBoss Seam 2

Papick Garcia Taboada

Software Architekt

Technologie-Scout

Beratung

Projekte

Training

Page 2: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

2

© 2007 Orientation in Objects GmbHJBoss Seam 3

Serge Ndong

Entwickler

Berater

Trainer

© 2007 Orientation in Objects GmbHJBoss Seam 4

Gliederung

• Was ist Seam?

• Wie funktioniert Seam?

• Fazit?

Page 3: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

3

© 2007 Orientation in Objects GmbHJBoss Seam 5

Webapp in 15 min?

Keynote W-JAX 2006Tim Bray, Director of Web Technologies (Sun)

© 2007 Orientation in Objects GmbHJBoss Seam 6

Endlich ein Webapp Framework

• Framework zur Erstellung vonEnterprise Java Webapplikationen

• ein mächtiges Framework,um moderne Web 2.0 Anwendungen[sehr einfach] zu bauen

Page 4: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

4

© 2007 Orientation in Objects GmbHJBoss Seam 7

JBoss™ ???

• Ist JBoss Seam eine proprietäre Lösung?

– JBoss Seam ist Open Source

– JBoss Seam ist mit anderen JBoss Produkten verzahnt

– Aus Seam ist das JSR 299 entstanden: “WebBeans”

– erster JSR unter der Leitung von JBoss

© 2007 Orientation in Objects GmbHJBoss Seam 8

Lückenfüller?

• schließt eine wichtige Lücke in der Architektur von Java EE 5

– vereint EJB 3.0 und Java Server Faces (JSF)in einem einzigen Programmiermodell

– kein „Schichten Glue Code“ mehr nötig,Programmierzeit wird gespart

Page 5: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

5

© 2007 Orientation in Objects GmbHJBoss Seam 9

Wie leichtgewichtig ist es?

• dank Java EE 5 leichtgewichtigeren Ansatz

© 2007 Orientation in Objects GmbHJBoss Seam 10

Wie leichtgewichtig ist es?

• EJB 3 Applikationen können in Web-Container laufen

– EJB 3 Applikationen können in TestNG laufen

– Seam auch mit JavaBeans und Hibernate einsetzbar

• mit JBoss Embeddable Container

Page 6: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

6

© 2007 Orientation in Objects GmbHJBoss Seam 11

Geschichte

• Versionen– 1.2.1 Produktion seit 27.03.2007– 1.2.0 Produktion 27.02.2007– 1.1.6 Produktion 08.02.2007– 1.1.5 Produktion 01.02.2007– 1.1.1 Produktion 18.01.2007– 1.1.0 Produktion 13.12.2006– 1.1.0 BETA 1 24.10.2006– 1.0.1 Produktion 18.06.2006– 1.0.0 Produktion 11.06.2006– 1. Beta 18.09.2005

Lead durch Gavin King (Hibernate)

© 2007 Orientation in Objects GmbHJBoss Seam 12

EJB-zentrische Entwicklung

• EJBs auch im Frontend

• EJB Komponenten sind annotierte POJOs

• Aufhebung der Schichtentrennung– Keine Facade, Business Delegate und Transfer Objects mehr

• Schichten lediglich im Objektmodell abgebildet

Page 7: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

7

© 2007 Orientation in Objects GmbHJBoss Seam 13

AJAX-basiertes Remoting

• Webclient hat direkten Zugriff auf EJB Session Beans

• Bereitstellung von EJB-Komponenten alsJavaScript Proxy-Objekte

• Webclients können JMS Nachrichten empfangen– Nach wie vor experimental

© 2007 Orientation in Objects GmbHJBoss Seam 14

Prozessgetriebene Applikationen

• eigene Business Processing ManagementEngine (jBPM)für die Implementierung vonWorkflows und Pageflows

Page 8: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

8

© 2007 Orientation in Objects GmbHJBoss Seam 15

Testbarkeit++

• POJOs sind einfach zu testen

• Umfangreiche Testmöglichkeiten (mit TestNG)

– z.B : Nachbilden einer Interaktionmit einem Benutzer des Systems

© 2007 Orientation in Objects GmbHJBoss Seam 16

Zustandsbehaftete Applikationen

• Seam definiert zwei weitere Kontexte

– Conversation Scope:entspricht einem kurzfristigen Dialog

– Business Process Scope:entspricht einem langlebigen Dialog über mehrere Sitzungen.

Page 9: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

9

© 2007 Orientation in Objects GmbHJBoss Seam 17

Bijection

• steht für „bidirectional injection“oder injection und outjection

• Erweiterung des Grundgedankens„Dependency Injection“

© 2007 Orientation in Objects GmbHJBoss Seam 18

„Nähkästchen“

Java EE 5

JSP Facelets Portlet

JSF

Seam

EJB3 JBoss jBPM Hibernate

Presentation Tier

Request Controller

Context Manager

State Management

Page 10: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

10

© 2007 Orientation in Objects GmbHJBoss Seam 19

EJB3 und mehr…

• JSF als Frontend-Technologie– + einige Erweiterungen

– Facelets

– aktuell Myfaces,• ICEFaces und Ajax4JSF• Richfaces?

• JBoss jBPM (Java Business Process Management)

• JBoss Rules (Rules Engine)

© 2007 Orientation in Objects GmbHJBoss Seam 20

Facelets?

• Aus der JBoss Seam FAQ, leider nicht mehr online:

– What view templating technologies can I use?

– You can use any templating technology that support JSF. In practice,this probably means Facelets (if you take our advice) or JSP (formasochists).

Page 11: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

11

© 2007 Orientation in Objects GmbHJBoss Seam 21

Gliederung

• Was ist Seam?• Wie funktioniert Seam?• Fazit?

© 2007 Orientation in Objects GmbHJBoss Seam 22

Neues Komponentenmodell?

• wichtig: Seam hat kein eigenes Komponentenmodell

– Seam stimmt die Java EE Komponenten aufeinander ab!

– sobald Seam die Komponenten kennt, werden die Brückengeschlagen

Page 12: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

12

© 2007 Orientation in Objects GmbHJBoss Seam 23

Seam Komponentenmodell?

• Seam Komponenten werden mit Kontext Variablen mittels

@Name bzw. @Role definiert

• mittels der Annotation @Scope kann man SeamKomponenten einem Scope zuweisen

© 2007 Orientation in Objects GmbHJBoss Seam 24

Bijection

• Dependency Injection im Kontext

• Komponenten in grösseren Scopes können auf Komponenten inkleineren Scopes verweisen/ verlinken

• Bijection ist

– dynamisch,– kontextbezogen und– biderektional

Page 13: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

13

© 2007 Orientation in Objects GmbHJBoss Seam 25

Magic?

SomeInstance

user

© 2007 Orientation in Objects GmbHJBoss Seam 26

Magic?

SomeInstance

SomeOtherInstance

The user instance

Seam magic

Som

e sc

ope

Page 14: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

14

© 2007 Orientation in Objects GmbHJBoss Seam 27

Magic?

SomeInstance

SomeOtherInstance

The user instance

Seam magic

Som

e sc

ope

© 2007 Orientation in Objects GmbHJBoss Seam 28

@In …

• Bijection durch annotation– an Attribut oder Getter- und Setter-Methoden

• @In wird eine "dependency injection" vermerkt

Page 15: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

15

© 2007 Orientation in Objects GmbHJBoss Seam 29

… and @Out

• @Out wird die Instanzvariable in die Seam Laufzeitumgebungangemeldet– Outjected…

© 2007 Orientation in Objects GmbHJBoss Seam 30

Bijection

@Stateful

@Name(“changeUserPassWord")

public class ChangeUserPassWord{

@PersistenceContext

private EntityManager em;

@In @Out

private User user;

...

}

Page 16: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

16

© 2007 Orientation in Objects GmbHJBoss Seam 31

Bijection

• Möglichkeit Expression Language-Syntax in den Annotations zuverwenden

@Name("loginAction")public class LoginAction implements Login {

@In("#{user.username}")String username;...

}

© 2007 Orientation in Objects GmbHJBoss Seam 32

Servlet API Scopes

• Die Servlet API stellt lediglich den

– Request,

– Session und

– Applikation Scope zur Verfügung.

Page 17: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

17

© 2007 Orientation in Objects GmbHJBoss Seam 33

Nicht akzeptabler Zustand…

• Request und Session Scopes nicht ausreichend für dieEntwicklung von Anwendungen

– kleinere Sitzungen müssen durch den Entwickler verwaltet werden

– Dialoge fehlen in der JSF Spezifikation• Struts Shale bietet Implementierungen an…

© 2007 Orientation in Objects GmbHJBoss Seam 34

Seam Kontexte

• bisher bekannte Kontexte

– Stateless Context

– Event Context

– Page Context

– Session Context

– Application Context

Page 18: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

18

© 2007 Orientation in Objects GmbHJBoss Seam 35

Neu: Conversation Context

• ein Dialog ist ein „Unit of Work“

• Anfang und Ende eines Dialoges werden durch annotierteMethoden definiert

• Speicherort für Dialogspezifische Informationen

• Konversationen können verschachtelt sein

© 2007 Orientation in Objects GmbHJBoss Seam 36

Da guck!

• Mit Seam-Beispielen Kopfschmerzenfrei loslegen und staunen…

• Das Seam Hotelreservierungsbeispiel…

– http://localhost:8080/seam-booking/

Page 19: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

19

© 2007 Orientation in Objects GmbHJBoss Seam 37

Neu: Business Process Context

• beschreibt ein Dialog das über die Lebenszeit einer Sitzunghinaus dauern kann

• jBPM Engine ist für das Management und das Speichern derSitzungsdaten verantwortlich

© 2007 Orientation in Objects GmbHJBoss Seam 38

Anfang und Ende

• Dialog Beginn und Ende werden durch Annotationengekennzeichnet

– Bei einer Conversation:• @Begin• @End

– Bei einem Business Process:• @BeginTask• @EndTask

Page 20: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

20

© 2007 Orientation in Objects GmbHJBoss Seam 39

Übliche Seam Kontexte

Page Context

Session Context

Application Process Context

Servlet/JSP JBoss Seam

Business Process Context

Conversation Context

JBoss jBPM

J EE 5Stateless Context

© 2007 Orientation in Objects GmbHJBoss Seam 40

Komponententypen und die Scopes

• Stateful Session Bean– default ist Conversation scope

• Stateless Session Bean– default ist Stateless scope

• Entity Bean– default ist Conversation scope

• Java Bean– default ist Event scope EJB3:

Configuration by exception!

Page 21: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

21

© 2007 Orientation in Objects GmbHJBoss Seam 41

Navigation

• JSF Navigation nicht ausreichend…

• Wunschliste– Navigation grafisch gestalten

– Seitenfluss verbindlich vorgeben

– Navigation wie bisher deskriptiv, Engine soll die Arbeit übernehmen

© 2007 Orientation in Objects GmbHJBoss Seam 42

Grafische Pageflow Definition

Page 22: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

22

© 2007 Orientation in Objects GmbHJBoss Seam 43

XML Pageflow Definition<pageflow-definition name="numberGuess"> <start-page name="displayGuess" view-id="/numberGuess.jsp"> <redirect/>

<transition name="guess" to="evaluateGuess"> <action expression="#{numberGuess.guess}" /></transition>

</start-page> <decision name="evaluateGuess" expression="#{numberGuess.correctGuess}"> <transition name="true" to="win"/>

<transition name="false" to="evaluateRemainingGuesses"/> </decision> <decision name="evaluateRemainingGuesses" expression="#{numberGuess.lastGuess}">

<transition name="true" to="lose"/><transition name="false" to="displayGuess"/>

</decision> <page name="win" view-id="/win.jsp"> <redirect/>

<end-conversation /> </page> <page name="lose" view-id="/lose.jsp"> <redirect/>

<end-conversation /> </page></pageflow-definition>

© 2007 Orientation in Objects GmbHJBoss Seam 44

Pageflow Einbindung

@Name("numberGuess")@Scope(ScopeType.CONVERSATION)public class NumberGuess {

(…)

@Begin(pageflow="numberGuess")public void begin(){randomNumber = new Random().nextInt(100);guessCount = 0;biggest = 100;smallest = 1;

}

Page 23: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

23

© 2007 Orientation in Objects GmbHJBoss Seam 45

Grafische Business Prozess Definition

© 2007 Orientation in Objects GmbHJBoss Seam 46

XML jBPM Process Definition

<process-definition name="todo"><start-state name="start">

<transition to="todo"/></start-state>

<task-node name="todo"><task name="todo"description="#{todoList.description}">

<assignment actor-id="#{actor.id}"/></task>

<transition to="done"/>

</task-node>

<end-state name="done"/>

</process-definition>

Page 24: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

24

© 2007 Orientation in Objects GmbHJBoss Seam 47

Business Process Einbindung

@Name("todoList")public class TodoList {

private String description;

public String getDescription(){return description;

}public void setDescription(String description) {

this.description = description;}

@CreateProcess(definition="todo“)public void createTodo() {}

@StartTask @EndTaskpublic void done() {}

}

© 2007 Orientation in Objects GmbHJBoss Seam 48

Architekturschichten Goodbye?

@Stateless@Name("register")public class RegisterAction implements Register{

@In(create=true)private EntityManager em;

public String register(String username){

List existing = em.createQuery("select username from Userwhere username=:username")

.setParameter("username",username).getResultList();

if (existing.size()==0){em.persist(user);return "/registered.jsp"; }

}}

Page 25: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

25

© 2007 Orientation in Objects GmbHJBoss Seam 49

<h:commandButton type="submit" value="Register" action="#{register.register}"/>

Stateless Session Bean im Frontend

@Stateless@Name("register")public class RegisterAction implements Register{

public String register(String username) {

(…)

}}

© 2007 Orientation in Objects GmbHJBoss Seam 50

Validierung auf Entitäten definieren

@Entitypublic class User{

@Id @GeneratedValueprivate Long id;

@NotNullprivate String firstname;

@Length(max=25) @NotNullprivate String lastname;

@Length(max=200)private String description;

(...)

Page 26: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

26

© 2007 Orientation in Objects GmbHJBoss Seam 51

Validierung im Frontend einschalten

<f:form><table><s:validateAll>

<tr><td>Vorname</td><td><h:inputText value=“#{user.firstname}”/></td>

</tr><tr><td>Nachname</td><td><h:inputText value=“#{user.lastname}”/></td>

</tr><tr><td>Beschreibung</td><td><h:inputText value=“#{user.description}”/></td>

</tr></s:validateAll>

</table><h:messages/><h:commandButton type="submit" value=“Save„action="#{user.save}"/>

</f:form>

© 2007 Orientation in Objects GmbHJBoss Seam 52

Seam Remoting

• JavaScript Proxies werden dynamisch zur Laufzeit generiert unddem Client mittels ein Servlet zu Verfügung gestellt

• JavaScript- Entwickler können ohne technische Klimmzüge direktauf die Proxy Objekte zugreifen

• Webclients können JMS Nachrichten empfangen

Page 27: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

27

© 2007 Orientation in Objects GmbHJBoss Seam 53

Seam Remoting: Stateless Seam Komponente

@Stateless@Name(“userFinder”)public class UserFinderBean implements UserFinder {

@InPersistenceContext em;

public List<User> find(String searchString) {return em.createQuery(“from User where firstname like:search”).setParameter(“search”, searchString).getResultList();}

}

© 2007 Orientation in Objects GmbHJBoss Seam 54

Seam Remoting: Local Interface

@Local

public interface UserFinder {

@WebRemote List<User> find(String searchString);

}

Page 28: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

28

© 2007 Orientation in Objects GmbHJBoss Seam 55

Seam Remoting: Frontend

<div><input type=“text” id=“searchString”/><input type=“submit” value=“Search”

onclick=“doSearch(); return false;”/></div><div>

<table id=“results”><!– Suchergebnis anzeigen -->

</table></div>

© 2007 Orientation in Objects GmbHJBoss Seam 56

Zugriff auf Session Bean

function doSearch() {var searchString =document.getElementById(“searchString”).value;var userFinder = Seam.Component.getInstance(“userFinder”);userFinder.find(searchString, displayResults);

}

function displayResults(docs) {(...)

}

Page 29: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

29

© 2007 Orientation in Objects GmbHJBoss Seam 57

Wie?

<servlet>

<servlet-name>Seam Remoting</servlet-name>

<servlet-class>

org.jboss.seam.remoting.SeamRemotingServlet

</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Seam Remoting</servlet-name>

<url-pattern>/seam/remoting/*</url-pattern>

</servlet-mapping>

© 2007 Orientation in Objects GmbHJBoss Seam 58

Transaktionen und Cache

• Seam verschiebt die Transaktionsgrenzen vom EJBProgrammiermodell auf die Seam Komponenten

– bessere Reaktion auf die Besonderheiteneiner Webanwendung

Page 30: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

30

© 2007 Orientation in Objects GmbHJBoss Seam 59

Transaktionen und Cache

• Seam verwendet einen erweiterten Persistenzkontext, der einenganzen Dialog-Kontext umfasst

– Dadurch sind die Komponenten auch nach einem Request-Response-Zyklus ansprechbar

– kein LazyInitializationException mehr

© 2007 Orientation in Objects GmbHJBoss Seam 60

Transaktionen und Cache

• Seam verwendet zwei Transaktionskontexte in einem Response-Request-Zyklus

– Der erste umfasst das Update des Models und die Applikationslogik

– der zweite umfasst das Rendern der Ausgabe.

Page 31: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

31

© 2007 Orientation in Objects GmbHJBoss Seam 61

Seam Dialoge und der Cache

• Seam nutzt den Dialog-Kontext als intelligente Cache Lösung

– der Anwendungsentwickler muss nicht mehr stets sein Session-Kontext aufräumen

– alle benötigten Daten sind im richtigen Kontext gespeichert undwerden nach Beenden des Dialoges aus dem Speicher entfernt

– keine kontextlosen Second-Level-Caches

– Höhere Hitrate!

© 2007 Orientation in Objects GmbHJBoss Seam 62

Gliederung

• Was ist Seam?• Wie funktioniert Seam?• Fazit?

Page 32: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

32

© 2007 Orientation in Objects GmbHJBoss Seam 63

Respekt..

Keynote W-JAX 2006Tim Bray, Director of Web Technologies (Sun)

© 2007 Orientation in Objects GmbHJBoss Seam 64

Finden wir es gut?

• Klares „Jain“

;-)

Page 33: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

33

© 2007 Orientation in Objects GmbHJBoss Seam 65

Genauer?

• ☺ Vereinheitlichung des Programmiermodells

• ☺ JSF mit Dialoge (Struts Shale?)

• ☺ Remoting (nicht wirklich neu?)

• ☺ Weniger Konfigurationsaufwand

© 2007 Orientation in Objects GmbHJBoss Seam 66

Genauer?

• � „One size fit all“ Architektur– Vereinfachungen umstritten

• � „All in one package, take it or leave it“– JBPM– JBoss Rules

• � Wenig Erweiterungsmöglichkeiten

Page 34: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

34

© 2007 Orientation in Objects GmbHJBoss Seam 67

Noch Zeit für Bonusmaterial?

• Die Spring Integration!

© 2007 Orientation in Objects GmbHJBoss Seam 68

Spring Framework Integration

• Direkt from Seam!

• Ermöglicht eine einfache Migration vonSpring basierte Projekten in Seam

• JSF Erweiterungen wie Dialogkontextefür Spring-Anwendungen

Page 35: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

35

© 2007 Orientation in Objects GmbHJBoss Seam 69

Was geht?

• Spring beans können Abhängigkeiten zu Seam Komponentendefinieren

• Seam Komponenten können Abhängigkeiten zu SpringKomponenten definieren

• Spring Komponenten in Seam Komponenten umwandeln

• Spring Komponenten können Seam Kontexte zugeordnet werden

© 2007 Orientation in Objects GmbHJBoss Seam 70

Wie geht’s?

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:seam="http://jboss.com/products/seam/spring"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://jboss.com/products/seam/springhttp://jboss.com/products/seam/spring-1.2.xsd">

Page 36: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

36

© 2007 Orientation in Objects GmbHJBoss Seam 71

Spring mag Seam…

<bean id="someSpringBean" class="SomeSpringBeanClass"scope="prototype"><property name="someProperty">

<seam:instance name="someComponent"/></property>

</bean>

© 2007 Orientation in Objects GmbHJBoss Seam 72

Und Seam mag immer noch EL…

<bean id="someSpringBean" class="SomeSpringBeanClass"scope="prototype"><property name="someProperty">

<seam:instance name="#{someExpression}"/></property>

</bean>

Page 37: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

37

© 2007 Orientation in Objects GmbHJBoss Seam 73

Oder gleich richtig in den Spring Kontext?

<seam:instancename="someComponent"id="someSeamComponentInstance"/>

<beanid="someSpringBean"class="SomeSpringBeanClass"scope="prototype">

<propertyname="someProperty„ref="someSeamComponentInstance">

</bean>

© 2007 Orientation in Objects GmbHJBoss Seam 74

Scope Inkompatibilität

Mit einem Proxy die unterschiedlichen Scopes zurechtbiegen.

<seam:instanceid="seamManagedEM"name="someManagedEMComponent"proxy="true"/>

Page 38: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

38

© 2007 Orientation in Objects GmbHJBoss Seam 75

Mag Seam auch Spring???

Die Spring-JSF Integration hat schon immer für JSF Integration gesorgt. Seamerkennt die in JSF Integrierten Komponenten jetzt auch.

<application>

<variable-resolver>

org.springframework.web.jsf.DelegatingVariableResolver

</variable-resolver>

</application>

@In("#{bookingService}")

private BookingService bookingService;

© 2007 Orientation in Objects GmbHJBoss Seam 76

Metamorphose

Wandelt eine Spring Bean in eine Seam bean (singletons)

<beanid="someSpringBean"class="SomeSpringBeanClass"scope="prototype" >

<seam:component/>

</bean>

Page 39: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

39

© 2007 Orientation in Objects GmbHJBoss Seam 77

Metamorphose mit Pepp

Seam Scopes können auch unter Spring verwendet werden.

<seam:configure-scopes/>

<beanid="someSpringBean"class="SomeSpringBeanClass"scope="seam.CONVERSATION"/>

Orientation in Objects GmbH

Weinheimer Str. 6868309 Mannheim

[email protected] Reloaded

? ?

???

Fragen ?

Page 40: Orientation in Objects GmbH · 1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim JAX Reloaded info@oio.de JBoss Seam Seam – oder wie Nähe ich ein Java EE Patchwork

40

© 2007 Orientation in Objects GmbHJBoss Seam 79

) Akademie ) ) Beratung )

„Orientierung“ in Objekten

• Schulungen, Coaching, Weiterbildungsberatung, Train & Solve-Programme

• Methoden, Standards und Tools für die Entwicklung von offenen, unternehmens- weiten Systemen

• Schlüsselfertige Realisierung von Software• Unterstützung laufender Projekte• Pilot- und Migrationsprojekte

) Projekte )

Orientation in Objects GmbH

Weinheimer Str. 6868309 Mannheim

[email protected] Reloaded

Vielen Dank für IhreAufmerksamkeit !