The Time Bean Example
This is a very simple example of a JSP-page calling a Session Bean. The result looks like this:
The primary purpose of the example is to provide a very simple demonstration of an EJB session bean. It is not intended to be a complete example or one that could be used as a template for creating your own EJB session bean. This is an example using Geronimo 2.1, Java 1.5 and EJB 3.0.
Application Contents
MyTimeBean.java is an EJB that can tell time. The EJB is in the package 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.
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.
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.
<?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.
<%@ 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.
<?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.
<?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:
http://maven.apache.org
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 a Subversion repository:
svn checkout http://svn.apache.org/repos/asf/geronimo/samples/trunk/samples/mytime
(Hint: You can get svn from http://subversion.tigris.org/ )
Building
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.
- Scroll down to Deploy New from the Console Navigation panel.
- Load mytime-ear-2.0-SNAPSHOT.ear from mytime folder in to the Archive input box.
- 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.