Хорошо, мне удалось сделать это с помощью пружинного модуля. Было бы лучше использовать встроенные функции Scheduler J2EE, но они не включены в веб-профиль Glassfish, только полностью (WTF ??). Поскольку мой проект находится в стадии разработки, я не хочу обновлять его до полного, тем более что гибкого способа сделать это обновление не существует. Только полная замена сервера. Очень плохой JavaEE ....
Итак, сначала нам нужно определить некоторые функции, которые будут запускаться по расписанию:
@Scope(value="application")
public class ClosePolisesTimer {
BusinessAttirbuteDAO attributeDAO;
@Scheduled(cron="0 0 0 * * *")
public void doCloseObsolete() {
// ...
}
}
Во-вторых, мы должны создать файл конфигурации пружины со следующей конфигурацией:
<bean id="businessAttributeDAOBean" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:global/KaskoCalculator/BusinessAttirbuteDAO" />
</bean>
<bean id="ClosePolisesTimer" class="com.rstk.kasko.bean.service.ClosePolisesTimer">
<aop:scoped-proxy />
<property name="polisDAO" ref="polisDAOBean" />
<property name="attributeDAO" ref="businessAttributeDAOBean" />
</bean>
<task:annotation-driven scheduler="closePolisExecutor"/>
<task:scheduler id="closePolisExecutor" pool-size="1"/>
Вот и все. Я определяю EJB-компоненты и использую «aop: scoped-proxy» для инициализации ими моего планировщика. График пружины включен в модуль основной пружины, поэтому необходима только зависимость основной пружины