0

我正在尝试创建一个 ejb 计时器并成功执行此操作,但无法成功部署它。我第一次使用 ejb 计时器,所以我可能做得不对。如果有人引导我朝着正确的方向前进,那就太好了。谢谢

遵循来自 http://www.adam-bien.com/roller/abien/entry/simplest_possible_ejb_3_16的教程

import javax.ejb.Schedule;
import javax.ejb.Stateless;
import javax.ejb.Timer;

@Stateless
public class ScheduleRoutine {

/**
 * Default constructor. 
 */
public ScheduleRoutine() {
    // TODO Auto-generated constructor stub
}

@Schedule(second="*/1", minute="*",hour="*", persistent=false)
public void scheduledTimeout(final Timer t) {
    System.out.println("@Schedule called at: " + new java.util.Date());     
}
}

这是我正在使用的代码,我认为它没有问题。我将 JBoss AS 7.1.1 与 eclipse 一起使用,我所做的只是“在服务器上运行”它运行但无法按预期显示输出。

编辑:(解决方案)

当我尝试从 Eclipse 运行它时它不起作用,但后来我尝试手动导出 jar,然后它被成功部署。

4

1 回答 1

1

我在 jboss 7.1 上遇到了同样的问题。为了解决这个问题,我在我的 ejb 中添加了一个存根方法并用 @Timeout 注释它

@Timeout
public void stub(){
   // NOOP
}

还将@Stateless 更改为@Singleton 和@Startup,以便您的代码如下所示:

import javax.ejb.Schedule;
import javax.ejb.Startup;
import javax.ejb.Timer;
import javax.ejb.Timeout;

@Singleton
@Startup
public class ScheduleRoutine {

    /**
     * Default constructor. 
     */
    public ScheduleRoutine() {
        // TODO Auto-generated constructor stub
    }

    @Timeout
    public void stub() {
       // NOOP
    }

    @Schedule(second="*/1", minute="*",hour="*", persistent=false)
    public void scheduledTimeout(final Timer t) {
        System.out.println("@Schedule called at: " + new java.util.Date());     
    }
}
于 2015-01-20T14:41:23.423 回答