我有这个设置的问题,我甚至无法查看日志.
这是我的@Singleton @StartupEJB:
@Singleton
@Startup
@DependsOn("SchedulerEJB")
public class SchedulerStartUp {
private static Logger log = Logger.getLogger(SchedulerStartUp.class);
@EJB
SchedulerEJB schedEJB;
@PostConstruct
public void atStartup() {
log.info("startUp")
System.out.println("startUp");
schedEJB.cancelTimer("EBlastScheduler");
schedEJB.createTimer("*/1", "*", "*");
}
}
Run Code Online (Sandbox Code Playgroud)
的SchedulerEJB:
@Stateless
public class SchedulerEJB {
@Resource
TimerService timerService;
public cancelTimer(String timerInfo){/*...*/}
public createTimer(String sec, String min, String hour) {/*...*/}
@Timeout
public void execute(Timer timer) {/*...*/}
}
Run Code Online (Sandbox Code Playgroud)
Maven pom:
//Been Using Glassfishv3.0.1 and EJB3.1 with a dependency of:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud) 示例代码:
@Singleton
@Startup public class EBlastScheduler {
@Resource
TimerService timerService;
EBlastScheduler what = new EBlastScheduler();
@PostConstruct
public void initialize(){
if (timerService.getTimers() != null) {
for (Timer timer : timerService.getTimers()) {
if (timer.getInfo().equals("EBlastScheduler")){
timer.cancel();
}
}
}
ScheduleExpression expression = new ScheduleExpression();
expression.second("*/1").minute("*").hour("*");
timerService.createCalendarTimer(expression);
}
@Timeout
public void execute(Timer timer){
System.out.println("----Invoked: " + System.currentTimeMillis());
} }
Run Code Online (Sandbox Code Playgroud)
我只想创建一个计时器服务,通过取消以前的计划(如果设置了新计划),可以处理其超时计划的更改.就我而言,我无法弄清楚如何在EJB 3.1中执行此操作,尤其是因为我是这个框架的新手.我们将非常感谢您的帮助.:d
我想要这样的东西:
EBlastScheduler ebs = new EBlastScheduler(ScheduleExpression sExp); //这行代码必须将调度程序的当前调度时间更改为新设置的时间.
注意:
我想远程访问这个类; 并且通过将新计划作为参数传递,此类必须相应地更改其超时.