Also I am trying to create a utility which will allow to create multiple timers and schedule their programs.
Can this be achieved using EJB Timer ? will making ejbTimeout as abstract, allow another ejb to implement the functionality of ejbTimeout and put their scheduling logic there ?
Here is the code for EJB Timer ============================================
public void initializeTimer(Date firstDate,long timeout,String timerName) { try { // Create Your Timer TimerService ts = mySessionCtx.getTimerService(); Timer timer = ts.createTimer(firstDate, timeout, timerName); this.name=timerName; repeatInterval=new Long(timeout).intValue(); 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: "+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(); System.out.println("Returning custom time from bean "); return timer.getNextTimeout(); } public String getName(){ System.out.println("REturning name from Time bean "+name); return name; } public int getRepeatInterval(){ System.out.println("REturning repeat Interval from Time bean : "+repeatInterval); return repeatInterval; } }
Originally posted by Ayub ali khan: Can I declare an ejb as abstract ?
Yes. Just be sure to included the concrete classes (rather than the abstract superclass) is your deployment descriptor. Then the superclass is just a class, not an EJB.
Yes. Just be sure to included the concrete classes (rather than the abstract superclass) is your deployment descriptor. Then the superclass is just a class, not an EJB.
You do know, that you changed your answer from yes to no in just two sentences.
Yes, because you can declare the class as abstract, but at that point it ceases to be an EJB, so then no an EJB cannot be abstract.