2012-05-01 44 views
6

任何人都知道如何使@Schedule注释在JBoss AS 7上工作?JBoss AS 7.1 - 使用@Schedule注释运行计划

我知道在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

一个有JBoss AS中7.1.1决赛

也许我忘了什么事,请任何人都可以点我到正确的方式?

UPDATE:

我知道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 

UPDATE2

在评论

+3

看到这个主题,特别是 “小时” 参数: http://stackoverflow.com/questions/10246606/java-ee-scheduler-是不是所谓的 –

+1

通过设置小时参数解决了问题。但是,我以前使用@Schedule(分钟=“18”,小时=“15”)等精确值尝试过,但没有任何反应。谢谢。 – rkosegi

回答

6

定时服务提到已解决是EJB服务。 ImportStatementSchedule应该是@Stateless@Singleton会话bean。根据EJB 3.1规范,第18.2节:

对于自动创建的计时器,超时方法可能是一个使用计划注释进行注释的方法。定时器可以为无状态会话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>

在包含Managed Bean的模块的模块命名空间:

java:module/<bean-name>

+0

+1以供参考,但我在无状态或Singleton注释之前尝试过,现在我知道该问题与@Nick Wilson在小时参数中提到的一样。 – rkosegi

+0

thx,@rkosegi。这是否意味着您可以使用'@ Schedule'而不使用'@ Stateless'或'@ Singleton'? – kraftan

+0

不,这意味着我无法使其工作,直到我将小时参数设置为“*”。目前我正在使用无状态注释,它的工作原理。 – rkosegi

4

我可以补充一点,如果你写

@Schedule(minute="*")

它只会在午夜时分开火。因为小时参数是默认值:。

尝试: @Schedule(minute = "/1", hour = "") 或类似的东西。 在我的情况下,它的帮助。

0

您必须指定小时,尝试:

​​3210