This sample demonstrates a calender based timer service that triggers certain callbacks to enterprise beans at a specified time or interval programmatically. The cron-style timer service is managed by the EJB container and can be created using @Schedule annotation.
Also this sample introduces the annotation way to define servlets, stateless session beans and Persistence Context.
ejbtimer-javaee6 application consists of following list of packages and classes.
- ShowLog.java displays the detailed activities of all created timer.
- ScheduleTask.java is a stateless session bean which creates timers automatically.
- logFacade.java is a stateless session bean which retrieves the detailed activities of all timers.
- Log.java is a persistent unit to preserve each timers' activity.
The list of web application files in the application is depicted in the following.
geronimo-web.xml specifies the module's information and the url for the web application
Information about the project sucha as module's unique identification, dependencies is described inside the <sys:environment/> tags. It is a good practise to give a module an unique identification, so that it can later be referenced by some other deployable application. This module is in the group org.apache.geronimo.samples. The path specified in the <context-root> tag will be the entry point of this web application. Therefore you can access this web application at http://<hostname>:<port>/ejbtimer-javaee6.
ShowLog.java is a servlet component which is annotated with @WebServlet and defines the url pattern using urlPatterns attribute. And a business interface of the session bean logFacade is injected using @ejb annotation so that the servlet could invoke
findAll() methods from logFacade.
The WebServlet annotation is used to annotate a servlet to respond to certain requests on a particular web url in the application. A class annotated with @WebServlet extends the class javax.servlet.http.ServletContextListener and must have the
Currently,there are " + facade.count() + " log records."); List
|Log ID||Event Time||Event|
|" + log.getId() + "||" + log.getCreateTime() + "||" + log.getEvent() + "|
scheduleTask is a stateless session bean with multiple methods annotated with @Schedule annotations. Each method will be invoked according to the attributes specified to @Schedule. Also, there are two specified methods
logIntoDB(String event) and
clearLogs() to perform actions on an entity
EJBTimerPU injected with @PersistenceContext annotation.
logFacade is a stateless session bean to define another two actions on an entity
EJBTimerPU, where both methods are invoked from the servlet component ShowLog.
persistence.xml is the configuration file to define a persistence unit named
EJBTimerPU, which represents a table named OPENJPASEQ in a derby database
Log.java is an entity bean representing a primary key class of the database table. A primary key class must implement the
equals(Object object) methods.
Get the source code
Please reference Samples General Information for information on obtaining and building the source for this and other samples.
Build the web application
Once all the sources get checked out the next step is to build ejbtimer-javaee6. It requires Maven 2 for building the binaries.
From the <ejbtimer-javaee6_home> directory run the following command.
mvn clean install
This process will take a couple of minutes. The binaries will be generated in the corresponding target directory .
Deploy the web 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 ejbtimer-javaee6-war-3.0-SNAPSHOT.war from ejbtimer-javaee6-war/target folder in to the Archive input box.
- Press Install button to deploy application in the server.
Test the web application
The app is visible at http://localhost:8080/ejbtimer-javaee6/
This page is about what kind of timers defined in the sample application and for each task, an log entry is created.
Click Check the log list, you will see all log info with specific time and event details.