8/02/2011

Simple Example of JSF and EJB 3.1

This is a very simple example of a JSF 2.0 managed bean invoking EJB 3.1 local singleton EJB. Everything is packaged into a test.war file, and deployed to GlassFish.

test.war consists of 4 entries:

WEB-INF/classes/test/HelloEJB.class
WEB-INF/classes/test/HelloJSFBean.class
WEB-INF/web.xml
index.xhtml
index.xhtml page:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<ui:composition>
<h:head>
<h1><h:outputText value="jsf-ejb example" /></h1>
</h:head>

<h:body>
<h:form id="form">
<h:outputLabel value="helloEJB returned message: "/>
<h:outputText value="#{HelloJSFBean.message}"/>
</h:form>
</h:body>
</ui:composition>
</html>
HelloJSFBean managed bean:
package test;
import javax.faces.bean.*;
import javax.ejb.*;

@ManagedBean(name="HelloJSFBean")
@RequestScoped
public class HelloJSFBean implements java.io.Serializable {
@EJB
private HelloEJB helloEJB;

public String getMessage() {
return helloEJB.hello();
}
}
HelloEJB singleton bean:
package test;
import javax.ejb.*;

@Singleton
public class HelloEJB {
public String hello() {
return "Hello from " + this;
}
}
web.xml:
<web-app 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-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
</web-app>
To run the webapp:
curl http://localhost:8080/test/faces/index.xhtml

helloEJB returned message: Hello from test.HelloEJB@1326d2fe