@Schedule
如果使用EJB 3.1(glassfish的3.x的),則可以使用@Schedule註解爲具有容器在指定的時間間隔或在給定的日曆時間調用的方法。讓您避免處理線程在自己的代碼
Read about ejb 3.1 timer
@Stateless
public class LabbBean {
@EJB
WorkerEjb workerEjb;
@Schedule(second="*/5", minute="*",hour="*", persistent=false)
public void myMethod() {
for (all jobs found in db){
workerEjb.workerMethod(job);
}
}
}
@Stateless
public class WorkerEjb {
@Asynchronous
public void workerMethod(job) {
//Send emails
}
}
如果你想要做在單獨的線程工作時,@Schedule註解的方法可以調用一個工人的EJB與註釋的工人方法作爲@Asynchronous
@Timeout
我才意識到你想要的時間表,從數據庫開始。一個選項是使用帶有@Startup註解的@Singleton ejb以編程方式啓動一堆定時器。如果某些定時器同時用完,則會在單獨的線程中調用超時註釋的方法。
@Singleton
@Startup
public class LabbBean {
@Resource
protected TimerService timerService;
@PostConstruct
public void init() {
//Init your timers from the data in the database here
for (all your timers) {
TimerConfig config = new TimerConfig();
config.setInfo("timer1");
config.setPersistent(false);
ScheduleExpression schedule = new ScheduleExpression();
schedule.dayOfMonth(10);
schedule.minute(2);
timerService.createCalendarTimer(schedule, config);
}
}
//method called when timeout occurs
@Timeout
public void timeoutHandler(Timer timer) {
String name = timer.getInfo().toString();
System.out.println("Timer name=" + name);
}
}
什麼是理解你的問題的最佳做法:-)?與* WebSTart Web應用程序等客戶端*全部在一個包*,*我的新服務需要運行在一個單獨的線程* – vels4j
我想我可以說得更清楚。 在一個WAR文件中將所有內容上傳到GlassFish服務器。從服務器邏輯到客戶端的所有內容都在該文件中,實現這一點會很好,這種方法也是很好的... –