package org.jboss.seam.example.quartz.test; import static org.jboss.seam.annotations.Install.MOCK; import java.sql.Timestamp; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.async.QuartzTriggerHandle; import org.jboss.seam.async.Schedule; import org.jboss.seam.async.TimerSchedule; import org.jboss.seam.core.Events; import org.jboss.seam.example.quartz.Payment; import org.jboss.seam.example.quartz.PaymentHome; import org.jboss.seam.log.Log; /** * @author Pete Muir * */ @Name("paymentHome") @Install(precedence=MOCK) public class TestPaymentController extends PaymentHome { @In TestPaymentProcessor processor; @Logger Log log; public String scheduleAndSaveAsynchronously() { String result = persist(); Payment payment = getInstance(); log.info("scheduling instance #0", payment); QuartzTriggerHandle handle = processor.schedulePayment(payment.getPaymentDate(), payment.getPaymentFrequency().getInterval(), payment.getPaymentEndDate(), payment); payment.setQuartzTriggerHandle( handle ); return result; } public void scheduleAndSaveUsingAsynchronousEvent() { persist(); Events.instance().raiseAsynchronousEvent("org.jboss.seam.example.quartz.test.scheduleAndSave", getInstance()); } public void scheduleAndSaveUsingTimedEvent() { persist(); // A simple once-only which exprires in 1000ms Schedule schedule = new TimerSchedule( new Timestamp( System.currentTimeMillis() + 1000l ) ); Events.instance().raiseTimedEvent("org.jboss.seam.example.quartz.test.scheduleAndSave", schedule, getInstance()); } public void scheduleAndSaveWithTransactionEvents() { TransactionStatus.clear(); Events.instance().raiseTransactionSuccessEvent("org.jboss.seam.example.quartz.test.transactionSuccess", getInstance()); Events.instance().raiseTransactionCompletionEvent("org.jboss.seam.example.quartz.test.transactionCompletion", getInstance()); try { super.saveAndSchedule(); } catch (Exception e) { e.printStackTrace(); } } @Override public Class<Payment> getEntityClass() { return Payment.class; } }