【问题标题】:JBoss AS 7.1 - running schedule using @Schedule annotationJBoss AS 7.1 - 使用@Schedule 注解运行计划
【发布时间】:2012-05-01 09:02:02
【问题描述】:

有人知道如何让@Schedule 注解在 JBoss AS 7 上工作吗?

我知道在 Glassfish-3.1.2 上它可以开箱即用。

我试试这个:

@ManagedBean
@Stateless(name="ImportStatementSchedule")
public class ImportStatementSchedule implements Serializable{
private Logger _log = Logger.getLogger(this.getClass());

    @Schedule(minute="*")
    public void executeImport(){
        _log.info("Scheduled task started");
    }

}

我希望每分钟都会收到日志消息,但什么也没有;)

我检查了这些论坛主题,但没有任何帮助:

https://community.jboss.org/message/623574

https://community.jboss.org/message/621893

https://community.jboss.org/message/637567

A 拥有 JBoss AS 7.1.1-Final

也许我忘记了什么,请谁能指出正确的方法?

更新:

我知道 JBoss 将我的 EJB 注册到 JNDI :

11:07:05,548 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-6) JNDI bindings for session bean named ImportStatementSchedule in deployment unit deployment "finadv.war" are as follows:

    java:global/finadv/ImportStatementSchedule!finadv.bean.ImportStatementSchedule
    java:app/finadv/ImportStatementSchedule!finadv.bean.ImportStatementSchedule
    java:module/ImportStatementSchedule!finadv.bean.ImportStatementSchedule
    java:global/finadv/ImportStatementSchedule
    java:app/finadv/ImportStatementSchedule
    java:module/ImportStatementSchedule

更新2

如cmets中所说已解决

【问题讨论】:

标签: jakarta-ee jboss ejb jboss7.x scheduler


【解决方案1】:

定时器服务是 EJB 服务。 ImportStatementSchedule 应该是 @Stateless@Singleton 会话 bean。来自 EJB 3.1 规范,第 18.2 节:

对于自动创建的定时器,timeout方法可以是带有Schedule注解的方法。可以为无状态会话 bean、单例会话 bean、消息驱动 bean 和 2.1 实体 bean 创建计时器。无法为有状态会话 bean 创建计时器。

INFO 日志语句具有误导性。 JBoss 不注册 EJB。它只是使用 @ManagedBean 注释 (Javadoc) 定义的相同命名方案:

[..] 托管 Bean 名称在 Java EE 模块中必须是唯一的。对于每个命名的托管 Bean,Java EE 容器必须使用与 EJB 组件相同的命名方案,在 JNDI 中提供以下条目。 在应用程序命名空间中:

java:app/<module-name>/<bean-name>

在包含托管 Bean 的模块的模块命名空间中:

java:module/<bean-name>

【讨论】:

  • +1 供参考,但我在无状态或单例注释之前都尝试过,现在我知道问题出在小时参数中提到的@Nick Wilson。
  • 谢谢,@rkosegi。这是否意味着您可以使用@Schedule 而不使用@Stateless@Singleton
  • 不,这意味着我无法使其工作,直到我将小时参数设置为“*”。目前我正在使用无状态注释并且它有效。
【解决方案2】:

我可以补充一下,如果你写的话

@Schedule(minute="*")

它只会在午夜触发。因为小时参数是默认的:0

尝试: @Schedule(minute = "/1", hour = "") 或类似的东西。 就我而言,它有所帮助。

【讨论】:

    【解决方案3】:

    您必须指定小时,尝试:

    @Schedule(hour="\*", minute="\*")
    

    【讨论】:

      猜你喜欢
      • 2012-05-20
      • 2018-07-02
      • 2015-09-11
      • 2021-02-22
      • 1970-01-01
      • 2020-10-09
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多