我想安排一个工作,它读取一些实体,调用一些ws并写入/更新一些实体。这项工作应在月亮之后进行处理,例如凌晨1点。关于这个问题我有2个问题。首先是调度程序采用常量参数,我的重新发现是Scheduler应该可以通过一些ui进行调整。有没有合适的方法来做到这一点?否则我必须每30分钟调整一次调度程序,并且在方法内部我必须查看一些可变时间值,无论它们是否满足。第二个问题是在Scheduler方法中启动usertransaction,当我调用调用utx.start的方法时,我得到“线程已经与事务关联!”进出口。我该怎么办?建议请。提前谢谢。
答案 0 :(得分:0)
您可以通过JMX控制台公开托管Bean来管理此计时器。
对于第二个问题,您似乎将事务配置为由容器管理。然后,当方法启动时,将自动启动事务。您可以禁用此自动管理,或者更好,避免程序化管理并让容器管理事务。
答案 1 :(得分:0)
如果要创建变量计划表达式,则需要获取TimerService(例如@Resource Timerservice _timerService),然后使用createCalendarTimer方法,该方法将调用@Timeout方法。计时器的计划是不可变的,因此UI在创建新计时器之前需要使用getTimers()来查找/取消现有计时器(可能通过匹配getInfo())。
@Timeout方法继承包含bean的事务功能。如果bean使用容器管理的事务,则UserTransaction将无法工作。