A short overview Dipl Inform Volker Reichel VRSoft

  • Slides: 51
Download presentation
A short overview © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 1

A short overview © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 1

� Seam is a web application framework based on Java. Server Faces which aims

� Seam is a web application framework based on Java. Server Faces which aims to simplify web development by reducing XML configuration tasks � Seam web applications can be deployed in EJB 3 containers but this is not a must � Seam provides an embedded EJB 3 container � Seam does not need EJB 3 features at all. It works fine with POJO and JPA. © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 2

� This presentation is not intended to provide a full description of all the

� This presentation is not intended to provide a full description of all the features available in Seam. � It is the authors intend to present the key features and configuration hints � For feedback please send mail to seam@vrsoft. de © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 3

Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 4

Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 4

SEAM Framework JDK 1. 5 or later JSF EJB 3 1. 1 1. 2

SEAM Framework JDK 1. 5 or later JSF EJB 3 1. 1 1. 2 EJB 3 Embedded EJB 3 Container © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 5

© Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 6

© Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 6

Or • sacrifice EJB support • All Seam features available • Security • Pageflow

Or • sacrifice EJB support • All Seam features available • Security • Pageflow • Exception handling • Enhanced JSF Expression Language (JSF-EL) © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 Web container • Use embedded EJB 3 Java EE container J 2 EE container Decide on how your Seam application will be deployed • Use embedded EJB 3 Or • sacrifice EJB support 7

Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 8

Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 8

JBoss Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 9

JBoss Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 9

� Form Backing Beans �Directly supported by JSF �The targets of JSF forms �Bring

� Form Backing Beans �Directly supported by JSF �The targets of JSF forms �Bring data into JSF pages � Action Listener �Target of form submission & links �Implementation of the MVC controller �Performing business logic � Browser Accessible Components �Accessing EJBs or POJOs via Java. Script (AJAX) © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 10

POJO Stateless Session Bean Statefull Session Bean Entity Bean Message Driven Bean Component ++

POJO Stateless Session Bean Statefull Session Bean Entity Bean Message Driven Bean Component ++ -- ++ ++ -- Backing Bean ++ ++ ++ -- -- Action Listener -- ++ ++ -- -- Browser Comp. © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 11

 Container and your Seam Application © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020

Container and your Seam Application © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 12

© Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 13

© Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 13

What needs to be done to get SEAM in place? © Dipl. -Inform. Volker

What needs to be done to get SEAM in place? © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 14

© Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 15

© Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 15

What needs to be done to get a Seam application running? 1. Bundle Seam

What needs to be done to get a Seam application running? 1. Bundle Seam core libraries with your application (ear or war) 2. Configure Facelets Facelet. View. Handler (for basic Seam features) Seam. Facelet. View. Handler (enhanced JSF-EL, security) 3. Configure web application environment Seam JSF Phase Listener Seam Servlet Listener 4. Configure Seam features (optional) Seam. Filter & Filter Mapping prepares Exception Handling & Validation © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 16

con tinu ed What needs to be done to get a Seam application running?

con tinu ed What needs to be done to get a Seam application running? 5. Configure EJB components Seam. EJBInterceptor EJB Beans declarations (optional) 6. Enable optional Seam components Security Pageflow j. BPM 7. Define / Configure Behavior Actions Navigation Error Handling Conversation Management Security © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 17

� If you are developing a web application using a war-archive then put jboss-seam.

� If you are developing a web application using a war-archive then put jboss-seam. jar in myapp/WEB-INF/lib directory � If you are developing an enterprise application (ear) then put jboss-seam. jar in root of the EAR archive and reference the jboss-seam. jar module as shown on the next slide in your application. xml Replace the highlighted regions according with your application © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 18

<? xml version="1. 0" encoding="UTF-8"? > <application xmlns="http: //java. sun. com/xml/ns/javaee" xmlns: xsi="http: //www.

<? xml version="1. 0" encoding="UTF-8"? > <application xmlns="http: //java. sun. com/xml/ns/javaee" xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xsi: schema. Location="http: //java. sun. com/xml/ns/javaee/application_5. xsd" version="5"> <display-name>My. App</display-name> <module> <web-uri>myapp. war</web-uri> <context-root>/myapp</context-root> </web> </module> <ejb>myapp-ejb. jar</ejb> </module> <!-- Seam and EL --> <module> <java>jboss-seam. jar</java> </module> </application> © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 19

