[jboss-cvs] jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz ...
Michael Yuan
michael.yuan at jboss.com
Mon Jun 4 18:46:26 EDT 2007
User: myuan
Date: 07/06/04 18:46:26
Added: examples/quartz/src/org/jboss/seam/example/quartz
Account.java Digits.java DigitsValidator.java
Payment.java PaymentController.java
PaymentProcessor.java package-info.java
Log:
Add initial support for quartz
Revision Changes Path
1.1 date: 2007/06/04 22:46:26; author: myuan; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/Account.java
Index: Account.java
===================================================================
package org.jboss.seam.example.quartz;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import org.hibernate.validator.NotNull;
@Entity
public class Account
implements Serializable
{
@Id @GeneratedValue
private Long id;
@NotNull
BigDecimal balance;
@NotNull
String accountNumber;
//String login;
//String password;
@OneToMany(mappedBy="account", cascade=CascadeType.REMOVE)
//@OrderBy("paymentDate")
private List<Payment> payments;
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public String getAccountNumber()
{
return accountNumber;
}
public void setAccountNumber(String accountNumber)
{
this.accountNumber = accountNumber;
}
public BigDecimal getBalance()
{
return balance;
}
public BigDecimal adjustBalance(BigDecimal amount) {
balance = balance.add(amount);
return balance;
}
public List<Payment> getPayments()
{
return payments;
}
}
1.1 date: 2007/06/04 22:46:26; author: myuan; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/Digits.java
Index: Digits.java
===================================================================
package org.jboss.seam.example.quartz;
import org.hibernate.validator.*;
import java.lang.annotation.*;
@ValidatorClass(DigitsValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Digits {
int integerDigits();
int fractionalDigits() default 0;
String message() default "invalid numeric value";
}
1.1 date: 2007/06/04 22:46:26; author: myuan; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/DigitsValidator.java
Index: DigitsValidator.java
===================================================================
package org.jboss.seam.example.quartz;
import java.math.BigDecimal;
import java.math.BigInteger;
import org.hibernate.validator.Validator;
public class DigitsValidator
implements Validator<Digits>
{
int integerDigits;
int fractionalDigits;
public void initialize(Digits configuration) {
integerDigits = configuration.integerDigits();
fractionalDigits = configuration.fractionalDigits();
}
public boolean isValid(Object value) {
if (value==null) {
return true;
}
String stringValue = null;
if (value instanceof String) {
try {
stringValue = stringValue(new BigDecimal((String) value));
} catch (NumberFormatException nfe) {
return false;
}
} else if (value instanceof BigDecimal) {
stringValue = stringValue((BigDecimal) value);
} else if (value instanceof BigInteger) {
stringValue = stringValue((BigInteger) value);
} else {
return false;
}
int pos = stringValue.indexOf(".");
int left = (pos == -1) ? stringValue.length() : pos;
int right = (pos==-1) ? 0 : stringValue.length() - pos -1;
if (left==1 && stringValue.charAt(0) == '0') {
left--;
}
if (left > integerDigits || right > fractionalDigits) {
return false;
}
return true;
}
private String stringValue(BigDecimal number) {
return number.abs().stripTrailingZeros().toPlainString();
}
private String stringValue(BigInteger number) {
return number.abs().toString();
}
}
1.1 date: 2007/06/04 22:46:26; author: myuan; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/Payment.java
Index: Payment.java
===================================================================
package org.jboss.seam.example.quartz;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import org.jboss.seam.core.QuartzDispatcher.QuartzTriggerHandle;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Transient;
import javax.persistence.ManyToOne;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;
@Entity
public class Payment
implements Serializable
{
@Id @GeneratedValue
private Long id;
@NotNull
@Digits(integerDigits=8,fractionalDigits=2)
private BigDecimal amount;
@NotNull @Length(min=1)
private String payee;
@NotNull @ManyToOne
private Account account;
@NotNull
private Date paymentDate;
@NotNull
private Date createdDate;
private Date lastPaid;
private boolean active = true;
private Frequency paymentFrequency = Frequency.DAILY;
@Lob
private QuartzTriggerHandle quartzTriggerHandle;
public Long getId() {
return id;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public String getPayee()
{
return payee;
}
public void setPayee(String payee) {
this.payee = payee;
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
account.getPayments().add(this);
}
public Date getPaymentDate() {
return paymentDate;
}
public void setPaymentDate(Date paymentDate) {
this.paymentDate = paymentDate;
}
public Date getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}
public Date getLastPaid() {
return lastPaid;
}
public void setLastPaid(Date lastPaid) {
this.lastPaid = lastPaid;
}
public boolean getActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public Frequency getPaymentFrequency() {
return paymentFrequency;
}
public void setPaymentFrequency(Frequency paymentFrequency) {
this.paymentFrequency = paymentFrequency;
}
public QuartzTriggerHandle getQuartzTriggerHandle() {
return quartzTriggerHandle;
}
public void setQuartzTriggerHandle(QuartzTriggerHandle quartzTriggerHandle) {
this.quartzTriggerHandle = quartzTriggerHandle;
}
public enum Frequency {
ONCE(null),
EVERY_MINUTE(60*1000l),
HOURLY(60*60*1000l),
DAILY(24*60*60*1000l),
WEEKLY(7*24*60*60*1000l);
Long interval;
Frequency(Long interval) {
this.interval = interval;
}
public Long getInterval() {
return interval;
}
}
}
1.1 date: 2007/06/04 22:46:26; author: myuan; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/PaymentController.java
Index: PaymentController.java
===================================================================
package org.jboss.seam.example.quartz;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.RequestParameter;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.core.FacesMessages;
import org.jboss.seam.framework.EntityHome;
import org.jboss.seam.log.Log;
import org.jboss.seam.core.QuartzDispatcher.QuartzTriggerHandle;
@Name("paymentHome")
public class PaymentController
extends EntityHome<Payment>
{
@RequestParameter Long paymentId;
@In PaymentProcessor processor;
@Logger Log log;
public String saveAndSchedule()
{
String result = persist();
Payment payment = getInstance();
log.info("scheduling instance #0", payment);
QuartzTriggerHandle handle = processor.schedulePayment(payment.getPaymentDate(),
payment.getPaymentFrequency().getInterval(),
payment);
payment.setQuartzTriggerHandle( handle );
return result;
}
@Override
public Object getId() {
return paymentId;
}
@Transactional
public void cancel() {
Payment payment = getInstance();
QuartzTriggerHandle handle = payment.getQuartzTriggerHandle();
payment.setQuartzTriggerHandle(null);
payment.setActive(false);
try
{
handle.cancel();
}
catch (Exception nsole)
{
FacesMessages.instance().add("Payment already processed");
}
}
}
1.1 date: 2007/06/04 22:46:26; author: myuan; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/PaymentProcessor.java
Index: PaymentProcessor.java
===================================================================
package org.jboss.seam.example.quartz;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.EntityManager;
import org.jboss.seam.annotations.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.timer.Expiration;
import org.jboss.seam.annotations.timer.IntervalDuration;
import org.jboss.seam.log.Log;
import org.jboss.seam.core.QuartzDispatcher.QuartzTriggerHandle;
@Name("processor")
@AutoCreate
public class PaymentProcessor {
@In
EntityManager entityManager;
@Logger Log log;
@Asynchronous
@Transactional
public QuartzTriggerHandle schedulePayment(@Expiration Date when,
@IntervalDuration Long interval,
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;
}
}
1.1 date: 2007/06/04 22:46:26; author: myuan; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/package-info.java
Index: package-info.java
===================================================================
@Namespace(value="http://jboss.com/products/seam/examples/quartz")
package org.jboss.seam.example.quartz;
import org.jboss.seam.annotations.*;
More information about the jboss-cvs-commits
mailing list