The Time Bean Example

This is an example of a JSP-page calling a Session Bean. The result looks like this:
I have tried to strip of everything just to make this example as easy as possible to understand. This is an example using Geronimo 2.0, Java 1.5 and EJB 3.0.

Application Contents

MyTimeBean.java is an EJB that can tell time. I have put my EJB in a package that I call org.apache.geronimo.samples.mytimepak. By using the @Stateless annotation Geronimo will recognize that this is a stateless session bean. There is no need for a ejb-jar.xml.

javasolidMyTimeBean.java package org.apache.geronimo.samples.mytimepak; import javax.ejb.Stateless; @Stateless public class MyTimeBean implements MyTimeLocal { public String getTime() { String s = new java.util.Date().toString(); return s; } }

MyTimeLocal.java is the Local interface. As this EJB will only be used from a JSP-page that is running in the same server (same JVM) I use a Local interface that do not make use of the network.

javasolidMyTimeLocal.java package org.apache.geronimo.samples.mytimepak; public interface MyTimeLocal { public java.lang.String getTime() ; }

openejb-jar.xml does nothing but specifies the module's information.

xmlsolidopenejb-jar.xml <?xml version="1.0" encoding="UTF-8"?> <openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1" xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.1" xmlns:pkgen="http://www.openejb.org/xml/ns/pkgen-2.0" xmlns:sec="http://geronimo.apache.org/xml/ns/security-1.1" xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2"> <sys:environment> <sys:moduleId> <sys:groupId>${pom.groupId}</sys:groupId> <sys:artifactId>${pom.artifactId}</sys:artifactId> <sys:version>${version}</sys:version> <sys:type>jar</sys:type> </sys:moduleId> </sys:environment> </openejb-jar>

index.jsp utilizes the MyTimeBean to tell time.

javasolidindex.jsp <%@ page contentType="text/html" import="org.apache.geronimo.samples.mytimepak.*, javax.naming.* " %> <html<head><title>Time</title></head><body> <% String s="-"; // Just declare a string try { // This creates a context, it can be used to lookup EJBs. Using normal RMI you would // have to know port number and stuff. The InitialContext holds info like // server names, ports and stuff I guess. Context context = new InitialContext(); // MyTimeLocalHome is a reference to the EJB MyTimeLocal myTimeLocal = (MyTimeLocal)context.lookup("java:comp/env/ejb/MyTimeBean"); // So, just go ahead and call a method (in this case the only method). s = myTimeLocal.getTime(); } catch (Exception e) { s=e.toString(); } %> This is the time returned from the EJB: <%=s%> </body></html>

geronimo-web.xml specifies the module's information and the url for the web-app.

xmlsolidgeronimo-web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.1" xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.1" xmlns:sec="http://geronimo.apache.org/xml/ns/security-1.1" xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.1"> <sys:environment> <sys:moduleId> <sys:groupId>${pom.groupId}</sys:groupId> <sys:artifactId>${pom.artifactId}</sys:artifactId> <sys:version>${version}</sys:version> <sys:type>war</sys:type> </sys:moduleId> </sys:environment> <context-root>/mytime</context-root> </web-app>

web.xml references the EJB present in the WEB-INF/classes/org/apache/geronimo/samples/mytimepak directory.

xmlsolidweb.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>MyTimeWeb</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- To refer local EJB's --> <ejb-local-ref> <ejb-ref-name>ejb/MyTimeBean</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <local>org.apache.geronimo.samples.mytimepak.MyTimeLocal</local> </ejb-local-ref> </web-app>

Tools Used

Apache Maven 2

Maven is a popular open source build tool for enterprise Java projects, designed to take much of the hard work out of the build process. Maven uses a declarative approach, where the project structure and contents are described, rather than the task-based approach used in Ant or in traditional make files, for example. This helps enforce company-wide development standards and reduces the time needed to write and maintain build scripts. The declarative, lifecycle-based approach used by Maven 1 is, for many, a radical departure from more traditional build techniques, and Maven 2 goes even further in this regard. Maven 2 can be download from the following URL:

Building, and Deploying the application

Download the mytime application from the following link:
MyTime (Note: This may not be the latest. Checkout the source code below for the latest.)

After decompressing the given file, the mytime directory will be created.

Source Code

You can checkout the source code of this sample from SVN:

svn checkout http://svn.apache.org/repos/asf/geronimo/samples/trunk/samples/mytime

(Hint: If you are on Windows you will need to obtain svn from http://subversion.tigris.org/ )


Use a command prompt to navigate into the mytime directory and just give mvn clean install site command to build. It will create the mytime-ear-2.0-SNAPSHOT.ear under the mytime folder. Now, you are ready to deploy mytime application in the Geronimo Application server.

Deploying the Application

Deploying sample application is pretty straight forward as we are going to use the Geronimo Console.

  1. Scroll down to Deploy New from the Console Navigation panel.
  2. Load mytime-ear-2.0-SNAPSHOT.ear from mytime folder in to the Archive input box.
  3. Press Install button to deploy application in the server.

MyTime Web Application

To test the sample web application open a browser and type http://localhost:8080/mytime.

  • No labels