Hi,
I implemented a sample
EJB timer stateless session bean.
in the ejbTimeout method I am printing hello world message. No one is looking up the bean, however the hello world message is printed at regular intervals. Please clarify how this is happening :
Below is the code:
============================================
package ejbs;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.TimedObject;
import javax.ejb.Timer;
import javax.ejb.TimerHandle;
import javax.ejb.TimerService;
/**
* Bean implementation class for Enterprise Bean: MyTimer
*/
public class MyTimerBean implements javax.ejb.SessionBean,TimedObject {
private SessionContext mySessionCtx;
private TimerHandle timerHandle = null;
/**
* getSessionContext
*/
public SessionContext getSessionContext() {
return mySessionCtx;
}
/**
* setSessionContext
*/
public void setSessionContext(SessionContext ctx) {
mySessionCtx = ctx;
}
/**
* ejbCreate
*/
public void ejbCreate() throws CreateException {
}
/**
* ejbActivate
*/
public void ejbActivate() {
}
/**
* ejbPassivate
*/
public void ejbPassivate() {
}
/**
* ejbRemove
*/
public void ejbRemove() {
}
public void initializeTimer(Date firstDate,long timeout,
String timerName)
{
try {
// Create Your Timer
TimerService ts = mySessionCtx.getTimerService();
Timer timer =
ts.createTimer(firstDate, timeout, timerName);
System.out.println("Timer created at " + new Date(System.currentTimeMillis()) +" with a timeout: " + timeout +
" and with info: " + timerName);
// Store the TimerHandle, which is seriablizable
// and which can be used
// to retrieve the timer values whenever required later.
// Class-level attribute:
timerHandle = timer.getHandle();
} catch (Exception e) {
System.out.println("Exception after create timer : "+
e.toString());
}
return;
}
public void ejbTimeout(Timer timer)
{
//Implement Your Business Logic Here
System.out.println("
Hello World from My Timer");
System.out.println("ejbTimeout() called at: " +
new Date(System.currentTimeMillis()) +
" with info:");
System.out.println("Timer Info from ejbTimeout: "+timer.getInfo());
return;
}
public void cancelTimer(String timerName)
{
try
{
TimerService ts = mySessionCtx.getTimerService();
Collection timers = ts.getTimers();
Iterator it = timers.iterator();
while (it.hasNext())
{
Timer myTimer = (Timer) it.next();
if ((myTimer.getInfo().equals(timerName))) {
myTimer.cancel();
System.out.println("Successfully Cancelled " +
timerName);
}
}
}
catch (Exception e) {
System.out.println("Exception after cancelling timer : "+
e.toString());
}
return;
}
public void getTimerInfo()
{
if (timerHandle != null) {
Timer timer = timerHandle.getTimer();
// Get Timer Infomation
System.out.println("Timer Info : " +timer.getInfo());
}
}
public Date getCustomTimerInfo(){
Timer timer=timerHandle.getTimer();
return timer.getNextTimeout();
}
}
Thanks and Regards
Ayub