任何人都知道如何在JBoss AS 7上进行@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
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
UPDATE2
如评论中提到的那样已经解决了
答案 0 :(得分:6)
Timer服务是EJB服务。 ImportStatementSchedule
应该是@Stateless
或@Singleton
会话bean。从EJB 3.1规范,第18.2节:
对于自动创建的计时器,timeout方法可以是使用Schedule注释注释的方法。可以为无状态会话bean,单例会话bean,消息驱动Bean和2.1实体bean创建计时器。无法为有状态会话bean创建计时器。
INFO
日志语句具有误导性。 JBoss没有注册EJB。它只使用@ManagedBean
注释(Javadoc)定义的相同命名方案:
[..] Managed Bean名称在Java EE模块中必须是唯一的。对于每个命名的Managed Bean,Java EE容器必须使用与EJB组件相同的命名方案在JNDI中提供以下条目。 在应用程序命名空间中:
java:app/<module-name>/<bean-name>
在包含Managed Bean的模块的模块名称空间中:
java:module/<bean-name>
答案 1 :(得分:4)
我可以补充一点,如果你写的话
@Schedule(minute="*")
尝试:
@Schedule(minute = "/1", hour = "")
或类似的东西。
就我而言,它有所帮助。
答案 2 :(得分:0)
您必须指定小时,请尝试:
Project_Description_Preview