� Put �Java. Server Faces (jsf-facelets. jar) �Expression Language API (el-api. jar �EL-Reference Implementation

� Put �Java. Server Faces (jsf-facelets. jar) �Expression Language API (el-api. jar �EL-Reference Implementation (el-ri. jar) into your webapp classpath i. e. WEB-INF/lib � Set view-handler in faces-config. xml to �com. sun. facelets. Facelet. View. Handler If you want basic Facelet support �org. jboss. seam. ui. facelet. Seam. Faclet. View. Handler If you want enhanced features like JSF EL, validation, security © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 20

� Seam needs to register itself with JSF in order to receive events during

� Seam needs to register itself with JSF in order to receive events during request processing. Therfore we have to add a Seam. Phase. Listener to faces-config. xml. <faces-config> … <lifecycle> <phase-listener> org. jboss. seam. jsf. Seam. Phase. Listener </phase-listener> </lifecycle> … </faces-config> © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 21

� Seam contexts and core services are managed by a Seam. Servlet. Listener which

� Seam contexts and core services are managed by a Seam. Servlet. Listener which you have to setup in web. xml. <web-app> … <listener> <listener-class> org. jboss. seam. servlet. Seam. Listener </listener-class> </listener> … </web-app> © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 22

� Some Seam features which can be configured in components. xml need a basic

� Some Seam features which can be configured in components. xml need a basic web filter � you have to add the definitions shown on the next slide to web. xml © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 23

<web-app> … <servlet> <servlet-name>Seam Resource Servlet</servlet-name> <servlet-class>org. jboss. seam. servlet. Resource. Servlet</servlet-class> </servlet> <servlet-mapping>

<web-app> … <servlet> <servlet-name>Seam Resource Servlet</servlet-name> <servlet-class>org. jboss. seam. servlet. Resource. Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Seam Resource Servlet</servlet-name> <url-pattern>/seam/resource/*</url-pattern> </servlet-mapping> <filter-name>Seam Filter</filter-name> <filter-class>org. jboss. seam. web. Seam. Filter</filter-class> </filter> <filter-mapping> <filter-name>Seam Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> …</web-app> © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 24

� Validation � multi-part form submission � Validation � And other features are only

� Validation � multi-part form submission � Validation � And other features are only available when jboss-seam-ui is in the classpath of the webapp. Therefore you have to put jboss-seam-ui. jar into webapp/WEB-INF/lib directory. © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 25

� In order to use Seam EJB components you have to install the Seam

� In order to use Seam EJB components you have to install the Seam EJB Interceptor which is done your ejb-jar. xml file. <ejb-jar> … <assembly-descriptor> <interceptors> <interceptor-class>org. jboss. seam. ejb. Seam. Interceptor</interceptor-class> </interceptor> <interceptor-binding> <ejb-name>*</ejb-name> <interceptor-class>org. jboss. seam. ejb. Seam. Interceptor</interceptor-class> </interceptor-binding> </assembly-descriptor> … </ejb-jar> © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 26

� Step 5 is a necessary prerequisite for this step! � Components. xml is

� Step 5 is a necessary prerequisite for this step! � Components. xml is used to configure Seam components. Either predefined ones or your own components. � Typically you will only enable predefined components like security here. � Your own components are made accessible via the @Name annotation in your source! But if you like you can configure your components here also. © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 27

� If you are going with EJB 3. 0 you have to provide a

� If you are going with EJB 3. 0 you have to provide a JNDI pattern for the lookup of these EJBs. <components> … <component name=“org. jboss. seam. core. init”> <property name=“jndi. Pattern”>my. App/#{ejb. Name}/local</property> </component> … </components> #{ejb. Name} will expand to your EJB’s name during runtime Make sure seam. properties is in your META-INF directory. The file does not need to have contents © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 28

� Behavior is specified in pages. xml which is optional � There are �

� Behavior is specified in pages. xml which is optional � There are � Page Trigger activity before a page is invoked � Page navigation Same as navigation rules in faces-config. xml Since faces-config. xml is for Facelets page navigation should be defined here for consistency � Error actions handling redirect to a page, show JSF message, end conversation � Manage conversation properties Start, end � Security declare security constraints on pages, roles, users © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 29

JBoss Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 30

JBoss Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 30

Contexts provide a mechanism for data access. Seam provides the following contexts: Session Spans

Contexts provide a mechanism for data access. Seam provides the following contexts: Session Spans Application Spans belongs to the page Conversation Spans as long as the current HTTP-Request Page Data as long as the web application is running Request Spans the full HTTP-Session across several HTTP-Requests Workspace Spans several sessions (i. e. users) and conversations (more like a business process) © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 31

Implicit v are default v each request is wrapped in an implicit conversation Explicit

Implicit v are default v each request is wrapped in an implicit conversation Explicit Java pages. xml @Begin / @End on method Conversation. XXX begin end join nest JSF Page © Dipl. -Inform. Volker Reichel, VRSoft, 2007 @action=“#{conversation. XXXX}” in <page>-Element v f: param conversation. Propagation or v @propagation in seam: link-Element 9/18/2020 32

JBoss Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 33

JBoss Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 33

Restore View Apply Request Values Determine target view & create / restore it Update

Restore View Apply Request Values Determine target view & create / restore it Update UI components with request data Render Response Invoke Application Refresh the view Run application callbacks / action listeners © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 Process Validations Run registered validators Update Model Values Update managed beans 34

JBoss Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 35

JBoss Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 35

� Seams Pageflow uses JBoss’s j. BPMs Process Definition Language (j. PDL) � j.

� Seams Pageflow uses JBoss’s j. BPMs Process Definition Language (j. PDL) � j. PDL has a different syntax than BPEL � j. PDL can be used to describe pageflows � j. PDL is different from <navigation-rule>Syntax � j. PDL consists of �States �Events / Outcomes �Transitions © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 36

� Can be mixed with JSF navigation � By default disables “back” button functionality

� Can be mixed with JSF navigation � By default disables “back” button functionality � Good for modal or wizard-driven UI flows � Good separation of flow and UI © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 37

� Add <component class=“org. jboss. seam. core. Jbpm”> <property name=“pageflow. Definitions”> <value>flow_A. jpdl. xml</value>

� Add <component class=“org. jboss. seam. core. Jbpm”> <property name=“pageflow. Definitions”> <value>flow_A. jpdl. xml</value> <value>flow_B. jpdl. xml</value> </property> </component> to components. xml � Put the flow file (*. jpdl. xml) into the web apps classpath. For security reasons flows should be stored in <webapp>/WEB-INF/classes © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 38

j. PDL JSF/Seam State A JSF View A Event E Outcome X Action. Listener.

j. PDL JSF/Seam State A JSF View A Event E Outcome X Action. Listener. action. Method return value © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 State B JSF View B 39

Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 40

Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 40

� Provided as predefined component (identity) � Delegates implementation to user-defined class � Supports

� Provided as predefined component (identity) � Delegates implementation to user-defined class � Supports declarative security settings �i. e. JRules (drools. jar) � Fine-grained �Finest security level is method & instance � Needs facelets � Needs jboss-seam-ui. jar in classpath � Needs Seam. Facelet. View. Handler © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 41

Pages Components Methods <page …> <restrict> </page> <page login-required=“true”> … </page> pages. xml ©

Pages Components Methods <page …> <restrict> </page> <page login-required=“true”> … </page> pages. xml © Dipl. -Inform. Volker Reichel, VRSoft, 2007 @Restrict annotation in Java Code either on class or individual method *. java 9/18/2020 42

© Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 43

© Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 43

Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 44

Seam © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 44

JSF Page POJO Facade Session EJB POJO Facade Entity EJB Managed Bean Session EJB

JSF Page POJO Facade Session EJB POJO Facade Entity EJB Managed Bean Session EJB JSF Page Automatically wrapped in Managed Bean © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 Entity EJB 45

Seam Features © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 46

Seam Features © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 46

� Injection allows passing information from outside into an object � Injection is executed

� Injection allows passing information from outside into an object � Injection is executed typically once during initialization of the object � Bijection passes information into an object and allows information to be exported from an object � Bijection happens whenever needed not only at initialization time � Bijections is controlled via @in / @out annotations © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 47

© Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 48

© Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 48

� Situation � JBoss 4. 2. x and 5. x are using JSF Reference

� Situation � JBoss 4. 2. x and 5. x are using JSF Reference Implementation (which is JSF 1. 2) while 4. 0. 5 uses Apache My. Faces � Solution � Make sure “My. Faces” listener (org. apache. myfaces. webapp. Startup. Servlet. Context. Listener) is commented out in the listener sections of web. xml � Remove “el-ri. jar” and “el-api. jar” from application. xml � Make sure you are using the application and lifecycle settings provided on the next slide. Please check the namespace declaration and version attribute! © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 49

<faces-config version="1. 2" xmlns="http: //java. sun. com/xml/ns/javaee" xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xsi:

<faces-config version="1. 2" xmlns="http: //java. sun. com/xml/ns/javaee" xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xsi: schema. Location="http: //java. sun. com/xml/ns/javaee/web-facesconfig_1_2. xsd"> <application> <el-resolver>org. jboss. seam. jsf. Seam. ELResolver</el-resolver> </application> <lifecycle> <phase-listener> org. jboss. seam. jsf. Seam. Phase. Listener </phase-listener> </lifecycle> <!-- more configurations go here --> </faces-config> © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 50

� Software �JBoss Seam http: //labs. jboss. com/jbossseam �JBoss AS http: //labs. jboss. com/jbossas

� Software �JBoss Seam http: //labs. jboss. com/jbossseam �JBoss AS http: //labs. jboss. com/jbossas � Books �Practical JBoss Seam Projects, Jim Farley, Apress �JBoss Seam Simplicity and Power Beyond Java EE, Michael Juntao Yuan & Thomas Heute, Prentice Hall © Dipl. -Inform. Volker Reichel, VRSoft, 2007 9/18/2020 51