Download - JBoss Seam vs JSF
![Page 1: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/1.jpg)
Markos Fragkakis JHUG meeting 20 Nov 2010
![Page 2: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/2.jpg)
My experience with JBoss Seam and JSF: • Used plain JSF 1.2 for prototype (~1 month) • Used Seam 2.2 in actual implementation (~9 months)
What is this presentation about? • Common tasks where Seam makes life easier
![Page 3: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/3.jpg)
Separated business logic in:◦ JSF managed beans◦ Business components (EJBs)
EJB lookupContext context = new InitialContext(); context.lookup("java:comp/env/...");
![Page 4: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/4.jpg)
One kind of “stuff ” Seam Components ◦ POJOs ◦ EJB ◦ Entities
Seam unifies Java EE: ◦ Dependency Injection
◦ Transactions
◦ Security
No separation between front-end components and business components.
Define your own architecture
![Page 5: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/5.jpg)
JSF ◦ Through faces-config.xml
Java EE: @EJB ◦ Servlets, Filters, Listeners ◦ Tag handlers, tag library
event listeners … but not in JSF Managed
beans (backing beans)
faces-config.xml
<managed-bean> <managed-bean-name>myBean1</managed-bean-name> <managed-bean-class>mypackage.MyBean1</managed-
bean-class> <managed-bean-scope>application</managed-bean-
scope></managed-bean>
<managed-bean> <managed-bean-name>myBean2</managed-bean-name> <managed-bean-class>mypackage.MyBean2</managed-
bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>myBean1</property-name> <value>#{myBean1}</value> </managed-property></managed-bean>
![Page 6: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/6.jpg)
Injection of Seam components ◦ EJB ◦ Entities ◦ POJOs
Outjection
@Name("myBean")@Scope(ScopeType.EVENT)public class MyBean {
@In(create=true) private AccountFacadeRemote accountFacade;
@In(scope=ScopeType.CONVERSATION) @Out(scope=ScopeType.CONVERSATION) private AccountEntity accountEntity;
@In @Out private SomePojo somePojo; …
![Page 7: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/7.jpg)
State: ◦ Server (i.e. session) ◦ Client (i.e. hidden fields) ◦ Combination
JSF ◦ Request parameters
(i.e. hidden fields) ◦ Cookies ◦ URLs: http://jhug.gr/user/markos
Maybe a problem: object != object
![Page 8: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/8.jpg)
JSF UI Component tree and state ◦ Tomahawk <t:saveState> ◦ Richfaces <a4j:keepAlive>
If client-side state: object != object
![Page 9: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/9.jpg)
Session ◦ Problems: Increased memory usage Scalability problems Need to consider
multiple tabs
![Page 10: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/10.jpg)
Seam scopes: ◦ Event (Request) ◦ Session ◦ Application ◦ Page ◦ Stateless ◦ Business Process ◦ Conversation
What is a conversation? ◦ Lives for multiple requests ◦ Stateful, but not session
![Page 11: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/11.jpg)
![Page 12: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/12.jpg)
Conversation end / timeout Aggressive management
![Page 13: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/13.jpg)
Application Security: ◦ Page-level security ◦ Component-level security
JSF does not specify security Can a filter be used? ◦ Does View Handler use the
Servlet Request Dispatcher? JSP: Yes
<filter-mapping> <filter-name>My Security Filter</filter-name> <url-pattern>/view2.jsp</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
Facelets: No
![Page 14: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/14.jpg)
Both Page-level and Component-level security Some examples: ◦ Page-level authentication / authorization
<pages login-view-id="/login.xhtml"> <page view-id=”admin*" login-required="true”>
<restrict>#{s:hasRole('admin')}</restrict> </page> </pages>
<security:identity authenticate-method="#{authManager.authenticate}"/>
◦ Page customization<s:link view="/jhug/deleteMember.xhtml" value="Delete" rendered="#{s:hasRole('admin') || s:hasRole(’usermanager')}"/> ◦ Component-level authorization
@Name("myBean")@Scope(ScopeType.SESSION)@Restrict("#{s:hasRole('admin')}") public class MyBean implements Serializable {…
![Page 15: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/15.jpg)
<h:commandLink value="Click here” action="#{myBean.method}"> <f:setPropertyActionListener target="#{myBean.methodParameter}” value="#{value}" /></h:commandLink>
public class MyBean { private String param;
public String method() { if("something".equals(param)) { return "ok"; } return "notOk"; }
public String getParam() { return param; } public void setParam(String param) { this.param = param; }}
![Page 16: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/16.jpg)
<h:commandLink value="Click here” action="#{myBean.method(value)}” />
@Name("myBean")public class MyBean {
public String method(String param) { if("something".equals(param)) { return "ok"; } return "notOk"; }
}
![Page 17: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/17.jpg)
Help: ◦ Good books ◦ Extensive, up-to-date documentation ◦ Old forum, somewhat inactive ◦ StackOverflow.com
Issues: ◦ Works best on JBoss AS ◦ Seam 2 issues are resolved slowly (Focus on Seam 3)
![Page 18: JBoss Seam vs JSF](https://reader033.vdocuments.site/reader033/viewer/2022051313/548c4669b479590f0d8b6263/html5/thumbnails/18.jpg)
?