Liferay - Menjadwalkan pekerjaan pada waktu yang ditentukan oleh pengguna dari portal

Saya menggunakan Liferay 6.2 CE GA4. Saya telah mencoba menjadwalkan eksekusi suatu metode di pengontrol portlet saya.

Saya menemukan banyak tutorial yang sebagian besar tutorialnya menyediakan kasus di mana kita dapat menyediakan waktu di liferay-portlet.xml, seperti tutorial ini. Tapi saya ingin waktu dikonfigurasi oleh pengguna di portal. Jadi apakah mungkin untuk mendapatkan waktu dan menerapkan pekerjaan penjadwalan sederhana di pengontrol saya.

EDIT: Saya memiliki pengontrol seperti berikut yang melakukan pekerjaan penjadwalan.

public class MyController {
    @RenderMapping
    public String defaultView() {
        String cron = "0 0/1 * 1/1 * ? *";
        Date dt = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dt); 
        calendar.add(Calendar.MINUTE, 2);

        Trigger trigger = null;  
        try {  
            trigger = TriggerFactoryUtil.buildTrigger(TriggerType.CRON, Scheduler.class.getName(), Scheduler.class.getName(), calendar.getTime(), calendar.getTime(), cron);  
        } catch (SchedulerException e) {  
            e.printStackTrace();  
        }  
        Portlet portlet = PortletLocalServiceUtil.getPortletById("portlet_id");  
        Message message = new Message();  
        message.put("CONTEXT_PATH", portlet.getContextPath());  
        message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME, Scheduler.class.getName());  
        message.put(SchedulerEngine.PORTLET_ID, portlet.getPortletId());  

        Scheduler scheduler = new Scheduler();
        MessageBusUtil.registerMessageListener(DestinationNames.SCHEDULER_DISPATCH, scheduler);
        try {  
            SchedulerEngineHelperUtil.schedule( trigger, StorageType.PERSISTED, "", DestinationNames.SCHEDULER_DISPATCH, message, 5);  
        } catch (SchedulerException e) {  
            e.printStackTrace();  
        }  

        return "view";
    }
}

Kelas Scheduler di atas didefinisikan seperti di bawah ini.

public class Scheduler implements MessageListener {
    @Override
    public void receive(Message message) throws MessageListenerException {
        myMethodAtScheduledTime();
    }

    public void myMethodAtScheduledTime() {
        System.out.println("Invoked at " + new Date());
    }
}

Metode myMethodAtScheduledTime dipanggil setiap 10 atau 20 detik. Bagaimana cara membatasi panggilan hanya sekali saja. yaitu tepat pada waktu contoh kalender waktu + 2 menit (calendar.add(Calendar.MINUTE, 2);)


person Philip John    schedule 16.11.2015    source sumber


Jawaban (1)


Penjadwal dapat dibuat secara dinamis.

  1. Tugas yang ingin Anda jalankan harus mengimplementasikan MessageListener - antarmuka hanya dengan satu metode receive(Message).
  2. Pemicu yang dapat dikonfigurasi dapat didaftarkan melalui SchedulerEngineHelperUtil#schedule. Pemicunya menggunakan kelas pendengar pesan dan waktu pemanggilan sebagai parameter (antara lain).

Lihat postingan blog Membuat penjadwal secara dinamis di liferay atau postingan forum ini untuk menemukan beberapa contoh.

person Tomas Pinos    schedule 16.11.2015
comment
Bisakah Anda memeriksa postingan yang diperbarui sekarang. Penjadwal dipicu setiap 10-20 detik dan tidak berhenti. - person Philip John; 16.11.2015