Upload
markos-fragkakis
View
7.877
Download
1
Embed Size (px)
DESCRIPTION
A comparison between JBoss Seam 2.2 and JSF 1.2 vanilla. I gave this presentation at the JHUG event of the 20 November 2010.
Citation preview
Markos Fragkakis JHUG meeting 20 Nov 2010
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
Separated business logic in:◦ JSF managed beans◦ Business components (EJBs)
EJB lookupContext context = new InitialContext(); context.lookup("java:comp/env/...");
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
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>
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; …
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
JSF UI Component tree and state ◦ Tomahawk <t:saveState> ◦ Richfaces <a4j:keepAlive>
If client-side state: object != object
Session ◦ Problems: Increased memory usage Scalability problems Need to consider
multiple tabs
Seam scopes: ◦ Event (Request) ◦ Session ◦ Application ◦ Page ◦ Stateless ◦ Business Process ◦ Conversation
What is a conversation? ◦ Lives for multiple requests ◦ Stateful, but not session
Conversation end / timeout Aggressive management
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
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 {…
<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; }}
<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"; }
}
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)
?