避免在玻璃鱼上清除计时器
我有一个用@Schedule注释的方法,该方法由容器偶尔调用。
@Schedule(second = "*/5", minute = "*", hour = "*", persistent = false)
public void myTimerMethod() throws Exception {
...
}
问题是在某些条件下,我希望这种方法抛出一个异常,导致正在进行的事务回滚。但是,如果我这样做超过两次,计时器将被删除并且不再被调用!
INFO: EJB5119:Expunging timer ['68@@1359143163781@@server@@domain1' 'TimedObject = MyBean' 'Application = My-War' 'BEING_DELIVERED' 'PERIODIC' 'Container ID = 89072805830524936' 'Fri Jan 25 21:49:30 CET 2013' '0' '*/5 # * # * # * # * # * # * # null # null # null # true # myTimerMethod # 0' ] after [2] failed deliveries
我知道我可以在域中配置计时器重新调度.xml使用
<domains>
...
<configs>
<config>
...
<ejb-container session-store="${com.sun.aas.instanceRoot}/session-store">
<ejb-timer-service>
<property name="reschedule-failed-timer" value="true"></property>
</ejb-timer-service>
</ejb-container>
...
</config>
</configs>
...
</domains>
但我的问题是,是否可以在部署应用程序时配置此设置?
无法在以下位置找到它:
glassfish-resources.xml
glassfish-ejb-jar.xml
glassfish-web.xml
有没有一些方法可以通过编程方式做到这一点?
(我之所以将这样的服务器配置放在配置文件中而不是配置服务器,是因为我的应用程序应该可以直接安装在玻璃鱼的全新安装上)