Liferay scheduler. Планирование заданий в Liferay 6

12.12.2012

В Liferay существует возможность создания заданий, выполняемых по расписанию. Реализация планировщика заданий в Liferay версии 5 и версии 6 отличаются. В последней версии Liferay используется стандартный механизм шины сообщений, т.е. любое задание, по сути, является слушателем на получение сообщений. Из задания доступны все те же возможности (Liferay API), что и из любого плагина.

Для создания своего собственного задания в Liferay необходимо:
  1. Объявить планировщик в конфигурационном файле портлета liferay-portlet.xml внутри тега
  2. 
    scheduler
    
                ru.amigosteam.liferay.shceduler.SchedulerImpl
                
                    
                        10
                        minute
                    
                
    
    
    
  3. Необходимо задать класс, являющийся собственно самим заданием, а также периодичность запуска. Периодичность запуска определяется в секции и может быть задана 2 способами:
    • В формате cron
      
      */10 * * * * ?
      
      
    • В упрощенном формате с указанием единицы времени и значением периода. Доступные значения для указания периода: "day", "hour", "minute", "second", "week". Значение по-умолчанию "second".
                
                    
                        10
                        minute
                    
                
    
  4. Реализовать интерфейс com.liferay.portal.kernel.messaging.MessageListener в своем задании
    import com.liferay.portal.kernel.exception.SystemException;
    import com.liferay.portal.kernel.log.Log;
    import com.liferay.portal.kernel.log.LogFactoryUtil;
    import com.liferay.portal.kernel.messaging.Message;
    import com.liferay.portal.kernel.messaging.MessageListener;
    import com.liferay.portal.kernel.messaging.MessageListenerException;
    
    public class SchedulerImpl implements MessageListener {
        private static final Log log = LogFactoryUtil.getLog(SchedulerImpl.class);
      
        public void receive(Message msgs) throws MessageListenerException {
            log.info("Scheduler started");
            //TODO Implementation here
            log.info("Scheduler finished");
        }
    }
    
Примечание
  • Для планирования заданий в Liferay используется библиотека с открытым исходным кодом Quartz. Вся информация о заданиях хранится в таблицах БД.
  • При объявлении планировщика важен порядок следования элементов
Источники