Лучший способ включить таймер на веб-профиле Glassfish - PullRequest
0 голосов
/ 23 октября 2011

Я использую веб-профиль, и он не позволяет использовать функциональность Java EE @ Schedule .Итак, у меня есть несколько способов решения проблемы:

  1. переустановите сервер, чтобы использовать полный профиль.Проблемы: это рискованно (функциональность / производительность) для моего производства и обременительно
  2. Используйте другие функции планирования, такие как Spring.Проблемы: я не знаю, как связать Spring с JavaEE, так как я хочу использовать компоненты CDI в моем планировщике.Модуль пружинных швов может помочь мне (http://sfwk.org/Seam3/SpringModule), но его документация в данный момент недоступна, и я не знаю, в каком состоянии он.способ включить планирование в моем приложении Glassfish?

    Спасибо

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Хорошо, мне удалось сделать это с помощью пружинного модуля. Было бы лучше использовать встроенные функции 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» для инициализации ими моего планировщика. График пружины включен в модуль основной пружины, поэтому необходима только зависимость основной пружины

1 голос
/ 27 октября 2011

Нам очень повезло с использованием планировщика заданий с открытым исходным кодом Quartz в Spring для других проектов, поэтому я настоятельно рекомендую его для планирования. Вы можете настроить запуск планировщика из сервлета (в который можно вводить компоненты CDI), и запланированное задание может вызывать компонент EJB Stateless Session (в который можно также вводить компоненты CDI).

Вот несколько ссылок - надеюсь, это поможет!

Инициализация планировщика в контейнере сервлета

Вот отличная статья о вызове EJB из Quartz

...