-
1. Re: Ability to use alternate persistent stores for EJB timers
ybxiang.china Nov 23, 2012 12:31 AM (in response to ifti24)Here is and ejb timer example in JBoss AS 7.
I do NOT think it is difficult for you to save timer info. by yourself and construct it during JBOSS AS 7 Start.
package com.ybxiang.nms.ejb.timer;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.SessionContext;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.Timeout;
import javax.ejb.TimerConfig;
import javax.ejb.TimerService;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.jboss.logging.Logger;
import com.ybxiang.nms.ejb.service.master.INmsCoreService;
import com.ybxiang.nms.ejb.session.secure.ILocalAfnSession;
import com.ybxiang.nms.ejb.session.secure.ISecuredRemoteSession;
@Local(IAfn0cF25HistoryResponseCheckTimer.class)
@Singleton
@Startup
public class Afn0cF25HistoryResponseCheckTimer implements IAfn0cF25HistoryResponseCheckTimer{
Logger log = Logger.getLogger(Afn0cF25HistoryResponseCheckTimer.class);
@SuppressWarnings("unused")
@Resource
private SessionContext sessionContext;
@Resource TimerService timerService;
@PersistenceContext
protected EntityManager em;
@EJB
INmsCoreService nmsCoreService;
//@EJB
//ISecuredRemoteSession securedRemoteSession;
@EJB
ILocalAfnSession localAfnSession;
@PostConstruct
public void createTimer() {
log.info("==>starting Afn0cF25HistoryResponseCheckTimer timer...");
//final TimerService timerService = sessionContext.getTimerService();
timerService.createIntervalTimer(
10000L,
nmsCoreService.getAfn0cF25ResponseCheckTimerPeriod(),
new TimerConfig(null,false)
);
log.info("==>timer Afn0cF25HistoryResponseCheckTimer started!!!");
}
@Timeout
public void timeout( ){
log.info("@@@Afn0cF25HistoryResponseCheckTimer timeout@@@");
try{
localAfnSession.findAfn0CPnF25ResponseForAfn0cF25History();
}catch(Exception e){
log.error(e);
}
}
}
-
2. Re: Ability to use alternate persistent stores for EJB timers
ifti24 Nov 23, 2012 12:41 AM (in response to ybxiang.china)Hi,
Thanks for your quick reply. Your sample code is not clear to me.
How are you storing your information and how you are retriving it ?
I want to store a java object in database through timer service. And will read it during timer startup.
Thanks.
-
3. Re: Ability to use alternate persistent stores for EJB timers
nickarls Nov 23, 2012 2:00 AM (in response to ifti24)So you are not looking for a way to move timer storage from /standalone/data/timer-service-data to the DB, you are looking for a way to execute (by a timer) a Java class file that has been stored in the DB?
-
4. Re: Ability to use alternate persistent stores for EJB timers
ifti24 Nov 23, 2012 2:06 AM (in response to nickarls)"So you are not looking for a way to move timer storage from /standalone/data/timer-service-data to the DB"
- Yes, you are right. But if there is a way to do that it will be great if you can share me the idea.
"you are looking for a way to execute (by a timer) a Java class file that has been stored in the DB"
- Yes, you are right.
I can do the schedule operation using @Schedule annotation of javax.ejb.Schedule and also with javax.ejb.TimerService .
What is the main difference and similarity between them.
And when I will use @Schedule and when I will use Timer Service.
Thanks in advance.
-
5. Re: Ability to use alternate persistent stores for EJB timers
sfcoy Nov 23, 2012 2:07 AM (in response to ifti24)Hi there,
I'm curious to discover the purpose of your question. Normally, this would be an implementation detail and EJB timers should "just work" for you.
-
6. Re: Ability to use alternate persistent stores for EJB timers
ifti24 Nov 23, 2012 2:10 AM (in response to sfcoy)Ok. Can you please explain the later part of my question ?
Whats the main differnece between @Schedule and Timer Service.
-
7. Re: Ability to use alternate persistent stores for EJB timers
nickarls Nov 23, 2012 2:27 AM (in response to ifti24)I think the underlying implementation is about the same. With @Schedule it's "fire and forget" but by using the TimerService you can store handles yourself etc. In your case I would probably do it with annotations. Your current code probably has some special classloader that works on a byte[] fetched from the DB so that one might work directly.
You can find some more information on timers here: http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html
Message was edited by: Nicklas Karlsson
-
8. Re: Ability to use alternate persistent stores for EJB timers
sfcoy Nov 23, 2012 8:14 PM (in response to ifti24)You use the TimerService to create and/or access existing timers.
When you use @Schedule, the timer is automatically created for you. However, you then only have the opportunity to set the timerInfo to a static String value.
You can declare an @Schedule method with a Timer argument so that you can get access to your timer info String.
{code:java}@Schedule(..., info="some static value")
void handleTimeOut(Timer timer) {
String info = (String)timer.getInfo();
}{code}
which may seem a bit pointless until you realise that a single method can have mutliple @Schedule annotations associated with it.
It's still not clear why you care how your timer is persisted.
-
9. Re: Ability to use alternate persistent stores for EJB timers
ybxiang.china Nov 28, 2012 7:42 AM (in response to ifti24)Please study the API yourself:
timerService.createIntervalTimer(...)
Why do you expect we do everything for you?
-
10. Re: Ability to use alternate persistent stores for EJB timers
ifti24 Nov 28, 2012 7:48 AM (in response to ybxiang.china)ya, I have already done that and now I know the difference.
And now if someone in the forum ask the question then I'm going to explain that.
-
11. Re: Ability to use alternate persistent stores for EJB timers
ybxiang.china Nov 28, 2012 7:50 AM (in response to ifti24)two methods:
1. you can get timer info through timerService.createIntervalTimer(...) method.
@PostConstruct public void createTimer() { log.info("==>starting Afn0cF25HistoryResponseCheckTimer timer..."); //fetch your Timer initial info. with EntityManager from DB here, then create the timer with bellow metthod: timerService.createIntervalTimer( 10000L, nmsCoreService.getAfn0cF25ResponseCheckTimerPeriod(), new TimerConfig(null,false) ); log.info("==>timer Afn0cF25HistoryResponseCheckTimer started!!!"); } 2. I guess you can use TimerConfig(...) to fetch timer initial info. :
public TimerConfig(java.io.Serializable info, boolean persistent);
-
12. Re: Ability to use alternate persistent stores for EJB timers
ifti24 Nov 28, 2012 7:52 AM (in response to ybxiang.china)Thanks for the explanation.
-
13. Re: Ability to use alternate persistent stores for EJB timers
ybxiang.china Nov 28, 2012 7:52 AM (in response to ifti24)Nice to see that you solved it.