@Schedule
, 당신은 용기가 지정된 간격이나 지정된 달력 시간에 메소드를 호출해야하는 @Schedule 주석을 사용할 수 있습니다. 당신의 @Schedule 주석 방법은 주석 노동자-방법으로 노동자 - EJB를 호출 할 수있는 별도의 스레드에서 일을하고 싶었다면 당신은 자신의 코드
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
}
}
에서 처리 스레드를 방지 할 수 있도록 허용 난 그냥 실현
@Timeout @Asynchronous
당신은 데이터베이스에서 시작되는 일정을 원했다. @Startup 주석을 사용하여 @Singleton ejb를 사용하여 프로그래밍 방식으로 타이머를 시작하는 옵션입니다. 타임 아웃 주석 메소드는, 일부의 타이머가 동시에 종료했을 경우, 개별의 thread로 불려갑니다.
@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 Application 등을 포함한 * Client와 혼동을 야기 할 수 있습니다. *, * 새로운 서비스는 별도의 스레드에서 실행되어야합니다. * – vels4j
나는 더 명확하게 만들 수 있었을 것입니다. 모든 것이 하나의 WAR 파일로 GlassFish 서버에 업로드됩니다. 서버 논리에서 클라이언트에 이르기까지 모든 것이 그 파일에 있습니다.이 방법을 구현하는 것이 좋습니다. –