我在Java EE6 Singleton Session Bean中有一个方法,每隔30秒由一个@Schedule(...)计时器调用.这可以正常工作,直到在方法中抛出异常并捕获异常(异常是在try-catch块中抛出并捕获).异常发生后,计时器停止调用该方法.
无论是否发生异常,我如何强制计时器再次调用该方法?
最好的祝福,
基督教
Per*_*erg 12
相关讨论见http://www.java.net/node/706287.
事实证明,如果在@Schedule方法中抛出异常,则该方法将在5秒后再次调用,如果失败,则计时器只是DIES.永远不再打电话了.
如果你经常想做一些监督,那就是那个人.
因此,我的解决方案是将所有代码都包含在try块中的@Schedule方法中并捕获所有异常,记录它们,并返回,就好像一切正常.
如果有一种更优雅的方式,我很乐意听到它.
编辑:不,只是添加一个try {...} catch(例外e){...}不是一个防水的解决方案.有时我还是会死了@Schedule.当数据库事务出现问题时,JEE容器可能会做一些模糊的事情吗?Nayan:你能澄清一下你在这件事上说的话吗?
如文档中所述:
可选的持久元素采用布尔值,用于指定自动计时器是否应在服务器重新启动或崩溃后继续存在.默认情况下,所有自动计时器都是持久的.
企业bean通常在事务中创建一个计时器.如果回滚此事务,则还会回滚计时器创建.类似地,如果bean取消了回滚的事务中的计时器,则回滚计时器取消.在这种情况下,计时器的持续时间将被重置,就像从未发生过取消一样.
如果计时器在遇到异常后失败,那么剩下的可能方法是在catch块中手动创建一个新的计时器.
| 归档时间: |
|
| 查看次数: |
7952 次 |
| 最近记录: |