Upload
bertha-harmon
View
219
Download
0
Tags:
Embed Size (px)
Citation preview
A short overview
04/19/23 1© Dipl.-Inform. Volker Reichel, VRSoft,
2007
Seam is a web application framework based on JavaServer Faces which aims to simplify web development by reducing XML configuration tasks
Seam web applications can be deployed in EJB3 containers but this is not a must
Seam provides an embedded EJB3 container
Seam does not need EJB3 features at all. It works fine with POJO and JPA.
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 2
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 [email protected]
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 3
Seam
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft,
2007 4
04/19/23 5© Dipl.-Inform. Volker Reichel, VRSoft, 2007
04/19/23 6© Dipl.-Inform. Volker Reichel, VRSoft, 2007
Decide on how your Seam application will be deployed
04/19/23 7© Dipl.-Inform. Volker Reichel, VRSoft, 2007
Seam
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft,
2007 8
JBoss Seam
04/19/23 9© Dipl.-Inform. Volker Reichel, VRSoft,
2007
Form Backing BeansDirectly supported by JSFThe targets of JSF formsBring data into JSF pages
Action ListenerTarget of form submission & links Implementation of the MVC controllerPerforming business logic
Browser Accessible ComponentsAccessing EJBs or POJOs via JavaScript
(AJAX)
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 10
POJO StatelessSession Bean
StatefullSession Bean
EntityBean
Message DrivenBean
Component
++ -- ++ ++ -- Backing Bean
++ ++ ++ -- -- Action Listener
-- ++ ++ -- -- Browser Comp.
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 11
Container
and your
Seam Application
04/19/23 12© Dipl.-Inform. Volker Reichel, VRSoft, 2007
04/19/23 13© Dipl.-Inform. Volker Reichel, VRSoft, 2007
What needs to be done to get SEAM in place?
04/19/23 14© Dipl.-Inform. Volker Reichel, VRSoft, 2007
04/19/23 15© Dipl.-Inform. Volker Reichel, VRSoft, 2007
What needs to be done to get a Seam application running?
1. Bundle Seam core libraries with your application (ear or war)
2. Configure FaceletsFaceletViewHandler (for basic Seam features)SeamFaceletViewHandler (enhanced JSF-EL, security)
3. Configure web application environmentSeam JSF Phase ListenerSeam Servlet Listener
4. Configure Seam features (optional)SeamFilter & Filter Mapping prepares Exception Handling & Validation
04/19/23 16© Dipl.-Inform. Volker Reichel, VRSoft, 2007
What needs to be done to get a Seam application running?
5. Configure EJB componentsSeamEJBInterceptorEJB Beans declarations (optional)
6. Enable optional Seam componentsSecurityPageflowjBPM
7. Define / Configure BehaviorActionsNavigationError HandlingConversation ManagementSecurity
continued
04/19/23 17© Dipl.-Inform. Volker Reichel, VRSoft, 2007
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.xmlReplace the highlighted regions according with your application
04/19/23 18© Dipl.-Inform. Volker Reichel, VRSoft, 2007
<?xml version="1.0" encoding="UTF-8"?><application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" version="5"> <display-name>MyApp</display-name> <module> <web> <web-uri>myapp.war</web-uri> <context-root>/myapp</context-root> </web> </module> <module> <ejb>myapp-ejb.jar</ejb> </module> <!-- Seam and EL --> <module> <java>jboss-seam.jar</java> </module> </application>
04/19/23 19© Dipl.-Inform. Volker Reichel, VRSoft, 2007
Put JavaServer Faces (jsf-facelets.jar)Expression Language API (el-api.jarEL-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.FaceletViewHandler
If you want basic Facelet support
org.jboss.seam.ui.facelet.SeamFacletViewHandler If you want enhanced features like JSF EL,
validation, security04/19/23 20© Dipl.-Inform. Volker Reichel, VRSoft, 2007
Seam needs to register itself with JSF in order to receive events during request processing. Therfore we have to add a SeamPhaseListener to faces-config.xml.
<faces-config>… <lifecycle> <phase-listener>
org.jboss.seam.jsf.SeamPhaseListener </phase-listener> </lifecycle>…</faces-config>
04/19/23 21© Dipl.-Inform. Volker Reichel, VRSoft, 2007
Seam contexts and core services are managed by a SeamServletListener which you have to setup in web.xml.
<web-app>… <listener> <listener-class>
org.jboss.seam.servlet.SeamListener </listener-class> </listener>…</web-app>
04/19/23 22© Dipl.-Inform. Volker Reichel, VRSoft, 2007
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
04/19/23 23© Dipl.-Inform. Volker Reichel, VRSoft, 2007
<web-app> … <servlet> <servlet-name>Seam Resource Servlet</servlet-name> <servlet-class>org.jboss.seam.servlet.ResourceServlet</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.SeamFilter</filter-class> </filter> <filter-mapping> <filter-name>Seam Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>…</web-app>
04/19/23 24© Dipl.-Inform. Volker Reichel, VRSoft, 2007
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.
04/19/23 25© Dipl.-Inform. Volker Reichel, VRSoft, 2007
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> <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class> </interceptor>
<interceptor-binding> <ejb-name>*</ejb-name> <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class> </interceptor-binding> </assembly-descriptor>…</ejb-jar>
04/19/23 26© Dipl.-Inform. Volker Reichel, VRSoft, 2007
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.
04/19/23 27© Dipl.-Inform. Volker Reichel, VRSoft, 2007
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=“jndiPattern”>myApp/#{ejbName}/local</property> </component>…</components>
#{ejbName} 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
04/19/23 28© Dipl.-Inform. Volker Reichel, VRSoft, 2007
Behavior is specified in pages.xml which is optional
There are Page actions
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 handling
redirect to a page, show JSF message, end conversation
Manage conversation properties Start, end
Security declare security constraints on pages, roles, users
04/19/23 29© Dipl.-Inform. Volker Reichel, VRSoft, 2007
JBoss Seam
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft,
2007 30
Contexts provide a mechanism for data access. Seam provides the following contexts:
Session Spans the full HTTP-Session
Application Spans as long as the web application is running
Request Spans as long as the current HTTP-Request
Page Data belongs to the page
Conversation Spans across several HTTP-Requests
Workspace Spans several sessions (i.e. users) and conversations
(more like a business process)
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 31
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 32
Implicit Explicit
are default each request is wrapped in an implicit conversation
JSFPage
pages.xml
Java
@Begin / @End on method
f:param conversationPropagationor @propagation in seam:link-Element
@action=“#{conversation.XXXX}” in <page>-Element
Conversation.XXXbeginendjoinnest
JBoss Seam
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft,
2007 33
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 34
RestoreView
Apply Request Values
ProcessValidation
s
UpdateModelValues
InvokeApplicatio
n
RenderResponse
Determine target view & create / restore it
Update managed beans
Run application callbacks / action listeners
Refresh the view
Run registered validators
Update UI components with request data
JBoss Seam
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft,
2007 35
Seams Pageflow uses JBoss’s jBPMs Process Definition Language (jPDL)
jPDL has a different syntax than BPEL jPDL can be used to describe pageflows jPDL is different from <navigation-rule>-
Syntax jPDL consists of
StatesEvents / OutcomesTransitions
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 36
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
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 37
Add
<component class=“org.jboss.seam.core.Jbpm”> <property name=“pageflowDefinitions”> <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
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 38
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 39
State A
State B
Event E
Outcome X
JSF View
A
JSF View
B
ActionListener.actionMethod
Method return value
jPDL
JSF/Seam
Seam
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft,
2007 40
Provided as predefined component (identity)
Delegates implementation to user-defined class
Supports declarative security settings i.e. JRules (drools.jar)
Fine-grained security Finest level is method & instance
Needs facelets Needs jboss-seam-ui.jar in classpath Needs SeamFaceletViewHandler
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 41
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 42
Pages ComponentsMethod
s
<page …> <restrict> </restrict></page>
<page login-required=“true”> …</page>
pages.xml
@Restrict annotationin Java Code either on class or individual method
*.java
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft,
2007 43
Seam
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft,
2007 44
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 45
JSF Page
JSF Page
JSF Page
JSF Page
POJO Facad
e
POJO Facad
e
Session EJB
Entity EJB
Session EJB
Entity EJB
Managed Bean
Automatically wrapped in Managed Bean
Seam Features
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft,
2007 46
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
04/19/23© Dipl.-Inform. Volker Reichel, VRSoft, 2007 47
04/19/23 48© Dipl.-Inform. Volker Reichel, VRSoft,
2007
Situation JBoss 4.2.x and 5.x are using JSF Reference
Implementation (which is JSF 1.2) while 4.0.5 uses Apache MyFaces
Solution Make sure “MyFaces” listener
(org.apache.myfaces.webapp.StartupServletContextListener) 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!
04/19/23 49© Dipl.-Inform. Volker Reichel, VRSoft, 2007
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> <application>
<el-resolver>org.jboss.seam.jsf.SeamELResolver</el-resolver> </application>
<lifecycle> <phase-listener>
org.jboss.seam.jsf.SeamPhaseListener</phase-listener>
</lifecycle>
<!-- more configurations go here -->
</faces-config>
04/19/23 50© Dipl.-Inform. Volker Reichel, VRSoft, 2007
Software JBoss Seam http://labs.jboss.com/jbossseam
JBoss AS http://labs.jboss.com/jbossas
BooksPractical JBoss Seam Projects, Jim Farley,
Apress JBoss Seam Simplicity and Power Beyond
Java EE, Michael Juntao Yuan & Thomas Heute, Prentice Hall
04/19/23 51© Dipl.-Inform. Volker Reichel, VRSoft, 2007