小编Mar*_*rio的帖子

@ Singleton,@ Startup,@ PostConstruct不适用于EJB3.1和Glassfishv3.0.1

我有这个设置的问题,我甚至无法查看日志.

这是我的@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)

java ejb timer glassfish java-ee

6
推荐指数
1
解决办法
1万
查看次数

如何让这个定时器服务类处理"预定时间的变化"?

示例代码:

@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); //这行代码必须将调度程序的当前调度时间更改为新设置的时间.

注意:

我想远程访问这个类; 并且通过将新计划作为参数传递,此类必须相应地更改其超时.

java ejb timer java-ee ejb-3.1

3
推荐指数
1
解决办法
8242
查看次数

标签 统计

ejb ×2

java ×2

java-ee ×2

timer ×2

ejb-3.1 ×1

glassfish ×1