package org.jboss.seam.example.seampay;
import java.util.Date;
import javax.ejb.Timer;
import javax.persistence.EntityManager;
import org.jboss.seam.annotations.async.Asynchronous;
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.Expiration;
import org.jboss.seam.annotations.async.IntervalDuration;
import org.jboss.seam.example.seampay.Payment;
import org.jboss.seam.log.Log;
@Name("processor")
@AutoCreate
public class PaymentProcessor {
@In
EntityManager entityManager;
@Logger Log log;
@Asynchronous
@Transactional
public Timer schedulePayment(@Expiration Date when,
@IntervalDuration Long interval,
Payment payment)
{
payment = entityManager.merge(payment);
log.info("[#0] Processing payment #1", System.currentTimeMillis(), payment.getId());
processPayment(payment);
return null;
}
public void processPayment(Payment payment) {
if (payment.getActive()) {
payment.getAccount().adjustBalance(payment.getAmount().negate());
payment.setLastPaid(new Date());
if (payment.getPaymentFrequency().equals(Payment.Frequency.ONCE)) {
payment.setActive(false);
}
}
}
}