package org.jboss.seam.example.quartz; import java.math.BigDecimal; import java.util.Date; import javax.persistence.EntityManager; import org.jboss.seam.annotations.AutoCreate; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Transactional; import org.jboss.seam.annotations.async.Asynchronous; import org.jboss.seam.annotations.async.Expiration; import org.jboss.seam.annotations.async.FinalExpiration; import org.jboss.seam.annotations.async.IntervalCron; import org.jboss.seam.annotations.async.IntervalDuration; import org.jboss.seam.async.QuartzTriggerHandle; import org.jboss.seam.log.Log; @Name("processor") @AutoCreate public class PaymentProcessor { @In EntityManager entityManager; @Logger Log log; @Asynchronous @Transactional public QuartzTriggerHandle schedulePayment(@Expiration Date when, @IntervalDuration Long interval, @FinalExpiration Date stoptime, Payment payment) { payment = entityManager.merge(payment); log.info("[#0] Processing payment #1", System.currentTimeMillis(), payment.getId()); if (payment.getActive()) { BigDecimal balance = payment.getAccount().adjustBalance(payment.getAmount().negate()); log.info(":: balance is now #0", balance); payment.setLastPaid(new Date()); if (payment.getPaymentFrequency().equals(Payment.Frequency.ONCE)) { payment.setActive(false); } } return null; } @Asynchronous @Transactional public QuartzTriggerHandle schedulePayment(@Expiration Date when, @IntervalCron String cron, @FinalExpiration Date stoptime, Payment payment) { payment = entityManager.merge(payment); log.info("[#0] Processing cron payment #1", System.currentTimeMillis(), payment.getId()); if (payment.getActive()) { BigDecimal balance = payment.getAccount().adjustBalance(payment.getAmount().negate()); log.info(":: balance is now #0", balance); payment.setLastPaid(new Date()); } return null; } }